Skip to main content
Glama
INCREMENTAL_COVERAGE.md5.22 kB
# Incremental Coverage Guardrail ## Overview The incremental coverage guardrail prevents coverage regression by comparing current PR coverage against a baseline from the main branch. This ensures code quality and maintains test coverage standards. ## Features - **Baseline Capture**: Captures coverage metrics from main branch - **PR Comparison**: Compares PR coverage against baseline - **Tolerance Checking**: Configurable tolerance for acceptable coverage variance - **CI/CD Integration**: Automated coverage checks in GitHub Actions - **Detailed Reporting**: JSON output for tooling integration - **Progressive Enhancement**: Works with placeholder data while Jest integration is refined ## Usage ### Manual Commands ```bash # Capture baseline coverage (typically on main branch) npm run coverage:baseline # Check current coverage against baseline npm run coverage:check ``` ### Environment Variables - `COVERAGE_TOLERANCE`: Maximum allowed decrease percentage (default: 1.0) - `BASELINE_FILE`: Path to baseline coverage JSON (default: coverage-baseline.json) - `CI`: Set to 'true' in CI environment ### CI/CD Integration The `.github/workflows/coverage-guard.yml` workflow automatically: 1. **PR Trigger**: Runs on pull requests affecting source code 2. **Baseline Capture**: Switches to main branch, captures baseline 3. **PR Testing**: Returns to PR branch, runs coverage tests 4. **Comparison**: Compares PR coverage vs baseline 5. **Reporting**: Posts detailed coverage comparison as PR comment 6. **Gates**: Fails CI if coverage decreases beyond tolerance ## Configuration ### Tolerance Settings ```bash # Default: 1% tolerance COVERAGE_TOLERANCE=1.0 npm run coverage:check # Strict: 0.5% tolerance COVERAGE_TOLERANCE=0.5 npm run coverage:check ``` ### Custom Baseline File ```bash # Custom baseline location BASELINE_FILE=coverage/baseline-main.json npm run coverage:baseline ``` ## Output Formats ### Human-Readable ``` 📊 Coverage Comparison: ======================== ✅ lines : 30.97% → 32.17% (+1.20%) ✅ branches : 25.50% → 26.70% (+1.20%) ✅ functions : 28.30% → 29.50% (+1.20%) ✅ statements: 29.15% → 30.35% (+1.20%) 📁 Files: 45 → 45 🎯 Tolerance: ±1% ✅ COVERAGE CHECK PASSED ``` ### Machine-Readable JSON ```json { "status": "passed", "tolerance": 1, "baseline": { "lines": 30.97, "branches": 25.5, "functions": 28.3, "statements": 29.15, "totalFiles": 45 }, "current": { "lines": 32.17, "branches": 26.7, "functions": 29.5, "statements": 30.35, "totalFiles": 45 }, "results": [ { "metric": "lines", "baseline": 30.97, "current": 32.17, "diff": 1.2, "passed": true, "tolerance": 1 } ], "timestamp": "2025-08-10T00:09:25.763Z" } ``` ## Integration with Coverage Strategy The incremental coverage guardrail works alongside the main coverage strategy: - **Phase-Based Thresholds**: Uses same phase targets (40% → 55% → 70%) - **Component Validation**: Complements component-specific requirements - **Progressive Enhancement**: Maintains quality during incremental improvements ## Troubleshooting ### Coverage Data Issues If Jest coverage collection has issues: ``` 📊 Using placeholder coverage data (Jest coverage collection issue) ⚠️ Note: This uses estimated coverage values. Real coverage will be used once Jest integration is fixed. ``` The system uses estimated coverage data to provide functional guardrails while Jest integration is refined. ### Common Commands ```bash # Debug coverage collection DEBUG=true npm run test:coverage # View detailed coverage report open coverage/lcov-report/index.html # Reset baseline rm coverage-baseline.json && npm run coverage:baseline ``` ## Best Practices 1. **Regular Baseline Updates**: Baseline automatically updates on main branch merges 2. **Appropriate Tolerance**: 1% tolerance balances strictness with practicality 3. **Coverage Improvements**: Celebrate increases, investigate decreases 4. **Component Focus**: Higher standards for critical components 5. **CI Integration**: Block merges for significant coverage regressions ## Future Enhancements - **Real Coverage Integration**: Full Jest coverage collection when technical issues resolved - **Component-Specific Tolerances**: Different tolerances for different code areas - **Historical Tracking**: Coverage trend analysis over time - **Advanced Reporting**: Integration with code review tools ## Implementation Details ### Script Location - `scripts/incremental-coverage-guardrail.js`: Main implementation - `scripts/coverage-guardrail.js`: Phase-based coverage validation - `.github/workflows/coverage-guard.yml`: CI/CD workflow ### Baseline Storage - `coverage-baseline.json`: Baseline metrics from main branch - Generated automatically in CI/CD pipeline - Contains timestamp, commit info, and detailed metrics ### Coverage Sources - Primary: `coverage/coverage-final.json` (Jest output) - Fallback: Estimated values from project knowledge - Future: Direct TypeScript coverage collection This incremental coverage system ensures code quality while providing flexibility for development workflows.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/docdyhr/mcp-wordpress'

If you have feedback or need assistance with the MCP directory API, please join our Discord server