Modifier les conditions d'échec du push après vérification du lint dans le hook Git pre-push

mardi 11 mars 2025

Contexte du travail

Dans notre projet d'équipe, nous avons mis en place des règles de lint strictes qui impose même le tri des imports. Cela contribue à uniformiser le style de code, ce qui est un avantage, mais après la création des PR, nous rencontrions parfois des erreurs de lint dans le CI.

Bien que cela ne se produise pas fréquemment, lorsque des erreurs de lint survenaient, nous devions exécuter un script local, corriger les erreurs puis pousser à nouveau le code après avoir fait un commit. Ce processus était fastidieux et augmentait finalement le temps de revue de code. J'ai donc proposé aux autres membres de l'équipe d'intégrer une vérification du lint dans le hook pre-push.

Après avoir obtenu leur accord, j'ai utilisé le script lint-fix:global qui existait déjà, et élaboré un hook pre-push comme suit :

echo "🔍 Exécution de la correction du lint..."
pnpm run lint-fix:global

# Vérifiez s'il y a des modifications
if ! git diff --quiet; then
  echo "❌ La correction du lint a modifié certains fichiers. Veuillez les valider avant de pousser."
  exit 1
fi

Cependant, dès le lendemain, j'ai reçu des retours comme suit. Certains d'entre vous peuvent déjà voir le problème immédiat dans ce code.

Que l'on exécute lint-fix:global ou non, si certains fichiers étaient en mode staged, le push échouait. 🤦

Finalement, nous avons constaté qu'il était plus pertinent de vérifier simplement les erreurs de lint plutôt que de les corriger automatiquement. J'ai donc modifié le code comme suit :

echo "🔍 Exécution du lint..."

if ! pnpm run lint -- --quiet; then
  echo "❌ Des erreurs de lint ont été détectées."
  echo "👉 Pour corriger ces erreurs automatiquement : pnpm run lint-fix:global"
  exit 1
fi

Dans le script ci-dessus, lint exécute en fait la commande next lint. Nous avons utilisé l'option --quiet pour n'afficher que les erreurs, et conçu pour qu'en cas d'erreur, le message d'erreur soit affiché et le push soit bloqué. En passant, nous avons aussi modifié le message d'erreur pour le rendre plus convivial pour les autres membres de l'équipe.

L'espoir est maintenant de ne plus gaspiller de temps à cause d'erreurs de lint dans le CI. 🙏