clone

a personal forge on plain git: static pages, stacked-diff reviews, signed local ci, repo sites and releases

main
forge / test / scenarios / site-preview.sh
site-preview.sh 2.1K
1# A site deploy is a ref whose tree is served; a branch gets a preview,2# which goes away with the branch. Only the owner deploys refs/sites.3. "$(dirname "$0")/../lib.sh"4user dami5user ana6repo dami/greet7clone dami dami/greet "$T/w/d"8at "$T/w/d" commit "first"9push_as dami "$T/w/d" origin main10export FORGE_USER=dami11mkdir -p "$T/site" && printf '<h1>docs v1</h1>\n' >"$T/site/index.html"12ok at "$T/w/d" "$FORGE" site push "$T/site" docs13has "$FORGE_WWW/sites/dami/greet/docs/index.html" 'docs v1'14# Its tree is extracted once into the store, which the link points at. A15# deploy that reuses a stored tree touches it, so a gc running meanwhile16# (which spares what changed in its last 10 minutes) leaves it be.17g=$FORGE_ROOT/dami/greet.git18store=$FORGE_ROOT/.forge/store/$(git --git-dir="$g" rev-parse 'refs/sites/docs^{tree}')19eq "$(readlink "$FORGE_WWW/sites/dami/greet/docs")" "$store"20touch -t 202001010000 "$store"21ok at "$T/w/d" git fetch -q origin refs/sites/docs22ok push_as dami "$T/w/d" origin FETCH_HEAD:refs/sites/redo23eq "$(readlink "$FORGE_WWW/sites/dami/greet/redo")" "$store"24eq "$(find "$store" -maxdepth 0 -mmin -10)" "$store"2526clone ana dami/greet "$T/w/a"27at "$T/w/a" git switch -q -c ana/tweak28at "$T/w/a" commit "tweak"29push_as ana "$T/w/a" origin ana/tweak30printf '<h1>docs v2</h1>\n' >"$T/site/index.html"31FORGE_USER=ana ok at "$T/w/a" "$FORGE" site push "$T/site" docs32has "$FORGE_WWW/previews/dami/greet/docs/ana~tweak/index.html" 'docs v2'33has "$FORGE_WWW/sites/dami/greet/docs/index.html" 'docs v1'34at "$T/w/a" git update-ref refs/sites/docs "$(git -C "$T/w/a" rev-parse refs/site-previews/docs/ana/tweak)"35fails_with "only dami can update this" push_as ana "$T/w/a" origin +refs/sites/docs3637ok push_as ana "$T/w/a" origin :ana/tweak38missing "$FORGE_WWW/previews/dami/greet/docs/ana~tweak"39fails git --git-dir="$FORGE_ROOT/dami/greet.git" rev-parse -q --verify refs/site-previews/docs/ana/tweak40# gc frees the preview's files and keeps the live site's.41ok forge gc --age 042output | grep -q '^removed store' || fail "gc removed no store tree"43has "$FORGE_WWW/sites/dami/greet/docs/index.html" 'docs v1'