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 dieses nach jedem Push automatisch zu tun.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash

# public target folder
OUTDIR="/webserver/pfad/zur/doku"
# path to the sphinx command
SPHINXBUILD="$HOME/.local/bin/sphinx-build"

# create temporary directories
BUILDDIR=$(mktemp -d -t wissen_build.XXXXX)
CLONEDIR=$(mktemp -d -t wissen_clone.XXXXX)

# clone the bare repository
if ! (
    mkdir -p "$OUTDIR" &&
    git clone "$(pwd)" "$CLONEDIR"
); then
    echo "sphinx clone failed"
    exit 3
fi

# build the documentation
if ! (
    $SPHINXBUILD -a -b html "$CLONEDIR" "$BUILDDIR"
); then
    echo "sphinx build failed"
    exit 2
fi

# move the files around and clean up
if ! (
    rm -rf "$OUTDIR" &&
    cp -a "$BUILDDIR" "$OUTDIR" &&
    chmod -v 755 "$OUTDIR" &&
    rm -rf "$BUILDDIR" "$CLONEDIR"
); then
    echo "sphinx file handling failed"
    exit 1
fi

echo "sphinx deployment successful"
exit 0

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