Aller au contenu

Git Hooks

AIDF inclut des git hooks qui valident automatiquement votre workflow au moment du commit et du push.

HookObjectif
pre-commitValide les fichiers staged par rapport aux portées des tâches actives (chemins interdits)
commit-msgValide le format de message de commit conventionnel
pre-pushExécute les commandes de validation configurées (lint, typecheck, tests)
Fenêtre de terminal
# Install hooks (auto-detects husky if present)
aidf hooks install
# Remove hooks
aidf hooks uninstall

Si votre projet n’utilise pas husky ou pre-commit, AIDF installe les hooks directement dans .git/hooks/ :

Fenêtre de terminal
aidf hooks install

Cela crée des scripts exécutables dans .git/hooks/pre-commit, .git/hooks/commit-msg et .git/hooks/pre-push.

Utilisez --force pour écraser les hooks existants :

Fenêtre de terminal
aidf hooks install --force

AIDF détecte automatiquement husky en vérifiant :

  • Un répertoire .husky/
  • husky dans les dépendances de package.json
  • Un script prepare contenant husky

Lorsque husky est détecté, les hooks sont installés dans .husky/ au lieu de .git/hooks/.

Vous pouvez également forcer le mode husky :

Fenêtre de terminal
aidf hooks install --husky

Si votre projet n’a pas encore husky :

Fenêtre de terminal
npm install --save-dev husky
npx husky init
aidf hooks install --husky

Une configuration courante combine husky, lint-staged et les hooks AIDF :

package.json
{
"scripts": {
"prepare": "husky"
},
"lint-staged": {
"*.{ts,tsx}": ["eslint --fix", "prettier --write"],
"*.{json,md}": ["prettier --write"]
}
}

.husky/pre-commit :

Fenêtre de terminal
npx lint-staged
# AIDF - scope and format validation
npx aidf-hook-pre-commit

Lorsque AIDF détecte des hooks existants, il ajoute sa validation à la suite plutôt que de remplacer le fichier.

Pour les projets utilisant le framework pre-commit :

Fenêtre de terminal
aidf hooks install --pre-commit

Cela génère un .pre-commit-config.yaml (ou s’ajoute à un fichier existant) :

repos:
- repo: local
hooks:
- id: aidf-scope-check
name: AIDF Scope Validation
entry: npx aidf-hook-pre-commit
language: system
always_run: true
- id: aidf-commit-msg
name: AIDF Commit Message Format
entry: npx aidf-hook-commit-msg
language: system
stages: [commit-msg]

Puis activez avec :

Fenêtre de terminal
pre-commit install

Le hook pre-commit lit tous les fichiers de tâches actives (non terminées) dans .ai/tasks/ et vérifie les fichiers staged par rapport à leurs patterns de chemins interdits.

Le comportement dépend du paramètre scopeEnforcement dans .ai/config.yml :

ModeComportement
strictBloque le commit si un fichier staged correspond à un pattern interdit
askAffiche un avertissement mais autorise le commit
permissiveIgnore complètement la validation

Valide que les messages de commit suivent les Conventional Commits :

type(scope?): description

Types valides : feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert

Exemples :

feat: add user authentication
fix(api): resolve timeout issue
docs: update README
refactor(auth): simplify token validation

Les commits de merge et de revert sont autorisés sans validation.

Le hook avertit également (mais ne bloque pas) si l’en-tête dépasse 72 caractères.

Exécute les commandes de validation depuis .ai/config.yml avant le push :

validation:
lint: npm run lint
typecheck: npm run typecheck
test: npm run test

Si une commande échoue, le push est bloqué.

Fenêtre de terminal
aidf hooks uninstall

Cela supprime uniquement les hooks générés par AIDF. Si AIDF a été ajouté à un hook husky existant, seul le bloc AIDF est supprimé.