Automatiser la vérification de son code avant un commit

Vous avez mis en place des tests dans votre projet mais vous ne pensez pas toujours à les exécuter avant de commit ? Voici une solution !

Article publié le 31/03/2021, dernière mise à jour le 19/09/2023

Lorsque vous versionnez du code en utilisant Git, vous avez la possibilité d'exécuter des scripts spécifiques lors d'évènements du cycle de vie de votre versioning, c'est ce que l'on appelle des "hooks".

Git propose de nombreux hooks, notamment deux qui vont nous intéresser ici :

  • avant un commit local (pre-commit)
  • avant un push vers un serveur distant (pre-push)

Je vous invite à lire la documentation officielle si vous désirez vous renseigner sur tous les hooks disponibles

Le principe est simple, chaque hook est un script qui sera appelé par Git. Si le script en question retourne un code 0 (tout s'est bien passé) alors Git poursuivra son action en cours, si le script retourne un code 1 (erreur), alors l'évènement sera annulé.

Un hook de pre-commit peut par exemple servir à :

  • Être sûr que tous les tests passent bien
  • Exécuter un linter
  • Vérifier le code coverage
  • ...

Selon votre use case, vous pouvez utiliser un hook de pre-commit ou de pre-push, je recommande personnellement de favoriser le premier mais c'est à vous de voir !

Créer un hook pre-commit à la main

Lorsque vous initialisez votre dépôt Git, ce dernier ajoute des scripts d'exemple pour vous vous montrer la marche à suivre dans le dossier /.git/hooks/*.sample

Pour créer votre premier hook de pre-commit, vous pouvez simplement renommer le fichier pre-commit.sample en pre-commit.

Attention pour les utilisateurs de Linux et MacOS, il faudra penser à ajouter les droits d'exécution au fichier.

Le fichier d'exemple contient un script qui vérifie si les noms des fichiers ne contiennent pas de caractères non-ASCII, et annule le commit si c'est le cas, mais libre à vous de créer le votre.

Voilà le template minimal d'un fichier pre-commit :

#!/bin/sh

if [ ... ]
then
  echo "Pre-commit hook failed because..."
  exit 1
fi

echo "Pre-commit hook executed successfully"
exit 0

Une fois votre script fonctionnel, il ne vous restera plus qu'à essayer de créer un commit et voir votre hook s'exécuter !

Créer un hook de pre-commit avec NPM

Je travaille personnellement dans un environnement NodeJS, et je ne suis pas un expert des scripts bash, j'ai donc trouvé une solution pour gérer mon workflow de pre-commit directement avec NPM.

Cela permet en plus de partager mon hook avec les autres développeurs du projet, car sinon le dossier /.git/ n'est pas versionné.

Pour celà, il vous suffit d'installer le paquet NPM appelé "pre-commit" :

$ npm install pre-commit --save-dev

Et il ne vous restera plus qu'à indiquer le nom des scripts qui devront s'exécuter avec succès avant le commit, directement dans le fichier package.json :

{
  ...
  "scripts": {
    "test": "mocha -R spec tests/index.js --exit",
    "coverage": "nyc --reporter=text",
    "format": "prettier --write ./src"
  },
  "pre-commit": [
    "format",
    "test",
    "coverage"
  ],
  ...
}

Attention, si votre hook ne s'exécute pas, veillez bien à avoir installé le module après avoir initialisé votre dépôt Git, sinon il ne trouvera pas le dossier des hooks et échouera silencieusement.

Vous pouvez retrouver la documentation officielle du module directement sur GitHub : https://github.com/observing/pre-commit


Vous avez terminé l'article ?

Commentaires (0)

pour laisser un commentaire

Aucun commentaire pour l'instant