Skip to content

Commit a286bfb

Browse files
committed
Update JaCoCo Maven plugin to 0.8.14 and enhance coverage report generation in CI workflow
1 parent 894d290 commit a286bfb

File tree

3 files changed

+87
-1
lines changed

3 files changed

+87
-1
lines changed

.github/actions/test-report/action.yml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ inputs:
55
description: "Path to the test report XML files (glob pattern)"
66
required: false
77
default: "target/surefire-reports/TEST-*.xml"
8+
jacoco-path:
9+
description: "Path to the JaCoCo XML report"
10+
required: false
11+
default: "target/site/jacoco/jacoco.xml"
812
check-name:
913
description: "Name for the check run"
1014
required: false
@@ -82,3 +86,73 @@ runs:
8286
else
8387
echo "⚠️ No test reports found at ${{ inputs.report-path }}" >> $GITHUB_STEP_SUMMARY
8488
fi
89+
90+
- name: Generate Coverage Summary
91+
shell: bash
92+
run: |
93+
JACOCO_XML="${{ inputs.jacoco-path }}"
94+
95+
if [ -f "$JACOCO_XML" ]; then
96+
echo "" >> $GITHUB_STEP_SUMMARY
97+
echo "## 📊 Code Coverage" >> $GITHUB_STEP_SUMMARY
98+
echo "" >> $GITHUB_STEP_SUMMARY
99+
100+
# JaCoCo XML may be on a single line - split it for parsing
101+
# Extract report-level counters (last occurrence of each type before </report>)
102+
extract_counter() {
103+
local type=$1
104+
local field=$2
105+
# Split XML on > to get one tag per line, find counter, extract value
106+
sed 's/>/>\n/g' "$JACOCO_XML" | grep "<counter type=\"$type\"" | tail -1 | sed "s/.*$field=\"\([0-9]*\)\".*/\1/"
107+
}
108+
109+
INSTR_MISSED=$(extract_counter "INSTRUCTION" "missed")
110+
INSTR_COVERED=$(extract_counter "INSTRUCTION" "covered")
111+
112+
BRANCH_MISSED=$(extract_counter "BRANCH" "missed")
113+
BRANCH_COVERED=$(extract_counter "BRANCH" "covered")
114+
115+
LINE_MISSED=$(extract_counter "LINE" "missed")
116+
LINE_COVERED=$(extract_counter "LINE" "covered")
117+
118+
METHOD_MISSED=$(extract_counter "METHOD" "missed")
119+
METHOD_COVERED=$(extract_counter "METHOD" "covered")
120+
121+
CLASS_MISSED=$(extract_counter "CLASS" "missed")
122+
CLASS_COVERED=$(extract_counter "CLASS" "covered")
123+
124+
# Calculate percentages
125+
calc_pct() {
126+
local covered=$1
127+
local missed=$2
128+
if [ -n "$covered" ] && [ -n "$missed" ]; then
129+
local total=$((covered + missed))
130+
if [ "$total" -gt 0 ]; then
131+
echo "scale=1; $covered * 100 / $total" | bc
132+
else
133+
echo "0"
134+
fi
135+
else
136+
echo "N/A"
137+
fi
138+
}
139+
140+
INSTR_PCT=$(calc_pct "${INSTR_COVERED:-0}" "${INSTR_MISSED:-0}")
141+
BRANCH_PCT=$(calc_pct "${BRANCH_COVERED:-0}" "${BRANCH_MISSED:-0}")
142+
LINE_PCT=$(calc_pct "${LINE_COVERED:-0}" "${LINE_MISSED:-0}")
143+
METHOD_PCT=$(calc_pct "${METHOD_COVERED:-0}" "${METHOD_MISSED:-0}")
144+
CLASS_PCT=$(calc_pct "${CLASS_COVERED:-0}" "${CLASS_MISSED:-0}")
145+
146+
echo "| Metric | Covered | Missed | Coverage |" >> $GITHUB_STEP_SUMMARY
147+
echo "|--------|---------|--------|----------|" >> $GITHUB_STEP_SUMMARY
148+
echo "| 📝 Instructions | ${INSTR_COVERED:-0} | ${INSTR_MISSED:-0} | ${INSTR_PCT}% |" >> $GITHUB_STEP_SUMMARY
149+
echo "| 🌿 Branches | ${BRANCH_COVERED:-0} | ${BRANCH_MISSED:-0} | ${BRANCH_PCT}% |" >> $GITHUB_STEP_SUMMARY
150+
echo "| 📏 Lines | ${LINE_COVERED:-0} | ${LINE_MISSED:-0} | ${LINE_PCT}% |" >> $GITHUB_STEP_SUMMARY
151+
echo "| 🔧 Methods | ${METHOD_COVERED:-0} | ${METHOD_MISSED:-0} | ${METHOD_PCT}% |" >> $GITHUB_STEP_SUMMARY
152+
echo "| 📦 Classes | ${CLASS_COVERED:-0} | ${CLASS_MISSED:-0} | ${CLASS_PCT}% |" >> $GITHUB_STEP_SUMMARY
153+
else
154+
echo "" >> $GITHUB_STEP_SUMMARY
155+
echo "## 📊 Code Coverage" >> $GITHUB_STEP_SUMMARY
156+
echo "" >> $GITHUB_STEP_SUMMARY
157+
echo "⚠️ No JaCoCo report found at $JACOCO_XML" >> $GITHUB_STEP_SUMMARY
158+
fi

.github/workflows/build-test.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,11 @@ jobs:
8282
name: test-reports
8383
path: target/surefire-reports/
8484
retention-days: 14
85+
86+
- name: Upload Coverage Report
87+
uses: actions/upload-artifact@v4
88+
if: always()
89+
with:
90+
name: coverage-report
91+
path: target/site/jacoco/
92+
retention-days: 14

pom.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,11 @@
413413
<plugin>
414414
<groupId>org.jacoco</groupId>
415415
<artifactId>jacoco-maven-plugin</artifactId>
416-
<version>0.8.12</version>
416+
<version>0.8.14</version>
417+
<configuration>
418+
<!-- Must match destFile from build plugin's prepare-agent execution -->
419+
<dataFile>${project.build.directory}/jacoco-test-results/sdk-tests.exec</dataFile>
420+
</configuration>
417421
<reportSets>
418422
<reportSet>
419423
<reports>

0 commit comments

Comments
 (0)