Diagnostiquer et corriger une configuration pre-commit cassée
Reprendre le projet du module 3
Ce module part directement de la configuration finale et fonctionnelle du module 3, sur mon-script-python — celle qui se terminait entièrement en vert. Aucun autre pré-requis.
Le défaut introduit
Une faute de frappe très réaliste : dans .pre-commit-config.yaml, remplacez check-yaml par check-yml (une lettre manquante) :
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: check-yml
- id: detect-private-key
- repo: https://github.com/psf/black
rev: 24.10.0
hooks:
- id: black
- repo: https://github.com/pycqa/flake8
rev: 7.1.1
hooks:
- id: flake8
C'est le genre d'erreur qui arrive en tapant vite, ou en copiant-collant un id depuis une mauvaise source.
L'erreur exacte
pre-commit run --all-files
Sortie réelle, obtenue avec pre-commit 4.6.2 sur cette configuration précise :
[ERROR] `check-yml` is not present in repository https://github.com/pre-commit/pre-commit-hooks. Typo? Perhaps it is introduced in a newer version? Often `pre-commit autoupdate` fixes this.
Code de sortie : 1. Remarquez qu'aucun hook ne s'exécute — même pas detect-private-key, black ou flake8, qui étaient pourtant correctement configurés. pre-commit valide la présence de tous les hook-ids déclarés avant de lancer quoi que ce soit : une seule faute de frappe bloque toute la passe.
Diagnostiquer
Le message est explicite et pose lui-même la bonne question : « Typo? ». La démarche à suivre, dans l'ordre :
- Repérer quel repo et quel id sont en cause — le message les nomme explicitement (
check-yml,https://github.com/pre-commit/pre-commit-hooks). - Comparer l'id écrit dans votre
.pre-commit-config.yamlà la liste réelle des hooks exposés par ce repo — visible dans son fichier.pre-commit-hooks.yamlà la racine du dépôt GitHub, où chaque hook disponible est déclaré avec sonidexact. - Corriger l'id dans votre fichier local pour qu'il corresponde exactement.
Ne devinez jamais un id « probable » : check-yml, check_yaml, yaml-check sont tous des variantes plausibles mais fausses. Le seul id valide pour ce hook, dans ce repo, est check-yaml.
Corriger
- id: check-yaml
Relancez :
pre-commit run --all-files
Sortie attendue — exactement celle du module 3 :
check yaml...............................................................Passed
detect private key.......................................................Passed
black....................................................................Passed
flake8...................................................................Passed
Deux autres erreurs que vous croiserez tôt ou tard
Pas d'exercice à faire dessus, mais ces deux transcripts sont réels — capturés dans les mêmes conditions que ci-dessus — pour que vous les reconnaissiez le jour où vous les verrez.
Un champ hooks manquant sur un repo :
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
An error has occurred: InvalidConfigError:
==> File .pre-commit-config.yaml
==> At Config()
==> At key: repos
==> At Repository(repo='https://github.com/pre-commit/pre-commit-hooks')
=====> Missing required key: hooks
Message très structuré : il indique littéralement le chemin dans le fichier (repos → ce repo précis) et le champ manquant. La correction consiste simplement à ajouter le champ hooks avec au moins un id.
Un rev pointant vers une branche plutôt qu'un tag (vu en détail au module 3) : ce n'est pas une erreur bloquante mais un avertissement — les hooks s'exécutent quand même sur cette passe, ce qui rend ce défaut plus insidieux qu'une erreur franche, puisque rien n'empêche de continuer à travailler avec une configuration non reproductible.
Ce que vous venez de faire
Vous avez provoqué, lu et corrigé une vraie erreur pre-commit — pas une erreur hypothétique, celle que l'outil produit réellement sur cette configuration précise — en suivant la démarche générale : identifier le repo et l'id en cause, vérifier l'id réel exposé par le repo de hooks, corriger, puis reconfirmer avec pre-commit run --all-files. Au module suivant, vous ne repartez pas de cette configuration volontairement cassée, mais de la configuration fonctionnelle du module 3 — pour la brancher directement dans le cycle de vie d'un Dev Container.
Vérifiez votre compréhension
Vous avez écrit `id: check-yml` au lieu de `id: check-yaml` dans .pre-commit-config.yaml. Que produit `pre-commit run --all-files` ?
Que signifie l'erreur `Missing required key: hooks` sur un repo de .pre-commit-config.yaml ?
Quelle est la première chose à vérifier quand pre-commit signale qu'un hook-id « n'est pas présent dans ce repository » ?
Envie d'être prévenu des prochains modules ?
L'Académie reste gratuite et en accès libre, sans inscription. Si vous voulez juste être averti par email à la sortie d'un nouveau module, c'est ici — aucune obligation, désinscription en un clic.