The homelab has no rsync, so the tree goes over as a tar stream, and the destination is wiped first - a stale content-hashed chunk left behind would be served forever, since /assets/* is cached as immutable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
25 lines
1.1 KiB
Bash
Executable file
25 lines
1.1 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
# Build and publish to nte.goober.moe.
|
|
#
|
|
# The homelab has no rsync, so the tree goes over as a tar stream. Caddy serves
|
|
# /mnt/docker/appdata/caddy/sites/nte.goober.moe as /srv/nte.goober.moe (a
|
|
# read-only bind mount declared in /mnt/docker/compose/caddy/docker-compose.yml),
|
|
# so a deploy is a file copy - no container restart, no config reload.
|
|
set -eu
|
|
|
|
HOST="${DEPLOY_HOST:-hl}"
|
|
DEST="${DEPLOY_DEST:-/mnt/docker/appdata/caddy/sites/nte.goober.moe}"
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
|
|
cd "$ROOT"
|
|
rm -rf dist
|
|
# build:single runs the hosted build first, so this produces both targets.
|
|
npm run build:single
|
|
|
|
# Replace rather than merge: a stale content-hashed chunk left behind would be
|
|
# served forever, since /assets/* is cached as immutable.
|
|
tar -C dist -cz . | ssh "$HOST" "rm -rf '$DEST'/* && tar -C '$DEST' -xz"
|
|
|
|
printf '\ndeployed. checking...\n'
|
|
curl -fsS -o /dev/null -w 'https://nte.goober.moe/ -> %{http_code}\n' https://nte.goober.moe/
|
|
curl -fsS -o /dev/null -w 'https://nte.goober.moe/nte.html -> %{http_code} (%{size_download} bytes)\n' https://nte.goober.moe/nte.html
|