#!/bin/bash # Check test coverage against minimum threshold. set -euo pipefail 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 total coverage percentage from go tool cover output. COVERAGE=$(go tool cover -func "$COVERAGE_FILE" | awk '/^total:/ { match($0, /[0-9.]+%/); print substr($0, RSTART, RLENGTH-1) }') if [ -z "$COVERAGE" ]; then echo "Error: failed to parse coverage from $COVERAGE_FILE" exit 1 fi echo "Total coverage: ${COVERAGE}%" # Compare as integer part to keep shell arithmetic simple and portable. 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"