feat: wire up JaCoCo coverage reporting and enforcement #40
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build | |
| on: | |
| pull_request: | |
| permissions: | |
| contents: read | |
| actions: write # required for actions/upload-artifact | |
| concurrency: | |
| group: build-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| # ── 1. Format check (fast, ~30s, no Docker needed) ────────────────────────── | |
| style: | |
| name: Code Style | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| - name: Set up Java | |
| uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 | |
| with: | |
| java-version: 21 | |
| distribution: 'zulu' | |
| - name: Cache Gradle | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 | |
| with: | |
| path: ~/.gradle/caches | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}-${{ hashFiles('**/gradle.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| - name: Cache Gradle wrapper | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 | |
| with: | |
| path: ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradlew-${{ hashFiles('**/gradlew') }} | |
| restore-keys: ${{ runner.os }}-gradlew- | |
| - name: Spotless check | |
| run: ./gradlew spotlessCheck -S | |
| # ── 2. Compile (fast, ~1–2 min, no tests, no Docker) ──────────────────────── | |
| compile: | |
| name: Compile | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| - name: Set up Java | |
| uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 | |
| with: | |
| java-version: 21 | |
| distribution: 'zulu' | |
| - name: Cache Gradle | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 | |
| with: | |
| path: ~/.gradle/caches | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}-${{ hashFiles('**/gradle.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| - name: Cache Gradle wrapper | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 | |
| with: | |
| path: ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradlew-${{ hashFiles('**/gradlew') }} | |
| restore-keys: ${{ runner.os }}-gradlew- | |
| - name: Compile (no tests) | |
| run: ./gradlew assemble -S | |
| # ── 3. Unit tests (requires Docker for testcontainers/Redis) ──────────────── | |
| test: | |
| name: Test | |
| runs-on: ubuntu-latest | |
| needs: compile | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| - name: Set up Java | |
| uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 | |
| with: | |
| java-version: 21 | |
| distribution: 'zulu' | |
| - name: Cache Gradle | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 | |
| with: | |
| path: ~/.gradle/caches | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}-${{ hashFiles('**/gradle.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| - name: Cache Gradle wrapper | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 | |
| with: | |
| path: ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradlew-${{ hashFiles('**/gradlew') }} | |
| restore-keys: ${{ runner.os }}-gradlew- | |
| - name: Run tests | |
| run: ./gradlew :core:test :demos:langchain4j-vcr:test :demos:spring-ai-vcr:test -S | |
| - name: Verify coverage and generate reports | |
| run: ./gradlew :core:jacocoTestCoverageVerification :core:jacocoTestReport :demos:langchain4j-vcr:jacocoTestCoverageVerification :demos:langchain4j-vcr:jacocoTestReport :demos:spring-ai-vcr:jacocoTestCoverageVerification :demos:spring-ai-vcr:jacocoTestReport -S | |
| - name: Upload coverage reports | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: coverage-reports | |
| path: | | |
| core/build/reports/jacoco/test/ | |
| demos/langchain4j-vcr/build/reports/jacoco/test/ | |
| demos/spring-ai-vcr/build/reports/jacoco/test/ | |
| - name: Upload test reports | |
| if: failure() | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: test-reports | |
| path: | | |
| core/build/reports/tests/test/ | |
| demos/langchain4j-vcr/build/reports/tests/test/ | |
| demos/spring-ai-vcr/build/reports/tests/test/ | |
| # ── 4. Static analysis (runs in parallel with tests after compile) ─────────── | |
| spotbugs: | |
| name: SpotBugs | |
| runs-on: ubuntu-latest | |
| needs: compile | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| - name: Set up Java | |
| uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 | |
| with: | |
| java-version: 21 | |
| distribution: 'zulu' | |
| - name: Cache Gradle | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 | |
| with: | |
| path: ~/.gradle/caches | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}-${{ hashFiles('**/gradle.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| - name: Cache Gradle wrapper | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 | |
| with: | |
| path: ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradlew-${{ hashFiles('**/gradlew') }} | |
| restore-keys: ${{ runner.os }}-gradlew- | |
| - name: SpotBugs | |
| run: ./gradlew :core:spotbugsMain -S |