coverage.sh
1 #!/bin/bash 2 3 # Test Coverage Script for Gramr 4 # Generates HTML, LCOV, and JSON coverage reports 5 6 set -e 7 8 echo "๐งช Running test coverage analysis..." 9 10 # Check if cargo-tarpaulin is installed 11 if ! command -v cargo-tarpaulin &> /dev/null; then 12 echo "๐ฆ Installing cargo-tarpaulin..." 13 cargo install cargo-tarpaulin 14 fi 15 16 # Clean previous coverage data 17 echo "๐งน Cleaning previous coverage data..." 18 rm -rf coverage/ 19 mkdir -p coverage/ 20 21 # Run coverage analysis 22 echo "๐ Analyzing test coverage..." 23 cargo tarpaulin --config tarpaulin.toml --workspace --lib 24 25 # Check if coverage meets minimum threshold 26 COVERAGE_FILE="coverage/tarpaulin-report.json" 27 if [[ -f "$COVERAGE_FILE" ]]; then 28 # Extract coverage percentage (requires jq) 29 if command -v jq &> /dev/null; then 30 COVERAGE=$(jq -r '.coverage' "$COVERAGE_FILE" 2>/dev/null || echo "unknown") 31 echo "๐ Total coverage: ${COVERAGE}%" 32 33 # Check threshold 34 THRESHOLD=80 35 if [[ "$COVERAGE" != "unknown" && $(echo "$COVERAGE >= $THRESHOLD" | bc -l) -eq 1 ]]; then 36 echo "โ Coverage meets minimum threshold of ${THRESHOLD}%" 37 elif [[ "$COVERAGE" != "unknown" ]]; then 38 echo "โ Coverage below minimum threshold of ${THRESHOLD}%" 39 exit 1 40 fi 41 else 42 echo "๐ Coverage report generated (install jq for percentage analysis)" 43 fi 44 fi 45 46 echo "๐ Coverage reports generated in coverage/ directory:" 47 echo " - coverage/tarpaulin-report.html (HTML report)" 48 echo " - coverage/lcov.info (LCOV format for CI/CD)" 49 echo " - coverage/tarpaulin-report.json (JSON format)" 50 51 echo "๐ Coverage analysis complete!" 52 53 # Open HTML report on macOS 54 if [[ "$OSTYPE" == "darwin"* ]] && [[ -f "coverage/tarpaulin-report.html" ]]; then 55 echo "๐ Opening HTML report..." 56 open coverage/tarpaulin-report.html 57 fi