|
10 | 10 | jobs: |
11 | 11 | test-and-coverage: |
12 | 12 | runs-on: ubuntu-latest |
| 13 | + permissions: |
| 14 | + contents: read |
| 15 | + pull-requests: write |
13 | 16 |
|
14 | 17 | steps: |
15 | 18 | - name: Checkout Repository |
16 | 19 | uses: actions/checkout@v4 |
17 | 20 |
|
18 | | - - name: Set up JDK 17 |
| 21 | + - name: Set up JDK 9 |
19 | 22 | uses: actions/setup-java@v4 |
20 | 23 | with: |
21 | 24 | distribution: 'temurin' |
22 | | - java-version: '17' |
| 25 | + java-version: '9' |
23 | 26 | cache: maven |
24 | 27 |
|
25 | 28 | - name: Run Tests and Generate JaCoCo Report |
26 | 29 | working-directory: contentstack-java |
27 | 30 | run: mvn clean test -Dtest='Test*' jacoco:report -Dgpg.skip=true |
28 | 31 |
|
29 | | - - name: Verify Coverage Thresholds |
| 32 | + - name: Extract and Check Coverage Thresholds |
| 33 | + id: coverage |
30 | 34 | working-directory: contentstack-java |
31 | 35 | run: | |
32 | 36 | echo "Checking JaCoCo coverage thresholds..." |
33 | | - INSTRUCTION_COVERAGE=$(grep -oPm1 "(?<=<counter type=\"INSTRUCTION\" missed=\")\d+\" covered=\"\d+\"" target/site/jacoco/jacoco.xml | sed 's/" covered="/ /' | awk '{print $2/($1+$2)*100}') |
34 | | - BRANCH_COVERAGE=$(grep -oPm1 "(?<=<counter type=\"BRANCH\" missed=\")\d+\" covered=\"\d+\"" target/site/jacoco/jacoco.xml | sed 's/" covered="/ /' | awk '{print $2/($1+$2)*100}') |
35 | | - echo "Instruction Coverage: $INSTRUCTION_COVERAGE%" |
36 | | - echo "Branch Coverage: $BRANCH_COVERAGE%" |
| 37 | +
|
| 38 | + # Extract coverage values from XML |
| 39 | + INSTRUCTION=$(grep -oPm1 '(?<=<counter type="INSTRUCTION" missed=")[0-9]+" covered="[0-9]+"' target/site/jacoco/jacoco.xml | sed 's/" covered="/ /' | awk '{print $2/($1+$2)*100}') |
| 40 | + BRANCH=$(grep -oPm1 '(?<=<counter type="BRANCH" missed=")[0-9]+" covered="[0-9]+"' target/site/jacoco/jacoco.xml | sed 's/" covered="/ /' | awk '{print $2/($1+$2)*100}') |
| 41 | +
|
| 42 | + echo "Instruction Coverage: $INSTRUCTION%" |
| 43 | + echo "Branch Coverage: $BRANCH%" |
| 44 | +
|
| 45 | + echo "instruction=$INSTRUCTION" >> $GITHUB_OUTPUT |
| 46 | + echo "branch=$BRANCH" >> $GITHUB_OUTPUT |
37 | 47 |
|
38 | 48 | MIN_INSTRUCTION=90 |
39 | 49 | MIN_BRANCH=80 |
40 | 50 |
|
41 | | - if (( ${INSTRUCTION_COVERAGE%.*} < MIN_INSTRUCTION )); then |
| 51 | + if (( ${INSTRUCTION%.*} < MIN_INSTRUCTION )); then |
42 | 52 | echo "❌ Instruction coverage below $MIN_INSTRUCTION%" |
43 | 53 | exit 1 |
44 | 54 | fi |
45 | 55 |
|
46 | | - if (( ${BRANCH_COVERAGE%.*} < MIN_BRANCH )); then |
| 56 | + if (( ${BRANCH%.*} < MIN_BRANCH )); then |
47 | 57 | echo "❌ Branch coverage below $MIN_BRANCH%" |
48 | 58 | exit 1 |
49 | 59 | fi |
50 | 60 |
|
51 | 61 | echo "✅ Coverage thresholds met." |
52 | 62 |
|
53 | | - - name: Upload JaCoCo HTML Report (Artifact) |
| 63 | + - name: Comment Coverage Summary on PR |
| 64 | + uses: marocchino/sticky-pull-request-comment@v2 |
| 65 | + with: |
| 66 | + header: "🧪 JaCoCo Coverage Report" |
| 67 | + message: | |
| 68 | + **Coverage Summary** |
| 69 | + - 📘 Instruction Coverage: `${{ steps.coverage.outputs.instruction }}%` |
| 70 | + - 🌿 Branch Coverage: `${{ steps.coverage.outputs.branch }}%` |
| 71 | +
|
| 72 | + ✅ Minimum thresholds: 90% instruction, 80% branch |
| 73 | +
|
| 74 | + - name: Upload JaCoCo HTML Report |
54 | 75 | uses: actions/upload-artifact@v4 |
55 | 76 | with: |
56 | 77 | name: jacoco-report |
|
0 commit comments