- Reduce SKILL.md from 288 to 118 lines - Add trigger phrases: generate tests, analyze coverage, TDD workflow, etc. - Add Table of Contents - Remove marketing language - Move Python tools to scripts/ directory (8 files) - Move sample files to assets/ directory - Create references/ with TDD best practices, framework guide, CI integration - Use imperative voice consistently Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
3.9 KiB
3.9 KiB
CI/CD Integration Guide
Integrating test coverage and quality gates into CI pipelines.
Table of Contents
Coverage in CI
Coverage Report Flow
- Run tests with coverage enabled
- Generate report in machine-readable format (LCOV, JSON, XML)
- Parse report for threshold validation
- Upload to coverage service (Codecov, Coveralls)
- Fail build if below threshold
Report Formats by Tool
| Tool | Command | Output Format |
|---|---|---|
| Jest | jest --coverage --coverageReporters=lcov |
LCOV |
| Pytest | pytest --cov-report=xml |
Cobertura XML |
| JUnit/JaCoCo | mvn jacoco:report |
JaCoCo XML |
| Vitest | vitest --coverage |
LCOV/JSON |
GitHub Actions Examples
Node.js (Jest)
name: Test and Coverage
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm test -- --coverage
- name: Check coverage threshold
run: |
COVERAGE=$(cat coverage/coverage-summary.json | jq '.total.lines.pct')
if (( $(echo "$COVERAGE < 80" | bc -l) )); then
echo "Coverage $COVERAGE% is below 80% threshold"
exit 1
fi
- uses: codecov/codecov-action@v4
with:
file: coverage/lcov.info
Python (Pytest)
name: Test and Coverage
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install pytest pytest-cov
- run: pytest --cov=src --cov-report=xml --cov-fail-under=80
- uses: codecov/codecov-action@v4
with:
file: coverage.xml
Java (Maven + JaCoCo)
name: Test and Coverage
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- run: mvn test jacoco:check
- uses: codecov/codecov-action@v4
with:
file: target/site/jacoco/jacoco.xml
Quality Gates
Threshold Configuration
Jest (package.json):
{
"jest": {
"coverageThreshold": {
"global": {
"branches": 80,
"functions": 80,
"lines": 80,
"statements": 80
}
}
}
}
Pytest (pyproject.toml):
[tool.coverage.report]
fail_under = 80
JaCoCo (pom.xml):
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
</rule>
PR Coverage Checks
- Block merge if coverage drops
- Show coverage diff in PR comments
- Require coverage for changed files
- Allow exceptions with justification
Trend Tracking
Metrics to Track
| Metric | Purpose | Alert Threshold |
|---|---|---|
| Overall line coverage | Baseline health | < 80% |
| Branch coverage | Logic completeness | < 70% |
| Coverage delta | Regression detection | < -2% per PR |
| Test execution time | Performance | > 5 min |
| Flaky test count | Reliability | > 0 |
Coverage Services
| Service | Features | Integration |
|---|---|---|
| Codecov | PR comments, badges, graphs | GitHub, GitLab, Bitbucket |
| Coveralls | History, trends, badges | GitHub, GitLab |
| SonarCloud | Full code quality suite | Multiple CI platforms |
Badge Generation
<!-- README.md -->
[](https://codecov.io/gh/org/repo)