63 lines
1.5 KiB
Markdown
63 lines
1.5 KiB
Markdown
|
|
# Pre-commit Local Setup (uv)
|
||
|
|
|
||
|
|
## What is pre-commit?
|
||
|
|
|
||
|
|
`pre-commit` runs checks before each commit (for example: formatting and file sanity checks).
|
||
|
|
|
||
|
|
This repository uses pre-commit locally only. Bitbucket Pipelines does not run pre-commit.
|
||
|
|
|
||
|
|
## Install and set up locally (with uv)
|
||
|
|
|
||
|
|
1. Install `uv` (if not installed):
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Windows (PowerShell)
|
||
|
|
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
|
||
|
|
|
||
|
|
# macOS/Linux
|
||
|
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||
|
|
```
|
||
|
|
|
||
|
|
2. Install all dependencies (including pre-commit):
|
||
|
|
|
||
|
|
```bash
|
||
|
|
uv sync --group dev
|
||
|
|
```
|
||
|
|
|
||
|
|
3. Install git hooks in this repo:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
uv run pre-commit install
|
||
|
|
```
|
||
|
|
|
||
|
|
## How it works
|
||
|
|
|
||
|
|
When you run `git commit`, pre-commit automatically runs these checks on your staged files:
|
||
|
|
|
||
|
|
| Hook | What it does | Auto-fix? |
|
||
|
|
|---|---|---|
|
||
|
|
| `trailing-whitespace` | Removes spaces at end of lines | Yes |
|
||
|
|
| `end-of-file-fixer` | Ensures files end with a newline | Yes |
|
||
|
|
| `check-yaml` | Validates YAML syntax | Manual fix |
|
||
|
|
| `check-json` | Validates JSON syntax | Manual fix |
|
||
|
|
| `check-merge-conflict` | Detects `<<<<<<<` conflict markers | Manual fix |
|
||
|
|
| `check-added-large-files` | Blocks files larger than 500KB | Manual fix |
|
||
|
|
|
||
|
|
- **Pass** -> commit goes through
|
||
|
|
- **Fail (auto-fix)** -> commit blocked, files fixed, re-stage and commit again
|
||
|
|
- **Fail (manual fix)** -> commit blocked, fix the error, re-stage and commit again
|
||
|
|
|
||
|
|
## Common commands
|
||
|
|
|
||
|
|
Run on all files:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
uv run pre-commit run --all-files
|
||
|
|
```
|
||
|
|
|
||
|
|
Run on staged files (happens automatically on commit):
|
||
|
|
|
||
|
|
```bash
|
||
|
|
uv run pre-commit run
|
||
|
|
```
|