neoDSI   CTO & Développeur back-end symfony
+33 6 62 75 87 89 Contact

Hook de pre-commit dans git pour executer phpcs

L’utilisation de phpcs permet de détecter le non respect des standards de codage que l’ont peut lancer dans son intégration continue ou en console quand on le souhaite.

Afin de ne pas lancer des builds dans jenkins pour rien, on peut avant de commiter ces fichiers, exécuter de manière automatique la détection des erreurs grâce au mécanisme des hooks de git.

Il suffit donc de créer le fichier pre-commit qui se trouve dans le dossier hooks du dossier .git de votre projet. Vous y trouverez des fichiers .sample de chaque hooks possible.

#!/bin/bash
PHPCS_PATH=phpcs
PHPCS_IGNORE=vendor/
FILES=$(git st --porcelain | awk '{if ($1 == "A" || $1 == "M") print $2}')

if [ `echo $FILES | wc -c` -gt 1 ] ; then
 PHPCSRET=$(echo $FILES | xargs xargs $PHPCS_PATH --standard=Symfony2 --ignore=$PHPCS_IGNORE -n)
 NBLINES=$(printf "$PHPCSRET" | wc -l)
 if [ $NBLINES -gt 0 ] ; then
 printf "$PHPCSRET\n"
 exit 1
 fi
fi
exit 0

On définit le path pour phpcs (le mien est accessible de n’importe où), les dossier que l’on souhaite ignorer et enfin les fichiers à traiter (le git st –porcelain permet d’avoir une liste de fichiers pour les traitements).

Ensuite on itère sur l’ensemble des fichiers pour voir si ils ont des problèmes de coding standard (pour Symfony2 dans mon cas).