Envoi de mail automatique avec Git

vendredi 15 février 2013
par  Matthieu Moy

Il peut être agréable de configurer la forge pour qu’un git push envoie un (ou plusieurs) emails aux autres membres du projet. Par défaut, la forge n’envoie rien. On peut mettre en place un envoi de mail par push et/ou un envoi de mail par commit envoyé par chaque push. Voici comment faire :

1. Depuis l’interface web de la forge, trouvez l’emplacement du repository Git concerné. Dans ce qui suit, on considèrera le projet mm-test, pour lequel l’onglet « SCM » de la forge suggère :

git clone git+ssh://moy@scm.forge.imag.fr/var/lib/gforge/chroot/scmrepos/git/mm-test/mm-test.git

Le repository se trouve donc dans le répertoire /var/lib/gforge/chroot/scmrepos/git/mm-test/mm-test.git sur la machine scm.forge.imag.fr.

2. Ouvrir un shell sur la forge et se placer dans le bon répertoire :

ssh scm.forge.imag.fr
cd /var/lib/gforge/chroot/scmrepos/git/mm-test/mm-test.git/hooks/

3. Vérifier que le fichier post-receive existe et qu’il est exécutable :

ls -l post-receive

(Doit répondre quelque chose comme : -rwxrwx--- 1 root scm_mm-test 531 Feb 13 18:02 post-receive)

4. Éditer (avec la commande vim) le fichier post-receive et y ajouter, à la fin, la ligne :

python /usr/lib/pymodules/python2.6/git-multimail/git_multimail.py

5. Remonter d’un niveau et éditer le fichier config :

cd ..
vim config

Le fichier config doit contenir une section ressemblant à ceci :

[multimailhook]
# Adresse a laquelle les messages de notification seront envoyes
        mailinglist = mm-test-commits@lists.forge.imag.fr
# Obligatoire pour dire a git_multimail.py de ne pas essayer
# d'utiliser sendmail (non-dispo sur la forge) :
        mailer = smtp
# Adresse de l'expediteur pour les mails envoyes
        from = John Smith <john.smith@example.com>

Pour plus de détails sur les options disponibles, voir la documentation de git_multimail : https://github.com/git-multimail/git-multimail.

6. Si les mails sont envoyés à une mailing-list (comme mm-test-commits@lists.forge.imag.fr dans l’exemple ci-dessus), configurer la liste (« privacy options », « sender filter », champ « accept_these_nonmembers ») pour accepter automatiquement tous les mails en provenance de l’adresse spécifiée dans multimailhook.from (ou bien le modérateur va recevoir un mail de demande de modération par push, c’est assez pénible).