Aller au contenu principal
Nicolas Cousin Tech SolutionsNicolas Cousin Tech Solutions
Module 4 sur 5

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 :

  1. 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).
  2. 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 son id exact.
  3. 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.