5
0
Fork 0
mirror of https://github.com/pre-commit/action.git synced 2025-11-09 11:36:55 +00:00
pre-commit-action/README.md

92 lines
2.5 KiB
Markdown

[![Build Status](https://github.com/pre-commit/action/workflows/deploy/badge.svg)](https://github.com/pre-commit/action/actions)
pre-commit/action
=================
a GitHub action to run [pre-commit](https://pre-commit.com)
### using this action
To use this action, make a file `.github/workflows/pre-commit.yml`. Here's a
template to get started:
```yaml
name: pre-commit
on:
pull_request:
push:
branches: [master]
jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- name: set PY
run: echo "::set-env name=PY::$(python -c 'import hashlib, sys;print(hashlib.sha256(sys.version.encode()+sys.executable.encode()).hexdigest())')"
- uses: actions/cache@v1
with:
path: ~/.cache/pre-commit
key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
- uses: pre-commit/action@v1.0.1
```
This does a few things:
- clones the code
- installs python
- sets up the `pre-commit` cache
Hopefully in the future when `actions` matures the yaml can be simplified.
### using this action in private repositories
this action also provides an additional behaviour when used in private
repositories. when configured with a github token, the action will push back
fixes to the pull request branch.
here's an example configuration for that (use the template above except for the
`pre-commit` action):
```yaml
- uses: pre-commit/action@v1.0.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
```
note that `secrets.GITHUB_TOKEN` is automatically provisioned and will not
require any special configuration.
while you could _technically_ configure this for a public repository (using a
personal access token), I can't think of a way to do this safely without
exposing a privileged token to pull requests -- if you have any ideas, please
leave an issue!
### run precommit against changed files
to use the `changed` parameter, you must make sure your checkout contains enough depth
to compare against.
here's an example which runs during pull requests and executes precommit against the files changed
from the target branch:
```yaml
name: precommit
on: [pull_request]
jobs:
precommit:
runs-on: ubuntu-latest
steps:
- name: checkout code
uses: actions/checkout@v2
- run: |
git fetch --no-tags --prune --unshallow
- uses: actions/setup-python@v2
- uses: pre-commit/action@v1.0.1
with:
changed: true
base: ${{ github.event.pull_request.head.sha }}
```