Skip to main content

Find drift between your pre-commit hooks and your GitHub Actions steps.

Project description

ciparity

Your pre-commit hooks and your CI are supposed to run the same checks. Over time they stop. Someone bumps ruff in .pre-commit-config.yaml and not in the workflow, someone adds mypy --strict to CI only, someone adds a hook that CI never runs. Then the branch is green locally and red on push, or worse, green everywhere while a check quietly stopped running.

ciparity reads .pre-commit-config.yaml and .github/workflows/*.yml and prints where they disagree. Static parsing only: no network, no Docker, no API keys, and it never runs your tools.

pip install ciparity
ciparity .
pre-commit hooks: 5   CI steps: 4

ruff    version differs: pinned to different versions
            pre-commit: 0.5.0
            ci:         0.6.2
mypy    arguments differ: different arguments
            pre-commit: -
            ci:         --strict
pytest  not in pre-commit: runs in CI but is not a pre-commit hook
            ci:         ci.yml:test
python  python differs: pre-commit pins a python version CI never sets up
            pre-commit: 3.11
            ci:         3.12

4 difference(s).

Exit code is 1 when there are differences, so it works as a check.

What it looks for

Check Example
Tool in one side only vulture is a hook, no workflow runs it
Version drift hook rev: v0.5.0 against pip install ruff==0.6.2
Argument drift --strict passed in CI but not in the hook
Python version default_language_version: python3.11 while CI sets up only 3.12

Versions are read from hook rev:, from pip install tool==x, uv tool install, pipx install, npm i -g tool@x, and from the version: input of known actions such as astral-sh/ruff-action. Commands are found inside run: blocks, including behind uv run, uvx, poetry run, npx and python -m.

Usage

ciparity [path] [--json] [--ignore pytest,codespell] [--exit-zero]

As a pre-commit hook:

repos:
  - repo: https://github.com/Topicspot/ciparity
    rev: v0.1.0
    hooks:
      - id: ciparity

Deliberate non-goals and limits

  • Only GitHub Actions in this version. GitLab CI and others are not parsed.
  • Only tools it recognises are compared. File hygiene hooks like trailing-whitespace are ignored on purpose, nobody runs those in CI and reporting them would be noise.
  • If a workflow runs pre-commit run --all-files, the two sides are parity by definition and "missing in CI" findings are suppressed.
  • Composite actions and reusable workflows are not followed, so tools that only run inside them are invisible.
  • Flags such as --fix or --all-files are treated as mode flags and never reported.

Alternatives

  • pre-commit.ci runs your hooks as a service, which removes the drift instead of reporting it. If you can use it, use it.
  • act runs workflows locally, so you can see what CI does. It answers a different question and is much heavier.
  • zizmor and actionlint lint the workflow files themselves. They do not know your pre-commit config.

License

MIT

☕ Support the author

This project is free and MIT-licensed. If it saved you time, you can send a coffee.

USDT, Tron network (TRC-20) only:

TS9ywGeSyKQxiCszdKCHLR8DRAsnYCosNN
Другие языки / Other languages
  • Українська: проєкт безкоштовний. Якщо він заощадив вам час — можна підтримати автора, USDT у мережі Tron (TRC-20), адреса вище.
  • Русский: проект бесплатный. Если он сэкономил вам время, можно поддержать автора, USDT в сети Tron (TRC-20), адрес выше.

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

ciparity-0.1.0.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

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

ciparity-0.1.0-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file ciparity-0.1.0.tar.gz.

File metadata

  • Download URL: ciparity-0.1.0.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for ciparity-0.1.0.tar.gz
Algorithm Hash digest
SHA256 62c8155504dff5a62397a5ab1e8fea1acb62307b44aba96a0d22c0dcb77c642c
MD5 869600733b9fabdeea7b7f3ef608d873
BLAKE2b-256 f9958c3e3f5bb0243758167ac386ef6a97d3a3caf3c4edf167d8380178eca5c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciparity-0.1.0.tar.gz:

Publisher: release.yml on Topicspot/ciparity

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

File details

Details for the file ciparity-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ciparity-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 13.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for ciparity-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 98d3113abca547bfa89b59c3fcb3117c3491b38ca6144962c853e110637a1355
MD5 f09dc36dbc1925b962413f29e8a26cb9
BLAKE2b-256 a47bc7132bb580587d9447382abd0ab3a9a1c559955239363ab8ed48fbebdea7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciparity-0.1.0-py3-none-any.whl:

Publisher: release.yml on Topicspot/ciparity

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