diff --git a/.drone.yml b/.drone.yml index 589eb3b..40faf19 100644 --- a/.drone.yml +++ b/.drone.yml @@ -10,6 +10,7 @@ steps: - go vet ./... - mkdir -p .build - go test -v -coverprofile .build/coverage.out ./... - - go tool cover -func .build/coverage.out | tee .build/coverage.txt | awk '/^total:/ { gsub("%", "", $3); if ($3 + 0 < 80) { printf("Coverage %.1f%% is below 80%%\n", $3); exit 1 } }' + - go tool cover -func .build/coverage.out | tee .build/coverage.txt + - bash scripts/check-coverage.sh .build/coverage.out 80 - go install golang.org/x/vuln/cmd/govulncheck@latest - govulncheck -json ./... > vulncheck.json \ No newline at end of file diff --git a/scripts/check-coverage.sh b/scripts/check-coverage.sh new file mode 100755 index 0000000..be38fc7 --- /dev/null +++ b/scripts/check-coverage.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Check test coverage against minimum threshold + +set -e + +COVERAGE_FILE="${1:-.build/coverage.out}" +MIN_COVERAGE="${2:-80}" + +if [ ! -f "$COVERAGE_FILE" ]; then + echo "Error: Coverage file not found: $COVERAGE_FILE" + exit 1 +fi + +# Extract coverage percentage using awk +COVERAGE=$(go tool cover -func "$COVERAGE_FILE" | awk '/^total:/ { match($0, /[0-9.]+%/); print substr($0, RSTART, RLENGTH-1) }') + +echo "Total coverage: ${COVERAGE}%" + +# Compare as integers (remove decimals for simpler comparison) +COVERAGE_INT=${COVERAGE%.*} + +if [ "$COVERAGE_INT" -lt "$MIN_COVERAGE" ]; then + echo "Coverage ${COVERAGE}% is below minimum ${MIN_COVERAGE}%" + exit 1 +fi + +echo "Coverage check passed" +exit 0