Stagit pour exposer ses dépôts git sur le Web
Stagit est une application, écrite en C, qui crée des pages HTML statiques pour vos répertoires git auto-hébergés. C'est une alternative sobre à gitweb ou à cgit.
Ce printemps, j'ai aussi écrit un autre tutoriel pour ceux qui veulent justement auto-héberger leurs dépôts git.
Mes exemples sont sous OpenBSD, mais cela peut s'appliquer facilement à n'importe quel environment unix.
Prérequis
- Être en mesure de vous connnecter à distance sur votre serveur par SSH.
- Un dépôt git doit exister sur votre serveur.
Se connecter au serveur par SSH et installer stagit
ssh utilisateur@addr.ip.tld
pkg_add -v stagit
Si vous n'avez pas de paquet pour stagit sur la distribution unix de votre serveur web, vous pouvez récupérer le code sur le site officiel https://codemadness.org/git/stagit/.
Après l'installation, deux applications se retrouvent normalement dans
votre répertoire /usr/local/bin
. En tapant ls -la
/usr/local/bin/stagit*
, vous pouvez vérifier si c'est bien le cas:
-rwxr-xr-x 1 root bin 44604 May 9 2020 /usr/local/bin/stagit
-rwxr-xr-x 1 root bin 20460 May 9 2020 /usr/local/bin/stagit-index
Si stagit ne se trouve pas à cet endroit, vous pouvez le chercher avec
la commande whereis stagit
. Au cas où cette commande ne retourne
rien, cela veut probablement dire que l'installation ne s'est pas bien
passée.
Comment stagit fonctionne?
Stagit fabrique un site web à l'endroit où vous vous trouvez, à partir du dépôt git que vous lui indiquez:
stagit /home/git/monprojet.git
Ce qui va produire quelque chose qui va ressembler à ça:
-rw-r--r-- 1 git www 34963 Dec 19 09:50 atom.xml
drwxr-xr-x 2 git www 3584 Dec 19 09:50 commit
drwxr-xr-x 8 git www 512 Dec 18 16:19 file
-rw-r--r-- 1 git www 141243 Dec 19 09:50 files.html
-rw-r--r-- 1 git www 16256 Dec 19 09:50 log.html
lrwxr-xr-x 1 git www 11 Dec 19 09:50 logo.png -> ../logo.png
-rw-r--r-- 1 git www 1197 Dec 19 09:50 refs.html
lrwxr-xr-x 1 git www 12 Dec 19 09:50 style.css -> ../style.css
Pour plus de détails, consultez la man page, en tapant man stagit
.
À quoi sert stagit-index
Comme c'est indiqué dans son nom, stagit-index va créer un page d'index avec tous les dépôts que vous allez lui soumettre:
stagit-index /home/git/depot-0.git /home/git/depot-1.git /home/git/depot-2.git
Le code HTML de cet index s'affichera directement dans la console
(stdout). Pour l'écrire dans un fichier index.html
, vous devez le
préciser dans votre commande:
stagit-index /home/git/abc.git /home/git/xyz.git > index.html
Automatiser le tout avec git et un script de post-receive
Évidemment, nous ne voulons pas devoir lancer ces commandes à chaque commit que nous poussons vers notre serveur distant. Nous allons donc écrire un script qui automatisera tout ça.
Crochet à la rescousse
Dans votre dépôt git distant, aller dans le répertoire hooks. Là
nous pouvons créer des scripts qui s'exécuterons à différents moments
d'une action. Le nôtre devra se lancer à la suite d'une réception d'un
git push
. Pour plus de détails sur les githooks, référez vous à la
documentation officiel: https://git-scm.com/docs/githooks.
Copiez un des scripts présent et renommez-le post-receive puis ouvrez-le avec nano ou un autre éditeur texte de votre choix:
cp post-receive-email.sample post-receive && nano post-receive
Effacez tout ce qui se trouve dans le fichier et copiez ce qui se trouve ci-dessous:
#!/bin/sh -e
# Les chemins doivent être absolues.
# L'emplacement du dépôt git.
gitdir="/home/git/votre-depot-git.git"
# L'emplacement du site.
dstdir="/var/www/votre-site-web.com/git"
# Créer les pages HTML.
mkdir -p "$dstdir/hscc"
(cd "$dstdir/hscc" && stagit "$gitdir")
# L'emplacement de tous les dépôts.
gitall="/home/git"
# Créer l'index
stagit-index "${gitall}/"*/ > "${dstdir}/index.html"
# Créer des liens symboliques pour les styles et le logo.
(cd "$dstdir/hscc" && ln -sf ../style.css style.css && ln -sf ../logo.png logo.png)
echo "post-receive is done"
Sauvegardez et sortez. Pour tester votre script:
./post-receive
Ensuite, allez à l'emplacement supposé du site, pour voir si les fichiers ont bien été créé. Si tout fonctionne comme prévu, à partir de maintenant, lorque vous poursserez vos changements vers votre dépôt git, votre site stagit sera mis à jour automatiquement.
Si vous avez les questions n'hésitez pas à commniquer avec moi! Merci