Skip to content

New CI for DiffTool.java #29

New CI for DiffTool.java

New CI for DiffTool.java #29

Workflow file for this run

name: CI/CD for DiffTool
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch: # Allows manual triggering
jobs:
build-and-test:
runs-on: ubuntu-latest
env:
JAVA_VERSION: '21'
CONFIG_DIR: '.ci-config'
POM_URL: "https://raw.githubusercontent.com/checkstyle/test-configs/f08a12ee4dc34892b0438d1f69f447ed8db2c60c/checkstyle-tester/pom.xml"
DIFF_TOOL_VERSION: "1.0-SNAPSHOT-all"
PATCH_DIFF_TOOL_VERSION: "0.1-SNAPSHOT"
steps:
# 1. Checkout the repository (Updated)
- name: Checkout Repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
clean: true
fetch-depth: 1
# 2. Set up JDK 21
- name: Set up JDK ${{ env.JAVA_VERSION }}
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
cache: 'gradle'
# 3. Cache Maven dependencies
- name: Cache Maven Dependencies
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
maven-
# 4. Build the project with Gradle
- name: Build with Gradle
run: |
cd diff-java-tool
./gradlew clean build
# 5. Run unit tests
- name: Run Unit Tests
run: |
cd diff-java-tool
./gradlew test
# 6. Create checkstyle-tester directory within the workspace
- name: Create checkstyle-tester directory
run: mkdir -p "${{ github.workspace }}/checkstyle-tester"
# 7. Download pom.xml
- name: Download pom.xml
run: |
curl --fail-with-body -L -o \
"${{ github.workspace }}/checkstyle-tester/pom.xml" "${{ env.POM_URL }}"
# 8. Download DiffTool JAR
- name: Download DiffTool JAR
uses: robinraju/[email protected]
with:
repository: "relentless-pursuit/test-configs"
tag: "diff-java-tool-${{ env.DIFF_TOOL_VERSION }}"
fileName: "diff-java-tool-${{ env.DIFF_TOOL_VERSION }}.jar"
out-file-path: "${{ github.workspace }}/checkstyle-tester"
# 9. Download patch-diff-report-tool JAR
- name: Download patch-diff-report-tool JAR
uses: robinraju/[email protected]
with:
repository: "checkstyle/contribution"
tag: "patch-diff-report-tool-${{ env.PATCH_DIFF_TOOL_VERSION }}"
fileName: >-
patch-diff-report-tool-${{ env.PATCH_DIFF_TOOL_VERSION }}-jar-with-dependencies.jar
out-file-path: "${{ github.workspace }}/checkstyle-tester"
- name: Clone Checkstyle Repository
run: |
git clone https://github.com/checkstyle/checkstyle.git "${{ github.workspace }}/checkstyle"
- name: Create Temporary Patch Branch
run: |
cd "${{ github.workspace }}/checkstyle"
git config --global user.email "[email protected]"
git config --global user.name "GitHub Actions"
git checkout -b temp-patch-branch
# Optionally make a minor change to ensure reports are different
echo "// Temporary change" >> dummy.java
git add dummy.java
git commit -m "Temporary change for testing"
# 11. Execute DiffTool.jar in 'diff' mode (Updated)
- name: Execute DiffTool.jar in Diff Mode
run: |
# Define the directory where DiffTool.jar expects resources
CHECKSTYLE_TESTER_DIR="${{ github.workspace }}/checkstyle-tester"
cd "$CHECKSTYLE_TESTER_DIR" || { echo "Failed to change directory to $CHECKSTYLE_TESTER_DIR"; exit 1; }
# Define necessary variables based on event type
PR_BRANCH="master" # Use the default branch for push events
REPO="${{ github.workspace }}/checkstyle"
CONFIG_XML="${{ github.workspace }}/${{ env.CONFIG_DIR }}/config.xml"
PROJECTS_PROPERTIES="${{ github.workspace }}/${{ env.CONFIG_DIR }}/project.properties"
DIFFTOOL_JAR="diff-java-tool-${{ env.DIFF_TOOL_VERSION }}.jar"
echo "Contents of checkstyle-tester directory:"
ls -la
# Log variables
echo "PR_BRANCH: $PR_BRANCH"
echo "REPO: $REPO"
echo "CONFIG_XML: $CONFIG_XML"
echo "PROJECTS_PROPERTIES: $PROJECTS_PROPERTIES"
echo "DIFFTOOL_JAR: $DIFFTOOL_JAR"
# Ensure the localGitRepo exists
if [ ! -d "$REPO/.git" ]; then
echo "Cloning checkstyle repository into $REPO"
git clone https://github.com/checkstyle/checkstyle.git "$REPO" || { echo "Failed to clone repository"; exit 1; }
fi
echo "Running DiffTool.jar in 'diff' mode"
java -jar "$DIFFTOOL_JAR" \
--localGitRepo "$REPO" \
--baseBranch master \
--config "$CONFIG_XML" \
--patchBranch temp-patch-branch \
--listOfProjects "$PROJECTS_PROPERTIES" \
--allowExcludes || { echo "DiffTool execution failed"; exit 1; }
# 13. Delete Temporary Patch Branch in Checkstyle Repository
- name: Delete Temporary Patch Branch
run: |
cd "${{ github.workspace }}/checkstyle"
git checkout master # Switch back to 'master' branch in checkstyle repository
git branch -D temp-patch-branch
# 12. Execute DiffTool.jar with invalid arguments to print help
- name: Execute DiffTool.jar with Invalid Arguments
run: |
cd "${{ github.workspace }}/checkstyle-tester"
DIFFTOOL_JAR="diff-java-tool-${{ env.DIFF_TOOL_VERSION }}.jar"
# Execute with invalid arguments to test error handling
echo "Running DiffTool.jar with invalid arguments"
java -jar "$DIFFTOOL_JAR" --invalidArg || echo "Handled invalid arguments gracefully"
# 13. Verify no exceptions occurred during DiffTool execution
- name: Verify DiffTool Execution
run: |
echo "DiffTool executed successfully."
# 14. Upload build reports and logs on failure
- name: Upload Build Reports on Failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: build-reports
path: |
diff-java-tool/build/reports
diff-java-tool/build/test-results
checkstyle-tester/patch-diff-report-tool-${{ env.PATCH_DIFF_TOOL_VERSION }}-jar-with-dependencies.jar
# 15. Cleanup (optional)
- name: Cleanup Temporary Files
if: always()
run: |
rm -rf checkstyle-tester