prek runs local hooks as plain execs against tools uv already provisions, so ruff/mypy can never drift from the versions/config uv.lock pins elsewhere and CI needs no separate hook-cache download. - Add ruff and prek to the uv dev dependency group (ruff wasn't a uv-managed dependency before; pre-commit silently vendored its own). - Replace .pre-commit-config.yaml with prek.toml: keep the pre-commit-hooks repo for generic file checks, convert ruff-format/ ruff-check to local `uv run ruff ...` hooks, and add a local mypy hook that reports but never fails (87 pre-existing errors need a separate cleanup before it can be made blocking). - Add a `lint` job to CI that runs `prek run --all-files` and gate the OS/Python test matrix on it so lint issues fail fast. - Fix the ruff debt (format + lint) uncovered by actually running it, since it was small and mechanical, so the new CI gate starts green.
67 lines
1.7 KiB
TOML
67 lines
1.7 KiB
TOML
# prek pre-commit configuration — https://prek.j178.dev
|
|
#
|
|
# The local/system hooks below invoke the project's OWN pinned tools (ruff/mypy
|
|
# from uv.lock) and mirror .github/workflows/build.yml's lint job exactly, so
|
|
# they can never drift from CI's versions or rules. prek installs nothing of
|
|
# its own for them — "system" language just execs whatever `uv run` resolves.
|
|
#
|
|
# The pre-commit/pre-commit-hooks repo hooks below are generic file checks with
|
|
# no project-local tool equivalent, so they're kept as a normal (non-local) repo.
|
|
#
|
|
# Run all checks manually: `uv run prek run --all-files`
|
|
# Install the git hooks: `uv run prek install`
|
|
|
|
default_install_hook_types = ["pre-commit", "pre-push"]
|
|
default_stages = ["pre-commit"]
|
|
|
|
[[repos]]
|
|
repo = "https://github.com/pre-commit/pre-commit-hooks"
|
|
rev = "v4.4.0"
|
|
|
|
[[repos.hooks]]
|
|
id = "check-case-conflict"
|
|
|
|
[[repos.hooks]]
|
|
id = "check-merge-conflict"
|
|
|
|
[[repos.hooks]]
|
|
id = "check-toml"
|
|
|
|
[[repos.hooks]]
|
|
id = "check-yaml"
|
|
|
|
[[repos.hooks]]
|
|
id = "debug-statements"
|
|
|
|
[[repos]]
|
|
repo = "local"
|
|
|
|
[[repos.hooks]]
|
|
id = "ruff-format"
|
|
name = "ruff format (check)"
|
|
language = "system"
|
|
entry = "uv run ruff format --check ."
|
|
types = ["python"]
|
|
pass_filenames = false
|
|
require_serial = true
|
|
|
|
[[repos.hooks]]
|
|
id = "ruff-check"
|
|
name = "ruff check"
|
|
language = "system"
|
|
entry = "uv run ruff check ."
|
|
types = ["python"]
|
|
pass_filenames = false
|
|
require_serial = true
|
|
|
|
[[repos.hooks]]
|
|
id = "mypy"
|
|
name = "mypy (advisory — reports errors, does not fail)"
|
|
language = "system"
|
|
# Errors are pre-existing debt (87 across 22 files as of 2026-07); reports but
|
|
# never fails the hook until that debt is fixed and this can be made blocking.
|
|
entry = "bash -c 'uv run mypy src/ocrmypdf; exit 0'"
|
|
types = ["python"]
|
|
pass_filenames = false
|
|
require_serial = true
|