#!/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 /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] [/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/"