/ scripts / coverage.sh
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