Sphinx - Deployment via Git-Hook

Diese Seite hier wird mittels Sphinx gepflegt, und liegt in einem (bare) Git-Repository (auf dem selben Server).

Da Mensch faul ist, will man nicht immer die Doku per Hand bauen, und dann manuell hochladen.

Mittels post-receive Git-Hook kann man den Webserver dazu veranlassen dies nach jedem Push automatisch zu tun.

 1#!/bin/bash
 2
 3# public target folder
 4OUTDIR="/webserver/pfad/zur/doku"
 5# path to the sphinx command
 6SPHINXBUILD="$HOME/.local/bin/sphinx-build"
 7
 8# create temporary directories
 9BUILDDIR=$(mktemp -d -t wissen_build.XXXXX)
10CLONEDIR=$(mktemp -d -t wissen_clone.XXXXX)
11
12# clone the bare repository
13if ! (
14    mkdir -p "$OUTDIR" &&
15    git clone "$(pwd)" "$CLONEDIR"
16); then
17    echo "sphinx clone failed"
18    exit 3
19fi
20
21# build the documentation
22if ! (
23    $SPHINXBUILD -a -b html "$CLONEDIR" "$BUILDDIR"
24); then
25    echo "sphinx build failed"
26    exit 2
27fi
28
29# move the files around and clean up
30if ! (
31    rm -rf "$OUTDIR" &&
32    cp -a "$BUILDDIR" "$OUTDIR" &&
33    chmod -v 755 "$OUTDIR" &&
34    rm -rf "$BUILDDIR" "$CLONEDIR"
35); then
36    echo "sphinx file handling failed"
37    exit 1
38fi
39
40echo "sphinx deployment successful"
41exit 0

Zugegeben - das Script ist sehr schlicht, funktioniert jedoch recht zuverlässig. Die einfachsten Lösungen sind doch immernoch die besten :)