Sommaire


git-precommit-checks
Automatisez des vérifications lors de vos commits avec Husky et git-precommit-checks
Catégories associées : , ,

Git-precommit-checks est un outil que je trouve fabuleux. Il nous permet de créer des petits tests qui seront exécutés à chaque commit, sur le code qui vient d'être ajouté au commit avec git add. Cela nous permet de nous assurer que malgré notre faiblesse humaine, quelqu'un veille sur notre code pour nous ! 🐶

Il permet de créer autant de règles que l'on veut, avec des patterns à écouter dans le code ajouté aux commits. par exemple, celui-ci, pour voir s'il ne reste pas des console.log :

{
// s'applique à tous les fichiers JS : s'il reste un TODO, on a une alerte
filter: /\.js$/,
regex: /console.log/,
message: '⚠️ Il y a des console.log qui trainent 🤢',
nonBlocking: true,
},

Simple, efficace, et terriblement meilleur que nous pour retrouver des choses qu'on aurait oublié. Attention, cette vérification ne se fait que sur les fichiers ajoutés au commit. Tout ce qui a déjà été ajouté ne repassera pas par cette vérification. Donc si vous laissez trainer un console.log que vous envoyez sur le repo distant, git-precommit-check ne le mentionnera plus lors des commits futurs. C'est donc faillible, et l'on rajoutera d'autres outils plus généraux, notamment des outils de tests, pour vérifier tout le code de temps en temps.

Détails

  • Filter : les fichiers concernés par cette vérification. Par défaut, tous les fichiers.
  • regex : l'expression régulière recherchée dans les fichiers.
  • message : le message qui apparait si la vérification échoue.
  • nonBlocking : indique si une vérification qui échoue empêche le commit ou non. Par défaut, false.

Installation

Avant d'installer git-precommit-checks, vous aurez besoin d'installer Husky. Si ce n'est pas déjà fait, je vous laisse suivre cette astuce :

npm install --save-dev git-precommit-checks

Une fois installé, on doit dire à Husky de l'appeler. Pour cela, on va aller dans le dossier .husky/ et on va ajouter un nouveau fichier pre-commit (sans extension).

# À l'intérieur du fichier 'pre-commit' :
npx --no-install git-precommit-checks

Explications : npx, c'est le pendant de npm, ça permet d'exécuter une librairie. --no-install, c'est pour préciser qu'on ne veut pas installer la dépendance, juste l'exécuter. On l'a déjà installée globalement, elle existe dans le fichier package.json. Puis le nom de la dépendance à exécuter.

Exécution

À chaque commit, git-precommit-checks se lancera automatiquement. Génial ! 😃

Exemple de vérifications

Voici quelques exemples que j'utilise dans mes projets :

module.exports = {
display: {
notifications: true,
offendingContent: true,
rulesSummary: false,
shortStats: true,
verbose: false,
},
rules: [
{
// s'applique à tous les fichiers : s'il reste un FIXME ou un TODO, on a une alerte
regex: /(?:FIXME|TODO)/,
message: '⚠️ Il reste du travail non terminé 🛠️',
nonBlocking: true,
},
{
// s'applique à tous les fichiers JS : s'il reste un TODO, on a une alerte
filter: /\.js$/,
regex: /console.log/,
message: '⚠️ Il y a des console.log qui trainent 🤢',
nonBlocking: true,
},
{
// s'applique à tous les fichiers : s'il y a un "DO NOT COMMIT" dans un fichier envoyé au commit, on bloque
regex: /DO NOT COMMIT/,
message: '⛔️ Un fichier envoyé est interdit de commit',
nonBlocking: false,
},
{
regex: /(password|apiKey|secret|token)\s*=\s*['"]?[a-zA-Z0-9_\-]{8,}['"]?/,
message: '🔐 Un mot de passe ou une clé API semble être exposé dans le code',
nonBlocking: false,
},
{
regex: /[^a-zA-Z0-9_\-.]/,
filter: /.*\.(js|ts|jsx|tsx)$/,
message: '⚠️📄 Un fichier ne respecte pas les conventions de nommage (caractères spéciaux détectés)',
nonBlocking: true,
},
{
filter: /\.(log|tmp|lock)$/i,
message: '⚠️📄 Des fichiers générés automatiquement sont inclus dans le commit',
nonBlocking: true,
},
{
regex: /(node_modules|vendor|var)/,
message: '⛔️🗂️ Les dossiers "node_modules", "vendor" ou "var" ne doivent pas être téléversés',
nonBlocking: false,
}
],
}

Bon à savoir

Si pour une raison ou pour une autre, on doit à tout prix pousser un code qui ne passe pas, on peut ajouter -n à notre commande : git commit -m "message" -n. Cela permet de ne pas valider les contraintes, et de pousser le code tout de même. Écrit en entier, c'est --no-validate.

Bon dev !

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.