Sometimes when you are working on something and get interrupted, it's easy to forget to fix a small thing before committing and pushing. Pre-commit enables you to have automatic checks before you commit the code. It can be frustrating when the CI fails because of a missing new line or another formatting error.
Pre-commit isn't a replacement for the CI pipelines, so it shouldn't run long-running tasks, for example tests. Anthony Sottile, a pre-commit and pytest maintainer, argues in an issue to add pytest why pytest hasn't have its own hook:
The main reasons:
- Tests are often slow, committing should be fast
- It would have to be a system / script hook since you'd need repository specific dependencies installed (as you've noticed)
To set it up look at pre-commit homepages.
This is my
.pre-commit-config.yaml that I use for Python:
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: - id: check-toml - id: check-yaml - id: end-of-file-fixer - id: no-commit-to-branch - id: trailing-whitespace - repo: https://github.com/psf/black rev: 23.7.0 hooks: - id: black language_version: python3.10 - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. rev: v0.0.280 hooks: - id: ruff - repo: https://github.com/pryorda/dockerfilelint-precommit-hooks rev: v0.1.0 hooks: - id: dockerfilelint stages: [commit] - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.35.0 hooks: - id: markdownlint