name: Run Tests on: [push, pull_request] concurrency: group: build-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: build: strategy: fail-fast: false matrix: version: [8.3.0-jdk17] runs-on: ubuntu-22.04 container: image: gradle:${{ matrix.version }} options: --user root steps: - uses: actions/checkout@v3 - uses: gradle/wrapper-validation-action@v1 - run: gradle build check -x test --stacktrace --warning-mode fail - uses: Juuxel/publish-checkstyle-report@v1 if: ${{ failure() }} with: reports: | build/reports/checkstyle/*.xml # This job is used to feed the test matrix of next job to allow the tests to run in parallel prepare_test_matrix: # Lets wait to ensure it builds before going running tests needs: build runs-on: ubuntu-22.04 container: image: gradle:8.3.0-jdk17 options: --user root steps: - uses: actions/checkout@v3 - run: gradle writeActionsTestMatrix --stacktrace --warning-mode fail - id: set-matrix run: echo "matrix=$(cat build/test_matrix.json)" >> $GITHUB_OUTPUT outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} run_tests: needs: prepare_test_matrix strategy: fail-fast: false matrix: version: [8.3.0-jdk17] test: ${{ fromJson(needs.prepare_test_matrix.outputs.matrix) }} runs-on: ubuntu-22.04 container: image: gradle:${{ matrix.version }} options: --user root steps: - uses: actions/checkout@v3 - run: gradle printActionsTestName --name="${{ matrix.test }}" test --tests ${{ matrix.test }} --stacktrace --warning-mode fail env: TEST_WARNING_MODE: fail id: test - name: Publish test results for report uses: actions/upload-artifact@v3 if: ${{ failure() || success() }} with: name: Raw Test Results path: build/test-results/**/*.xml retention-days: 1 - uses: actions/upload-artifact@v3 if: ${{ failure() }} with: name: ${{ steps.test.outputs.test }} Results path: build/reports/ - uses: actions/upload-artifact@v3 if: ${{ failure() }} with: name: ${{ steps.test.outputs.test }} Heap Dump path: "*.hprof" run_tests_windows: needs: prepare_test_matrix strategy: fail-fast: false matrix: java: [17] test: ${{ fromJson(needs.prepare_test_matrix.outputs.matrix) }} runs-on: windows-2022 steps: - uses: actions/checkout@v3 - name: setup jdk ${{ matrix.java }} uses: actions/setup-java@v3 with: java-version: ${{ matrix.java }} distribution: 'temurin' - run: ./gradlew printActionsTestName --name="${{ matrix.test }}" test --tests ${{ matrix.test }} --stacktrace --warning-mode fail env: TEST_WARNING_MODE: fail id: test - name: Publish test results for report uses: actions/upload-artifact@v3 if: ${{ failure() || success() }} with: name: Raw Test Results path: build/test-results/**/*.xml retention-days: 1 - uses: actions/upload-artifact@v3 if: ${{ failure() }} with: name: ${{ steps.test.outputs.test }} (${{ matrix.java }}) Results (Windows) path: build/reports/ - uses: actions/upload-artifact@v3 if: ${{ failure() }} with: name: ${{ steps.test.outputs.test }} Heap Dump (Windows) path: "*.hprof" # Special case this test to run across all os's reproducible_build_test: needs: build strategy: fail-fast: false matrix: java: [ 17, 20 ] os: [ windows-2022, ubuntu-22.04, macos-12 ] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: java-version: ${{ matrix.java }} distribution: 'temurin' - run: ./gradlew test --tests *ReproducibleBuildTest --stacktrace --warning-mode fail - name: Publish test results for report uses: actions/upload-artifact@v3 if: ${{ failure() || success() }} with: name: Raw Test Results path: build/test-results/**/*.xml retention-days: 1 - uses: actions/upload-artifact@v3 if: ${{ failure() }} with: name: Reproducible Build ${{ matrix.os }} (${{ matrix.java }}) Results path: build/reports/ test_report: runs-on: ubuntu-latest needs: [run_tests, run_tests_windows, reproducible_build_test] if: ${{ failure() || success() }} steps: - name: Download artifacts uses: actions/download-artifact@v3 with: path: artifacts - name: Publish test report uses: EnricoMi/publish-unit-test-result-action@v2 with: junit_files: "artifacts/**/*.xml"