git.lucas.co / gitsite
generator for git.lucas.co
git clone https://git.lucas.co/gitsite.git

build.sh (1.2K)

 1 #!/bin/sh
 2 # Build git.lucas.co: sync repo mirrors, generate HTML, lay down dumb-http clones.
 3 # Output goes to ~/.cache/gitsite/out (kept out of Dropbox on purpose).
 4 set -e
 5 
 6 BASE=$(dirname "$(readlink -f "$0")")
 7 CACHE="$HOME/.cache/gitsite"
 8 mkdir -p "$CACHE/mirrors"
 9 
10 grep -v '^#' "$BASE/repos.conf" | grep -v '^$' | while IFS='|' read -r name path desc mode; do
11     m="$CACHE/mirrors/$name.git"
12     if [ ! -d "$m" ]; then
13         echo "mirroring $name"
14         git clone --quiet --mirror "$path" "$m"
15         git -C "$m" config gc.auto 0
16         # small packfiles: Cloudflare Pages rejects files over 25MB
17         git -C "$m" repack -a -d -q --max-pack-size=20m
18     else
19         git -C "$m" fetch --quiet --prune origin
20     fi
21 done
22 
23 python3 "$BASE/generate.py"
24 
25 grep -v '^#' "$BASE/repos.conf" | grep -v '^$' | while IFS='|' read -r name path desc mode; do
26     if [ "$mode" = "clone" ]; then
27         m="$CACHE/mirrors/$name.git"
28         # no loose objects: Cloudflare mangles them in transit; packs survive
29         git -C "$m" repack -a -d -q --max-pack-size=20m
30         git -C "$m" update-server-info
31         cp -al "$m" "$CACHE/out/$name.git"
32     fi
33 done
34 
35 echo "site built at $CACHE/out"