feat: Add comprehensive integration test coverage #20
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: Java SDK - Coverage Check | |
| on: | |
| pull_request: | |
| branches: | |
| - development | |
| - staging | |
| - master | |
| jobs: | |
| coverage: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: π§Ύ Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: β Set up JDK 8 (Temurin) | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: 8 | |
| cache: maven | |
| - name: π§© Ensure tests are enabled in pom.xml | |
| run: | | |
| echo "π§ Ensuring tests are enabled in pom.xml..." | |
| sed -i 's/<skipTests>true<\/skipTests>/<skipTests>false<\/skipTests>/g' pom.xml || true | |
| - name: π§ͺ Run tests and generate JaCoCo report | |
| run: mvn clean test -Dtest='Test*' jacoco:report -Dgpg.skip=true | |
| - name: π Extract coverage from JaCoCo HTML report | |
| id: extract_coverage | |
| run: | | |
| echo "π Extracting coverage summary from JaCoCo HTML report..." | |
| REPORT="target/site/jacoco/index.html" | |
| if [ ! -f "$REPORT" ]; then | |
| echo "β JaCoCo HTML report not found!" | |
| exit 1 | |
| fi | |
| # Extract the <tfoot> Total row and clean it up | |
| TOTAL_ROW=$(grep -A2 "<td>Total</td>" "$REPORT" | tr -d '\n') | |
| # Extract numeric percentages in order (Instruction first, Branch second) | |
| PERCENTAGES=($(echo "$TOTAL_ROW" | grep -oE '[0-9]+%' | sed 's/%//g')) | |
| INSTRUCTION=${PERCENTAGES[0]:-0} | |
| BRANCH=${PERCENTAGES[1]:-0} | |
| echo "π Instruction Coverage: ${INSTRUCTION}%" | |
| echo "πΏ Branch Coverage: ${BRANCH}%" | |
| echo "instruction=${INSTRUCTION}" >> $GITHUB_OUTPUT | |
| echo "branch=${BRANCH}" >> $GITHUB_OUTPUT | |
| - name: π¦ Enforce coverage threshold | |
| run: | | |
| MIN_INSTRUCTION=90 | |
| MIN_BRANCH=80 | |
| INSTRUCTION=${{ steps.extract_coverage.outputs.instruction }} | |
| BRANCH=${{ steps.extract_coverage.outputs.branch }} | |
| echo "π§Ύ Required minimums:" | |
| echo " β’ Instruction: ${MIN_INSTRUCTION}%" | |
| echo " β’ Branch: ${MIN_BRANCH}%" | |
| echo "" | |
| echo "π Actual coverage:" | |
| echo " β’ Instruction: ${INSTRUCTION}%" | |
| echo " β’ Branch: ${BRANCH}%" | |
| if [ "$INSTRUCTION" -lt "$MIN_INSTRUCTION" ]; then | |
| echo "β Instruction coverage (${INSTRUCTION}%) is below the threshold (${MIN_INSTRUCTION}%)" | |
| exit 1 | |
| fi | |
| if [ "$BRANCH" -lt "$MIN_BRANCH" ]; then | |
| echo "β Branch coverage (${BRANCH}%) is below the threshold (${MIN_BRANCH}%)" | |
| exit 1 | |
| fi | |
| echo "β Coverage thresholds met!" | |
| - name: π¬ Post coverage summary as PR comment | |
| uses: marocchino/sticky-pull-request-comment@v2 | |
| with: | |
| header: π§ͺ JaCoCo Coverage Report | |
| message: | | |
| **Coverage Summary** | |
| - π Instruction Coverage: `${{ steps.extract_coverage.outputs.instruction }}%` | |
| - πΏ Branch Coverage: `${{ steps.extract_coverage.outputs.branch }}%` | |
| - name: π¦ Upload JaCoCo HTML report as artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: jacoco-report | |
| path: target/site/jacoco/ | |
| if-no-files-found: warn |