Blinder son code avec Husky
L'outil Husky permet d'améliorer la qualité du code en ajoutant des hooks Git tels que pre-commit et pre-push.
Introduction à Husky pour les Hooks de Pre-Commit et Pre-Push
L'outil Husky permet d'améliorer la qualité du code en ajoutant des hooks Git tels que pre-commit et pre-push. Ces hooks automatisent l'exécution de scripts à des étapes spécifiques du cycle de vie Git, comme vérifier la qualité du code ou lancer des tests avant de committer ou pusher les modifications.
Dans cet article, nous allons expliquer comment configurer et utiliser Husky pour mettre en place des hooks de pre-commit et pre-push, avec des exemples concrets de code.
Installation de Husky
Tout d'abord, installez Husky comme une dépendance de développement dans votre projet en utilisant npm ou yarn.
Ensuite, il suffit de lancer
Mise en place des hooks
pre-commit
Vous constaterez qu'un dossier .husky a été ajouté à votre projet et à l'interieur un fichier pre-commit. Ouvrez ce fichier.
Il contient pour le moment seulement "npm". A vous de l'éditer pour y mettre n'importe quelle commande que vous souhaitez voire exécutée avant un commit.
De mon côté je mets juste un
ET VOILÀ !
Plus qu'à tester en faisant
La commande lint devrait se lancer automatiquement avant de commit.
pre-push
Si vous souhaitez executer des commandes avant de push, il vous suffit de créer un fichier pre-push et d'y mettre ce que vous souhaitez.
Chez moi j'ai
La deuxième partie du script empêche de pusher trop rapidement sur main (la prod) ou staging (en fonction de votre cas). Vous devrez pusher en utilisant --no-verify
Voici le contenu de mon package.json où sont renseignés mes scripts
type-check
- tsc : Commande pour exécuter le compilateur TypeScript.
- --project tsconfig.json : Spécifie le fichier de configuration TypeScript (tsconfig.json) à utiliser.
- --pretty : Rend le retour d'erreur plus lisible avec des couleurs.
- --noEmit : Empêche le compilateur TypeScript de générer des fichiers JavaScript, vérifiant uniquement les types sans produire de sortie.
lint
- --ext .ts,.tsx,.js,.jsx : Spécifie les extensions de fichiers à inclure dans la vérification.
- --fix : Tente de corriger automatiquement les erreurs de linting.
- . : Spécifie le répertoire actuel comme scope, ce qui signifie que ESLint va vérifier toutes les extensions spécifiées dans le répertoire de projet courant.
test
- jest : Commande pour exécuter Jest, un framework de test pour JavaScript.
- --passWithNoTests : Permet au processus de test de passer même s'il n'y a pas de tests détectés.
Pourquoi relancer yarn lint au push si on le lance déjà au commit ?
Imaginez la chose suivante :
Vous pouvez choisir de ne pas lancer les hooks husky en utilisant l'option --no-verify à la suite de git commit. Cela peut arriver si vous êtes sur une feature branch et que vous souhaitez vite tester un résultat en déploiement ou juste sauvegarder rapidement votre travail en fin de journée. Le linter ne sera donc pas passé sur tous les commits. Ce risque est encore plus grand si vous êtes plusieurs à travailler sur même branche.
Cela ne prend que 2 ou 3 sec à lancer et au moins vous êtes tranquilles.
Vous avez plein d'autres possibilités de hooks comme vous pouvez le voir dans le contenu du dossier .husky/_

A vous de paramétrer husky en fonction de vos besoins.
Conclusion
En utilisant Husky, vous pouvez facilement automatiser l'exécution de scripts pour garantir la qualité de votre code avant les commandes git les plus courantes. Que ce soit pour exécuter des linters, lancer des tests ou tout autre script personnalisé, Husky offre une solution flexible et efficace pour gérer vos hooks Git. Adopter cette pratique contribue à maintenir un codebase propre et sans erreurs, augmentant ainsi la productivité de toute l'équipe de développement.