Picarones / .github /workflows /precommit.yml
Claude
ci(workflows): align paths with post-rewrite layout + lock against drift
4309925 unverified
# .github/workflows/precommit.yml — rejoue les hooks pre-commit en CI
#
# Sprint A1 (item m-7 de l'audit institutional-readiness-2026-05).
#
# Pourquoi : .pre-commit-config.yaml définit 12 hooks (ruff, trailing
# whitespace, YAML/JSON/TOML check, merge conflict marker, detect-private-key,
# check-added-large-files). Sans ce workflow, un développeur peut bypass
# les hooks via ``git commit --no-verify`` et la CI ne le détecte pas.
#
# Ce job rejoue *exactement* les hooks ``.pre-commit-config.yaml`` sur
# l'intégralité du diff de la PR. Si un hook échoue, la PR est bloquée.
#
# Le job ``lint`` de ci.yml reste en place pour valider ruff sur tout
# l'arbre (couverture inter-fichiers que pre-commit ne fait pas par défaut).
name: Pre-commit hooks
on:
push:
branches: [main, develop, "feature/**", "claude/**"]
pull_request:
branches: [main, develop]
workflow_dispatch:
permissions:
contents: read
jobs:
precommit:
name: Replay pre-commit hooks
runs-on: ubuntu-latest
steps:
- name: Checkout
# fetch-depth: 0 nécessaire pour que pre-commit puisse comparer
# la PR à sa base et ne lance les hooks que sur les fichiers
# modifiés (rapide et conforme à l'usage local).
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip
- name: Install pre-commit
run: |
python -m pip install --upgrade pip
pip install pre-commit
- name: Cache pre-commit hooks
uses: actions/cache@v4
with:
path: ~/.cache/pre-commit
key: precommit-${{ runner.os }}-${{ hashFiles('.pre-commit-config.yaml') }}
# Sur push : on rejoue les hooks sur tous les fichiers (mode --all-files)
# car on n'a pas de "base" naturelle. Sur PR : --from-ref / --to-ref
# pour ne lancer que sur le diff (rapide).
- name: Run pre-commit on PR diff
if: github.event_name == 'pull_request'
run: |
pre-commit run \
--from-ref ${{ github.event.pull_request.base.sha }} \
--to-ref ${{ github.event.pull_request.head.sha }} \
--show-diff-on-failure
- name: Run pre-commit on push (all files)
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
run: |
pre-commit run --all-files --show-diff-on-failure