diff --git a/scripts/go-test-coverage.sh b/scripts/go-test-coverage.sh index 62e3e010..100a1470 100755 --- a/scripts/go-test-coverage.sh +++ b/scripts/go-test-coverage.sh @@ -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