Gérez facilement les hooks git dans la configuration de votre compositeur. Cet outil de ligne de commande facilite la mise en œuvre d’une utilisation cohérente des hooks git à l’échelle du projet. La spécification des hooks dans le fichier composer les rend disponibles pour chaque membre de l'équipe du projet. Cela fournit un environnement et un comportement cohérents pour tout le monde, ce qui est formidable. Il est également possible de l'utiliser pour gérer les hooks git globalement pour chaque référentiel sur votre ordinateur. De cette façon, vous disposez d’un ensemble fiable de crochets fabriqués par vous-même pour chaque projet sur lequel vous choisissez de travailler.
Ajoutez une section hooks
à la section extra
de votre composer.json
et ajoutez-y les hooks.
{
"extra" : {
"hooks" : {
"pre-commit" : [
"echo committing as $(git config user.name)" ,
"php-cs-fixer fix ." // fix style
] ,
// verify commit message. ex: ABC-123: Fix everything
"commit-msg" : "grep -q '[A-Z]+-[0-9]+.*' $1" ,
"pre-push" : [
"php-cs-fixer fix --dry-run ." // check style
"phpunit"
] ,
"post-merge" : "composer install"
"..." : "..."
}
}
}
Puis installez avec
composer require --dev brainmaestro/composer-git-hooks
Cela installe le binaire cghooks
dans votre dossier vendor/bin
. Si ce dossier ne se trouve pas dans votre chemin, vous devrez faire précéder chaque commande de vendor/bin/
.
Remarque : les hooks déclarés dans les sections racine des scripts
ou hooks
de composer.json
ne sont plus pris en charge dans la v3.
Vous pouvez également l'installer globalement. Cela semble beaucoup plus naturel lorsque cghooks
est utilisé avec la prise en charge nouvellement ajoutée de la gestion des hooks git globaux.
composer global require --dev brainmaestro/composer-git-hooks
Toutes les commandes ont un support global (en plus de tester les hooks. Nécessite toujours d'être dans le répertoire avec le fichier composer.json
).
Lorsqu'un hook est une séquence de commandes, il peut être utile d'arrêter l'exécution lorsqu'une commande échoue.
Spécifiez les hooks concernés dans la section de configuration stop-on-failure
.
{
"extra" : {
"hooks" : {
"config" : {
"stop-on-failure" : [ " pre-push " ]
},
"pre-push" : [
" php-cs-fixer fix --dry-run --stop-on-violation . " ,
" phpunit "
],
}
}
}
Assurez-vous toujours d'exécuter la commande update après avoir modifié la section de configuration stop-on-failure
.
Des hooks personnalisés peuvent être ajoutés au tableau custom-hooks
de la section `config.
{
"extra" : {
"hooks" : {
"config" : {
"custom-hooks" : [ " pre-flow-feature-start " ]
},
"pre-flow-feature-start" : [
" echo 'Starting a new feature...' "
]
}
}
}
Assurez-vous toujours d'exécuter la commande update après avoir modifié la section de configuration custom-hooks
. Remarque : config
n'est pas une valeur de hook personnalisée valide.
Ajoutez un script cghooks
à la section scripts
de votre fichier composer.json
. De cette façon, les commandes peuvent être exécutées avec composer cghooks ${command}
. C'est idéal si vous préférez ne pas modifier votre chemin système.
{
"scripts" : {
"cghooks" : " vendor/bin/cghooks " ,
"..." : " ... "
}
}
Ajoutez les événements suivants à votre fichier composer.json
. Les commandes cghooks
seront exécutées à chaque fois que les événements se produisent. Accédez à Événements de commande du compositeur pour plus de détails sur le système d'événements du compositeur.
{
"scripts" : {
"post-install-cmd" : " cghooks add --ignore-lock " ,
"post-update-cmd" : " cghooks update " ,
"..." : " ... "
}
}
Toutes les commandes suivantes doivent être exécutées soit dans le même dossier que votre fichier composer.json
, soit en spécifiant l'option --git-dir
pour pointer vers un dossier contenant un fichier composer.json
.
Une fois l'installation terminée, exécutez cghooks add
pour ajouter tous les hooks git valides qui ont été spécifiés dans la configuration du composer.
Option | Description | Commande |
---|---|---|
no-lock | Ne créez pas de fichier de verrouillage | cghooks add --no-lock |
ignore-lock | Ajoutez le fichier de verrouillage à .gitignore | cghooks add --ignore-lock |
force-win | Forcer la compatibilité bash de Windows | cghooks add --force-win |
Le fichier lock
contient une liste de tous les hooks ajoutés.
Si l'indicateur --global
est utilisé, les hooks seront ajoutés globalement et la configuration globale de git sera également modifiée. Si aucun répertoire n'est fourni, il existe un repli vers le core.hooksPath
actuel dans la configuration globale. Si cette valeur n'est pas définie, la valeur par défaut est $COMPOSER_HOME
(cette solution de secours spécifique ne se produit que pour la commande add
). Il échouera avec une erreur s’il n’y a toujours pas de chemin après les solutions de repli.
La commande update qui est exécutée avec cghooks update
ignore essentiellement le fichier de verrouillage et tente d'ajouter des hooks à partir du fichier composer. Ceci est similaire à ce que faisait l'option --force
pour la commande add
. Cette commande est utile si les hooks du fichier composer.json
ont changé depuis la première fois que les hooks ont été ajoutés.
Cela fonctionne de la même manière lorsqu'il est utilisé avec --global
sauf qu'il n'y a pas de repli vers $COMPOSER_HOME
si aucun répertoire n'est fourni.
Les crochets peuvent être facilement retirés avec cghooks remove
. Cela supprimera tous les hooks spécifiés dans la configuration du compositeur.
Les hooks peuvent également être supprimés en les passant comme arguments. La commande cghooks remove pre-commit post-commit
qui supprimera les hooks pre-commit
et post-commit
.
Option | Description | Commande |
---|---|---|
force | Supprimer les hooks sans vérifier le fichier de verrouillage | cghooks remove --force |
ATTENTION : Si le fichier de verrouillage a été falsifié ou si l'option force a été utilisée, les hooks qui existaient déjà avant l'utilisation de ce package, mais qui ont été spécifiés dans la configuration des scripts du compositeur seront également supprimés. Autrement dit, si vous aviez un hook pre-commit
précédent, mais que votre configuration actuelle de composer dispose également d'un hook pre-commit
, cette option entraînera la suppression par la commande de votre hook initial.
Cela n'a pas non plus de solution de repli vers $COMPOSER_HOME
si aucun répertoire n'est fourni lorsqu'il est utilisé avec --global
.
Les hooks peuvent être répertoriés avec la commande cghooks list-hooks
. Cela vérifie essentiellement la configuration du compositeur et répertorie les hooks qui contiennent réellement des fichiers.
Les options suivantes sont communes à toutes les commandes.
Option | Description | Commande |
---|---|---|
git-dir | Chemin d'accès au répertoire git | cghooks ${command} --git-dir='/path/to/.git' |
lock-dir | Chemin pour verrouiller le répertoire de fichiers | cghooks ${command} --lock-dir='/path/to/lock' |
global | Exécute la commande spécifiée globalement | cghooks ${command} --global |
Chaque commande dispose également d'un indicateur -v
pour contrôler la verbosité des journaux plus détaillés. Actuellement, un seul niveau est pris en charge.
Les hooks peuvent être testés avec cghooks ${hook}
avant de les ajouter. L'exemple cghooks pre-commit
exécute le hook pre-commit
.
Veuillez consulter CONTRIBUER pour plus de détails.
La licence MIT (MIT). Veuillez consulter le fichier de licence pour plus d'informations.