|
| 1 | +#!/usr/bin/env bash |
| 2 | +set -euo pipefail |
| 3 | + |
| 4 | +MIN_COVERAGE="${MIN_COVERAGE:-70}" |
| 5 | +COVERAGE_TOLERANCE_MARGIN="${COVERAGE_TOLERANCE_MARGIN:-5}" |
| 6 | + |
| 7 | +# Combine coverage files if multiple exist |
| 8 | +if compgen -G ".coverage.*" > /dev/null; then |
| 9 | + echo "π Found multiple coverage files, combining..." |
| 10 | + uv run coverage combine |
| 11 | +else |
| 12 | + echo "βΉοΈ No coverage files to combine." |
| 13 | +fi |
| 14 | + |
| 15 | +# Add markdown report to GitHub summary if available |
| 16 | +if [[ -n "${GITHUB_STEP_SUMMARY:-}" ]]; then |
| 17 | + uv run coverage report --format=markdown >> "$GITHUB_STEP_SUMMARY" |
| 18 | +fi |
| 19 | + |
| 20 | +# Extract total coverage percentage (last column) - more robust |
| 21 | +COVERAGE_LINE=$(uv run coverage report | grep TOTAL || true) |
| 22 | +if [[ -z "$COVERAGE_LINE" ]]; then |
| 23 | + echo "β Failed to extract coverage data" |
| 24 | + exit 1 |
| 25 | +fi |
| 26 | + |
| 27 | +COVERAGE=$(echo "$COVERAGE_LINE" | awk '{print $NF}' | tr -d '%' || echo "0") |
| 28 | + |
| 29 | +echo "π Reported coverage: ${COVERAGE}%" |
| 30 | +echo "π’ Minimum required: ${MIN_COVERAGE}%" |
| 31 | +echo "β Tolerance margin: ${COVERAGE_TOLERANCE_MARGIN}%" |
| 32 | + |
| 33 | +if [[ -n "${GITHUB_STEP_SUMMARY:-}" ]]; then |
| 34 | + { |
| 35 | + echo "### π§ͺ Coverage Check" |
| 36 | + echo "- Total coverage: **${COVERAGE}%**" |
| 37 | + echo "- Minimum required: **${MIN_COVERAGE}%**" |
| 38 | + echo "- Allowed margin: **${COVERAGE_TOLERANCE_MARGIN}%**" |
| 39 | + } >> "$GITHUB_STEP_SUMMARY" |
| 40 | +fi |
| 41 | + |
| 42 | +# Check coverage against threshold with margin |
| 43 | +if (( $(echo "$COVERAGE < $MIN_COVERAGE - $COVERAGE_TOLERANCE_MARGIN" | bc -l) )); then |
| 44 | + echo "β Coverage ${COVERAGE}% is below allowed margin. Failing..." |
| 45 | + exit 1 |
| 46 | +elif (( $(echo "$COVERAGE < $MIN_COVERAGE" | bc -l) )); then |
| 47 | + echo "β οΈ Coverage ${COVERAGE}% is below threshold but within margin." |
| 48 | +else |
| 49 | + echo "β
Coverage ${COVERAGE}% meets the threshold." |
| 50 | +fi |
| 51 | + |
| 52 | +# Clean up coverage files after reporting |
| 53 | +rm -f .coverage.* .coverage |
0 commit comments