aboutsummaryrefslogtreecommitdiff
path: root/roles/git/files/runner-zola/webhook.sh
blob: 1c10685829fb2af414b1fe1912c401152a54c780 (plain) (blame)
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
#!/bin/sh

# Simple webhook to build and deploy latest blog version.
# The webhook allows to pass an optional ref as url path.
#
# Examples:
#   curl <host>             ; Will deploy main ref
#   curl <host>/blub        ; Will deploy blub ref

while true; do
    echo "Wait for webhook trigger ..."

    # Wait until webhook is triggered and parse out optional branch info.
    # The branch info can be passed via the url path, an example is:
    #   GET /blub HTTP/1.1
    REF=$(echo -e "HTTP/1.0 204 No Content\r\nConnection: close\r\n\r" | nc -l -p 80 | awk '/GET/ { print $2; }' | tr -d '/')
    # If we got a ref use it else default to main.
    REF=${REF:-main}

    if [ ! -d blog ]; then
        # Use non-redirected port as redirection is handled via PREROUTING
        # iptables rules and if this hook runs on the same machine the request
        # packages will not go through the routing chain.
        git clone https://git.memzero.de:8443/blog
    fi
    git -C blog submodule init
    git -C blog submodule update
    git -C blog fetch --prune
    echo "Checking out ref: $REF"
    git -C blog checkout $REF || continue

    zola --root blog build || continue

    # webroot must be mounted at /www.
    rm -rf /www/blog
    mv blog/public /www/blog

    echo "SUCCESS: Updated /www/blog"
done