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 1 commentaire

  • greg0ire12-23-2013 10:21:27


    Pas mal! Tu seras peut-être intéressé par mon petit projet de hooks : https://github.com/greg0ire/git_template