fix: exclude main packages and infrastructure from coverage calculation
Packages like cmd/api, cmd/seed, internal/logger, and internal/metrics are entrypoints and infrastructure code that don't benefit from unit tests. These were being counted as 0% coverage in CI (which has the full Go toolchain including covdata) but excluded locally (due to 'no such tool covdata' error), causing a ~2.5% coverage discrepancy. Standard Go practice is to exclude such packages from coverage calculations. This fix filters them from the coverage profile before computing the total.
This commit is contained in:
@@ -10,6 +10,15 @@ MIN_COVERAGE="${CHARON_MIN_COVERAGE:-${CPM_MIN_COVERAGE:-85}}"
|
||||
|
||||
cd "$BACKEND_DIR"
|
||||
|
||||
# Packages to exclude from coverage (main packages and infrastructure code)
|
||||
# These are entrypoints and initialization code that don't benefit from unit tests
|
||||
EXCLUDE_PACKAGES=(
|
||||
"github.com/Wikid82/charon/backend/cmd/api"
|
||||
"github.com/Wikid82/charon/backend/cmd/seed"
|
||||
"github.com/Wikid82/charon/backend/internal/logger"
|
||||
"github.com/Wikid82/charon/backend/internal/metrics"
|
||||
)
|
||||
|
||||
# Try to run tests to produce coverage file; some toolchains may return a non-zero
|
||||
# exit if certain coverage tooling is unavailable (e.g. covdata) while still
|
||||
# producing a usable coverage file. Don't fail immediately — allow the script
|
||||
@@ -19,6 +28,16 @@ if ! go test -race -v -mod=readonly -coverprofile="$COVERAGE_FILE" ./...; then
|
||||
echo "Warning: go test returned non-zero; checking coverage file presence"
|
||||
fi
|
||||
|
||||
# Filter out excluded packages from coverage file
|
||||
if [ -f "$COVERAGE_FILE" ]; then
|
||||
FILTERED_COVERAGE="${COVERAGE_FILE}.filtered"
|
||||
cp "$COVERAGE_FILE" "$FILTERED_COVERAGE"
|
||||
for pkg in "${EXCLUDE_PACKAGES[@]}"; do
|
||||
sed -i "\|^${pkg}|d" "$FILTERED_COVERAGE"
|
||||
done
|
||||
mv "$FILTERED_COVERAGE" "$COVERAGE_FILE"
|
||||
fi
|
||||
|
||||
if [ ! -f "$COVERAGE_FILE" ]; then
|
||||
echo "Error: coverage file not generated by go test"
|
||||
exit 1
|
||||
|
||||
Reference in New Issue
Block a user