Lorsque l'on travaille à plusieurs, il est souvent difficile de se mettre d'accord sur les règles à utiliser sur un projet et il est encore plus compliqué de les faire appliquer. Il est possible de mettre en place une série de tâches pour s'assurer de la qualité du code (linter, CodeSniffer et tests) mais il faudra alors s'assurer que tous les collaborateurs les utilisent afin d'en tirer réellement partie. Et c'est là que GrumPHP intervient.
Que fait GrumPHP ?
GrumPHP va simplement créer des hooks git qui vont permettre de lancer une série de vérification lors de chaque commit. Ces vérifications sont définies à l'aide d'un fichier .yml situé à la racine du projet et permettent de configurer différentes opérations (CodeSniffer, Linter, Tests unitaires...). Lorsqu'une personne clone votre projet et installe les dépendances, GrumPHP rajoutera automatiquement les hooks et forcera ainsi l'utilisation de vos normes / tests.
Installation
Comme beaucoup d'outils PHP GrumPHP s'installe à l'aide de composer.
composer require --dev phpro/grumphp
Lorsque le package s'installe il ajoutera une série de hooks git à votre projet et devrait afficher le message
Watch out! GrumPHP is sniffing your commits!
Si ce message ne s'affiche pas vous pouvez recréer les hooks et la configuration à l'aide des commandes
vendor/bin/grumphp configure
vendor/bin/grumphp git:init
Vous pourrez d'ailleurs utiliser cette commande pour lancer les vérifications manuellement par la suite
vendor/bin/grumphp run
Configuration
La configuration se fait au travers du fichier grumphp.yml
généré par l'installation de GrumPHP.
parameters:
bin_dir: "./vendor/bin"
git_dir: "."
tasks:
composer: ~
gulp: ~
jsonlint: ~
kahlan: ~
phpcs: ~
phpcsfixer2: ~
phplint: ~
phpspec: ~
phpunit: ~
C'est la partie tasks
qui va vous permettre de définir les tâches à utiliser avant vos commits. L'ensemble de ces tâches disponibles dans la documentation. Par exemple pour PHP CS Fixer il est possible de définir les options suivantes :
# grumphp.yml
parameters:
tasks:
phpcsfixer2:
allow_risky: false
cache_file: ~
config: ~
rules: []
using_cache: true
path_mode: ~
verbose: true
~
permet d'utiliser la valeur par défaut. Les options correspondent généralement à celles disponibles dans les commandes concernées.