Skip to main content

A pre-commit hook that enforces a coverage quality gate using coverage.xml and a baseline file

Project description

pytest-coverage-gate

A pre-commit hook that enforces a coverage quality gate for Python projects.

It reads the line-rate from coverage.xml (generated by pytest-cov) and compares it against a baseline stored in .coverage-baseline. If coverage regresses the commit is blocked. When coverage improves, the baseline is updated automatically.

How it works

Situation Exit code Message
coverage.xml or .coverage-baseline missing 1 [coverage-gate] ERROR: …
Current coverage < baseline 1 [coverage-gate] FAIL: …
Current coverage == baseline 0 [coverage-gate] OK: …
Current coverage > baseline 0 [coverage-gate] SUCC: … — baseline file updated

Installation via PyPI

PyPI version

pip install pytest-coverage-gate

Requirements

  • Python ≥ 3.9
  • A coverage.xml file produced by pytest --cov --cov-report=xml
  • A .coverage-baseline file containing a single floating-point number (e.g. 85.00)

Setup

1. Generate coverage.xml

Add a step to your test run (locally or in CI) that produces coverage.xml:

pytest --cov=<your_package> --cov-report=xml

2. Create .coverage-baseline

Set your initial baseline (you can use the current coverage percentage):

echo "0.00" > .coverage-baseline
git add .coverage-baseline

Tip: commit .coverage-baseline to version control so the gate is enforced for every contributor.

3. Add the hook to .pre-commit-config.yaml

repos:
  - repo: https://github.com/kelsoncm/pytest-coverage-gate
    rev: v1.0.1   # use the latest tag
    hooks:
      - id: pytest-coverage-gate

If coverage.xml or .coverage-baseline are not in the repository root (e.g. they live under src/), pass custom paths via args:

repos:
  - repo: https://github.com/kelsoncm/pytest-coverage-gate
    rev: v1.0.1
    hooks:
      - id: pytest-coverage-gate
        args:
          - --coverage-xml=src/coverage.xml
          - --baseline=src/.coverage-baseline

4. Run pre-commit

pre-commit run pytest-coverage-gate --all-files

Or it runs automatically on every git commit once pre-commit is installed:

pre-commit install

Standalone usage

The script can also be run directly without pre-commit:

pip install pytest-coverage-gate
pytest-coverage-gate

Use --coverage-xml and --baseline to point to files in non-default locations:

pytest-coverage-gate --coverage-xml src/coverage.xml --baseline src/.coverage-baseline

Example output

[coverage-gate] SUCC: cobertura evoluiu de atual 82.00% para 85.50%
[coverage-gate] FAIL: cobertura regrediu de atual 85.50% para 79.00%

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest_coverage_gate-1.0.3.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_coverage_gate-1.0.3-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file pytest_coverage_gate-1.0.3.tar.gz.

File metadata

  • Download URL: pytest_coverage_gate-1.0.3.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pytest_coverage_gate-1.0.3.tar.gz
Algorithm Hash digest
SHA256 4a0f3dfae95d2d50a7f6bfd5b806f1f42fe392fe57c96041fee850658d6b00a6
MD5 a278d4340bb9c6f446653d9e9586e8a5
BLAKE2b-256 a44779a35bfc134a73c776fe2f6cc278fa9464a2eb403ac48f9e09e477529356

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_coverage_gate-1.0.3.tar.gz:

Publisher: publish.yml on kelsoncm/pytest-coverage-gate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytest_coverage_gate-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_coverage_gate-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 71769f661980541efd52cd498a95711ff94cee15667efe46451a749a1c36698a
MD5 965134e5dfeafd400cc608ec748e4b4a
BLAKE2b-256 30106e618b3f3032b381282c02642023f48fd3a7b5fa0cb68bfde902af1294f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_coverage_gate-1.0.3-py3-none-any.whl:

Publisher: publish.yml on kelsoncm/pytest-coverage-gate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page