Utiliser un hook Git pour mettre à jour automatiquement les vendors de Symfony2 avec Composer
La mise à jour de Symfony2 est plutôt facile depuis l'utilisation de Composer. Mais d’expérience, ce n'est pas le cas pour tout le monde, nombreux sont les développeurs et les intégrateurs qui sont allergiques à la ligne de commande. Pour faciliter cette tache à l'ensemble de l'équipe j'ai donc utilisé un hook Git pour automatiser la mise à jour des vendors de Symfony2. Je me suis inspiré du travail de Lyrixx.
Dans le fonctionnement de notre équipe quand quelqu'un (enfin moi) met à jour les vendors de Symfony2, il en fait partager toute l'équipe en pushant le composer.lock sur le dépot Git. Puis il envoie à un mail à toute l'équipe pour prévenir de la mise à jour.
Mon idée est donc de mettre à jour les vendors de Symfony2 via Composer lors de la récupèration du code sur le dépot (git pull). Malheureusement il n'existe pas de Hook dans git pour la commande pull. J'ai donc utilisé le hook sur la commande merge puisque la fonction pull est une combinaison de la commande fetch et pull de Git.
J'ai donc créé un fichier nommé "post-merge" dans le dossier de mon projet .git/hooks
#!/bin/bash MYFILES=$(git diff --name-only HEAD^) for MYFILE in $MYFILES do if [ $MYFILE = "composer.lock" ]; then echo "Le fichier composer.lock a changé." if [ -f ../composer.phar ]; then echo "Mise à jour des dépendances:" php ../composer.phar install --prefer-source -o else if [ -f composer.phar ]; then echo "Mise à jour des dépendances:" php composer.phar install --prefer-source -o else echo "composer.phar non trouvé!" echo "Il faut lancer la commande pour installer les dépendances:" echo "php composer.phar install --prefer-source -o" fi fi fi done
Il ne faut pas oublier de mettre les droits d'execution au fichier.
Il ne reste plus qu'un problème à résoudre, déployer le hook chez les collègues. Je n'ai jamais trouvé comment le faire de façon automatique comme en SVN. On a beau copier le hook dans le dossier hook d'Origin, il n'est récupèré que lors de la fonction clone. Par chance nous travaillons tous sur le même serveur, personne n'a de copie en local sur sa machine et j'ai donc pu déployer le hook facilement à la main.
Il y a un commentaire.
Ecrit par greg0ire le 23 déc. 2013
Ajouter un commentaire