Problem
Even with a local coverage gate, CI needs to report coverage results in a way that is visible on pull requests and trackable over time. The repo currently has no coverage upload step and no human-readable summary in the GitHub Actions job output. Coverage tooling (pytest-cov, coverage config, dev/CI dependencies) must be properly wired in pyproject.toml.
Acceptance Criteria
Implementation Notes
If the team prefers artifact-based reporting over Codecov, use actions/upload-artifact@v4 to upload coverage.xml and htmlcov/. Add a coverage report step after pytest that prints a summary table to the job log. Ensure the --cov-report flags in the pytest command produce both terminal output (for the job log) and XML (for upload). The [tool.coverage.report] section should set fail_under = 90 as a secondary gate (belt and suspenders with --cov-fail-under).
References
- Related files:
.github/workflows/ci.yml (or equivalent), pyproject.toml
- Depends on: Tests and coverage gate item (above)
Problem
Even with a local coverage gate, CI needs to report coverage results in a way that is visible on pull requests and trackable over time. The repo currently has no coverage upload step and no human-readable summary in the GitHub Actions job output. Coverage tooling (
pytest-cov,coverageconfig, dev/CI dependencies) must be properly wired inpyproject.toml.Acceptance Criteria
codecov/codecov-action) or as a GitHub Actions artifact (actions/upload-artifactwith the.coverage/coverage.xmlfile)--cov-report=term-missingin the pytest step or via a dedicatedcoverage reportstep)pyproject.tomldeclarespytest-covandcoverage[toml]in the dev dependency group[tool.coverage.run]and[tool.coverage.report]sections are present inpyproject.tomlwith correctsource,omit, andshow_missing = trueCODECOV_TOKENsecret is documented in the README as a required repository secret--cov-report=xml:coverage.xml) is generated for upload compatibilityImplementation Notes
If the team prefers artifact-based reporting over Codecov, use
actions/upload-artifact@v4to uploadcoverage.xmlandhtmlcov/. Add acoverage reportstep after pytest that prints a summary table to the job log. Ensure the--cov-reportflags in the pytest command produce both terminal output (for the job log) and XML (for upload). The[tool.coverage.report]section should setfail_under = 90as a secondary gate (belt and suspenders with--cov-fail-under).References
.github/workflows/ci.yml(or equivalent),pyproject.toml