Skip to content

ci: switch from pre-commit to prek - #52

Open
nstarman wants to merge 9 commits into
mainfrom
switch-to-prek
Open

nstarman wants to merge 9 commits into
mainfrom
switch-to-prek

Conversation

@nstarman

Copy link
Copy Markdown
Contributor

Summary

  • Switches from pre-commit to prek, a drop-in, Rust-based reimplementation that reads the same .pre-commit-config.yaml — no hook changes needed
  • Swaps the pre-commit dependency for prek wherever it's declared (nox lint group / dev group) and updates the nox precommit session (or CI action) to invoke prek instead
  • Regenerates uv.lock to match

This mirrors the same swap already merged in unxt#929, coordinax#881, jaxmore#26, quaxed#213, and quax-blocks#64.

Note: this repo's .pre-commit-config.yaml still has pre-commit.ci's ci: autoupdate block. Disabling the pre-commit.ci GitHub App integration itself is a setting on pre-commit.ci / the repo's installed-apps page, not something a code change can do — worth doing once this merges, to avoid running checks twice.

Test plan

  • uv lock resolves cleanly with prek replacing pre-commit
  • Verified prek run --all-files (and no-commit-to-branch specifically) locally against this org's existing .pre-commit-config.yaml format

🤖 Generated with Claude Code

nstarman and others added 9 commits September 15, 2026 17:56
prek is a drop-in, Rust-based reimplementation of pre-commit that reads
the same .pre-commit-config.yaml. Swaps the pre-commit dependency and
invocations (nox session / CI action) for prek.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
no-commit-to-branch would otherwise fail every push to main: CI checks
out a real local branch literally named `main` for push events, so the
hook would always fire. It's a client-side guard for a human running
`git commit`/`git push` locally (or via installed git hooks) -- not
something a full "run every hook" CI invocation should re-evaluate
after the fact. Skips it there via SKIP=no-commit-to-branch; the hook
itself is untouched and still fully active locally.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…anch

Appends no-commit-to-branch to any SKIP a developer already has set
(e.g. via their shell) rather than overwriting it wholesale, matching
the same fix applied in response to Copilot review feedback on
GalacticDynamics/coordinax#885.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Addresses Copilot review feedback on GalacticDynamics/galax#847: the
comment said "CI checks out the real main branch," but the skip
applies unconditionally, including local `nox -s lint` runs -- which
is correct (a CI-only skip would leave the same false failure for any
local dev running the full suite while on `main`). Fixes the wording
to match the actual, intended behavior instead of narrowing it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Addresses Copilot review feedback on GalacticDynamics/dataclassish#94:
the docstring "Run prek." on a session still named `precommit` could
read as though the session itself was renamed. Spells out that it
runs the pre-commit hooks, now via prek.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Addresses Copilot review feedback on GalacticDynamics/galax#847: this
comment still said no-commit-to-branch guards `git push`, but the
earlier stages: [pre-commit] fix means it no longer runs on push at
all. Clarifies that explicitly instead of leaving stale wording.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… trigger

Addresses Copilot review feedback on GalacticDynamics/galax#847: "it
never fires on push" reads as a claim about this workflow's own
`on: push:` trigger (which is false -- that's why the SKIP exists at
all), when it actually means the git pre-push hook stage. Spells that
out explicitly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Switching pre-commit -> prek removed pre-commit's own `pyyaml>=5.1`
requirement, which had been implicitly keeping --resolution lowest's
global pyyaml pick high enough to build. With it gone, the only
remaining constraint is commitizen's (via cz-conventional-gitmoji)
unbounded pyyaml, so --resolution lowest dropped to pyyaml 3.10 -- a
2013 sdist that fails to compile against modern CPython's C API,
breaking "Check Oldest Dependencies". Restores the same pyyaml>=5.1
floor pre-commit used to provide.

Also drops the nodeenv>=1.9.1 constraint added for the same reason on
pre-commit's behalf: nodeenv was pre-commit's own dependency and has
no other consumer, so it's no longer part of the graph at all now that
prek (a standalone binary) replaced it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The archaeology (why pre-commit's nodeenv/pyyaml floors mattered, why
--skip clobbers, the full CI-checkout explanation) belongs in commit
history, not permanently inline. Keeps just enough to orient a future
reader without re-litigating the whole investigation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant