Skip to content

Commit ece6e09

Browse files
committed
ci(coverage): harden diff-cover step and handle non-Java PRs
- Drop the unreachable PR_XMLS empty-check; collect-xml already exits 1 when jacoco reports are missing, and the previous `exit 0` would have left changed_line_coverage unset and triggered a misleading "Failed to parse changed-line coverage" in the enforcement step. - Parse total_num_lines from diff-cover.json: when a PR has no changed Java source lines (workflow-only, docs-only, proto-only), emit the sentinel NA and treat it as SKIPPED in the enforcement step so the gate does not wrongly fail. - Display NA without a trailing %% in the step summary and logs. Addresses review comments from CodeRabbit and cubic on PR #23.
1 parent cbfc520 commit ece6e09

1 file changed

Lines changed: 29 additions & 19 deletions

File tree

.github/workflows/pr-build.yml

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -296,11 +296,6 @@ jobs:
296296
git fetch --no-tags origin "+refs/heads/${BASE_REF}:refs/remotes/origin/${BASE_REF}"
297297
298298
PR_XMLS=$(find coverage/pr -name "jacocoTestReport.xml" | sort)
299-
if [ -z "$PR_XMLS" ]; then
300-
echo "No PR jacoco XML reports found, skipping diff-cover."
301-
exit 0
302-
fi
303-
304299
SRC_ROOTS=$(find . -type d -path '*/src/main/java' \
305300
-not -path './coverage/*' -not -path './.git/*' | sort)
306301
@@ -314,12 +309,18 @@ jobs:
314309
DIFF_RC=$?
315310
set -e
316311
317-
CHANGED_LINE_COVERAGE=$(jq -r '.total_percent_covered // empty' diff-cover.json)
318-
if [ -z "$CHANGED_LINE_COVERAGE" ]; then
319-
echo "Unable to parse changed-line coverage from diff-cover.json."
320-
exit 1
312+
TOTAL_NUM_LINES=$(jq -r '.total_num_lines // 0' diff-cover.json)
313+
if [ "${TOTAL_NUM_LINES}" = "0" ]; then
314+
echo "No changed Java source lines; skipping changed-line gate."
315+
echo "changed_line_coverage=NA" >> "$GITHUB_OUTPUT"
316+
else
317+
CHANGED_LINE_COVERAGE=$(jq -r '.total_percent_covered // empty' diff-cover.json)
318+
if [ -z "$CHANGED_LINE_COVERAGE" ]; then
319+
echo "Unable to parse changed-line coverage from diff-cover.json."
320+
exit 1
321+
fi
322+
echo "changed_line_coverage=${CHANGED_LINE_COVERAGE}" >> "$GITHUB_OUTPUT"
321323
fi
322-
echo "changed_line_coverage=${CHANGED_LINE_COVERAGE}" >> "$GITHUB_OUTPUT"
323324
324325
{
325326
echo "### Changed-line Coverage (diff-cover)"
@@ -396,16 +397,19 @@ jobs:
396397
DELTA=$(awk -v pr="$PR_OVERALL" -v base="$BASE_OVERALL" 'BEGIN { printf "%.4f", pr - base }')
397398
DELTA_OK=$(compare_float "${DELTA} >= ${MAX_DROP}")
398399
399-
if [ -z "$CHANGED_LINE" ] || [ "$CHANGED_LINE" = "NaN" ] || ! is_number "$CHANGED_LINE"; then
400+
if [ "$CHANGED_LINE" = "NA" ]; then
401+
CHANGED_LINE_OK=1
402+
CHANGED_LINE_STATUS="SKIPPED (no changed Java source lines)"
403+
elif [ -z "$CHANGED_LINE" ] || [ "$CHANGED_LINE" = "NaN" ] || ! is_number "$CHANGED_LINE"; then
400404
echo "Failed to parse changed-line coverage: changed-line='${CHANGED_LINE}'."
401405
exit 1
402-
fi
403-
404-
CHANGED_LINE_OK=$(compare_float "${CHANGED_LINE} > ${MIN_CHANGED}")
405-
if [ "$CHANGED_LINE_OK" -eq 1 ]; then
406-
CHANGED_LINE_STATUS="PASS (> ${MIN_CHANGED}%)"
407406
else
408-
CHANGED_LINE_STATUS="FAIL (<= ${MIN_CHANGED}%)"
407+
CHANGED_LINE_OK=$(compare_float "${CHANGED_LINE} > ${MIN_CHANGED}")
408+
if [ "$CHANGED_LINE_OK" -eq 1 ]; then
409+
CHANGED_LINE_STATUS="PASS (> ${MIN_CHANGED}%)"
410+
else
411+
CHANGED_LINE_STATUS="FAIL (<= ${MIN_CHANGED}%)"
412+
fi
409413
fi
410414
411415
# 3) Output base metrics (always visible in logs + step summary)
@@ -414,8 +418,14 @@ jobs:
414418
OVERALL_STATUS="FAIL (< ${MAX_DROP}%)"
415419
fi
416420
421+
if [ "$CHANGED_LINE" = "NA" ]; then
422+
CHANGED_LINE_DISPLAY="NA"
423+
else
424+
CHANGED_LINE_DISPLAY="${CHANGED_LINE}%"
425+
fi
426+
417427
METRICS_TEXT=$(cat <<EOF
418-
Changed-line Coverage: ${CHANGED_LINE}%
428+
Changed-line Coverage: ${CHANGED_LINE_DISPLAY}
419429
PR Overall Coverage: ${PR_OVERALL}%
420430
Base Overall Coverage: ${BASE_OVERALL}%
421431
Delta (PR - Base): ${DELTA}%
@@ -429,7 +439,7 @@ jobs:
429439
{
430440
echo "### Coverage Gate Metrics"
431441
echo ""
432-
echo "- Changed-line Coverage: ${CHANGED_LINE}%"
442+
echo "- Changed-line Coverage: ${CHANGED_LINE_DISPLAY}"
433443
echo "- PR Overall Coverage: ${PR_OVERALL}%"
434444
echo "- Base Overall Coverage: ${BASE_OVERALL}%"
435445
echo "- Delta (PR - Base): ${DELTA}%"

0 commit comments

Comments
 (0)