johnandersen777.bsky.social/atlibs-socialweb-computer-requester
socialweb.computer market requester and policy modules for atlibs, with its web pages and lexicons
0
0
#!/bin/sh
# Builds the requester page (web/webrtc: the requester module, its hook defaults, atlibs and atlibs-webrtc) and
# serves it at https://shell.socialweb.computer/ from the socialweb.computer gateway's Caddy. The modules are
# the published records (atlibs add <publisher>/requester[@pin], default bobvmbuilder.bsky.social's latest);
# atlibs/ and atlibs-webrtc/ are their npm releases (ATLIBS_VERSION, ATLIBS_WEBRTC_VERSION).
# scripts/deploy-page.sh [--build-only] [<handle>/requester[@pin]]
set -eu
cd "$(dirname "$0")/.."
site=shell.socialweb.computer
build_only=; [ "${1:-}" = --build-only ] && { build_only=1; shift; }
ref=${1:-bobvmbuilder.bsky.social/requester}
atlibs=${ATLIBS_VERSION:-0.2.3} webrtc=${ATLIBS_WEBRTC_VERSION:-0.2.1}
ssh="ssh -p ${SSH_PORT:-1997} -o BatchMode=yes ${SSH_TARGET:-root@socialweb.computer}"
work=$(mktemp -d); trap 'rm -rf "$work"' EXIT
atlibs add "$ref" --dir "$work" >/dev/null
rm -rf dist/page; mkdir -p dist/page
atlibs stage --target spa --origin "https://$site/" --out dist/page --dir "$work" >/dev/null
rsync -aL --exclude '*.test.mjs' --exclude 'modules/' --exclude atlibs --exclude atlibs-webrtc web/webrtc/ dist/page/
# atlibs and atlibs-webrtc at their npm releases (the page's import map names ./atlibs/ and ./atlibs-webrtc/)
(cd "$work" && npm pack --silent "@publicdomainrelay/atlibs@$atlibs" "@publicdomainrelay/atlibs-webrtc@$webrtc" >/dev/null)
mkdir -p "$work/a" "$work/w"; tar -C "$work/a" -xzf "$work"/publicdomainrelay-atlibs-[0-9]*.tgz; tar -C "$work/w" -xzf "$work"/publicdomainrelay-atlibs-webrtc-*.tgz
cp -R "$work/a/package/src" dist/page/atlibs; cp -R "$work/w/package/js" dist/page/atlibs-webrtc
echo "built dist/page for https://$site/ ($ref, atlibs $atlibs, atlibs-webrtc $webrtc)"
[ -z "$build_only" ] || exit 0
tar -C dist/page -cf - . | $ssh "rm -rf /var/www/$site.new && mkdir -p /var/www/$site.new && tar -C /var/www/$site.new -xf -"
$ssh "SITE=$site sh -s" <<'REMOTE'
set -eu
d=/var/www/$SITE
ts=$(date -u +%Y%m%dT%H%M%SZ)
[ ! -d "$d" ] || tar -C /var/www -czf "/var/backups/$SITE-$ts.tgz" "$SITE"
rm -rf "$d.old"; [ ! -d "$d" ] || mv "$d" "$d.old"; mv "$d.new" "$d"; rm -rf "$d.old"
f=/etc/caddy/sites/$SITE.caddy
want=$(printf '%s {\n\troot * %s\n\theader Cache-Control "no-cache"\n\tfile_server\n}' "$SITE" "$d")
if [ "$(cat "$f" 2>/dev/null)" != "$want" ]; then
cp -p "$f" "/var/backups/$SITE-$ts.caddy" 2>/dev/null || true
printf '%s\n' "$want" > "$f"
caddy validate --config /etc/caddy/Caddyfile >/dev/null 2>&1 || { cp -p "/var/backups/$SITE-$ts.caddy" "$f"; echo "caddy validate failed: $f restored" >&2; exit 1; }
systemctl reload caddy
fi
echo "backup /var/backups/$SITE-$ts.tgz"
REMOTE
curl -sf -o /dev/null "https://$site/stage.json" && echo "https://$site/"