A GitHub action to run pre-commit using pre-commit-uv.
To use this action, make a file .github/workflows/pre-commit.yml. Here's a template to get started:
name: pre-commit
on:
pull_request:
push:
branches: [main]
jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: tox-dev/action-pre-commit-uv@v1This does a few things:
- clones the code
- installs uv (if not already available)
- sets up the
pre-commitcache
The action auto-detects the right invocation: if a pyproject.toml exists it uses uv run, otherwise it uses uvx for
isolated tool execution.
By default (uv-install: 'auto'), the action detects whether uv is already available and only installs it if needed.
You can override this with 'true' (always install) or 'false' (never install):
- uses: astral-sh/setup-uv@v7
with:
version: 0.6.0
- uses: tox-dev/action-pre-commit-uv@v1
with:
uv-install: 'false'By default, this action runs all the hooks against all the files. extra_args lets users specify a single hook id
and/or options to pass to pre-commit run.
Here's a sample step configuration that only runs the flake8 hook against all the files (use the template above except
for the pre-commit action):
- uses: tox-dev/action-pre-commit-uv@v1
with:
extra_args: flake8 --all-filesprior to v3.0.0, this action had custom behaviour which pushed changes back to the pull request when supplied with a
token.
this behaviour was removed:
- it required a PAT (didn't work with short-lived
GITHUB_TOKEN) - properly hiding this
inputfrom the installation and execution of hooks is intractable in github actions (it is readily available as$INPUT_TOKEN) - this meant potentially unvetted code could access the token via the environment
you can likely achieve the same thing with an external action such as git-auto-commit-action though you may want to
take precautions to clear git hooks or other ways that arbitrary code execution can occur when running git commit /
git push (for example core.fsmonitor).
while unrelated to this action, pre-commit.ci avoids these problems by installing and executing isolated from the short-lived repository-scoped installation access token.