Every deploy first replays every production ledger with the engine about to ship. The droplet gains a nightly rollup of counts and a nightly backup to Spaces, a pulse script the pulse skill reads, rate limits on opening rooms and taking seats, and eviction of idle rooms from memory with reload from their ledgers on the next visit. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0141G6xqLeNRYEtviLWSB5Up
51 lines
2.4 KiB
Bash
Executable File
51 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build locally, push the static site and the duel server to the droplet,
|
|
# and restart the server. Usage: deploy/deploy.sh <droplet-ip-or-host>
|
|
set -euo pipefail
|
|
HOST="${1:?usage: deploy.sh <droplet-ip-or-host>}"
|
|
|
|
npm run check
|
|
npm run check:server
|
|
npm test
|
|
npm run build
|
|
|
|
# Every production ledger must replay identically with the engine about to ship.
|
|
deploy/verify-ledgers.sh "$HOST"
|
|
|
|
# Old hashed chunks stay a week: a page loaded before this deploy can still
|
|
# fetch the module it was built against instead of failing mid-duel.
|
|
rsync -az --delete --filter='P _app/immutable/*' \
|
|
build/ "root@$HOST:/opt/waving-hands/build/"
|
|
|
|
# The server runs from source with tsx and carries its own small manifest;
|
|
# it needs only its code and the engine. Ledgers live outside this tree.
|
|
rsync -az --delete --exclude='/server/node_modules' \
|
|
--include='/server/***' --include='/src/' --include='/src/lib/' --include='/src/lib/game/***' \
|
|
--include='/deploy/' --include='/deploy/waving-hands.service' --include='/deploy/waving-hands.cron' --include='/deploy/*.sh' \
|
|
--exclude='*' \
|
|
./ "root@$HOST:/opt/waving-hands/app/"
|
|
|
|
ssh "root@$HOST" '
|
|
find /opt/waving-hands/build/_app/immutable -type f -mtime +7 -delete
|
|
chown -R root:caddy /opt/waving-hands/build
|
|
chmod -R g+rX /opt/waving-hands/build
|
|
cd /opt/waving-hands/app/server && npm install --no-audit --no-fund
|
|
chown -R waving-hands:waving-hands /opt/waving-hands/app
|
|
cp /opt/waving-hands/app/deploy/waving-hands.service /etc/systemd/system/waving-hands.service
|
|
# Cron runs the rollup and the backup from /usr/local/bin: install them on
|
|
# every deploy so the live copies are always the repo copies.
|
|
install -m 755 /opt/waving-hands/app/deploy/visitors.sh /usr/local/bin/waving-hands-visitors.sh
|
|
install -m 755 /opt/waving-hands/app/deploy/pulse.sh /usr/local/bin/waving-hands-pulse.sh
|
|
install -m 755 /opt/waving-hands/app/deploy/waving-hands-rollup.sh /usr/local/bin/waving-hands-rollup.sh
|
|
install -m 755 /opt/waving-hands/app/deploy/waving-hands-backup.sh /usr/local/bin/waving-hands-backup.sh
|
|
install -m 644 /opt/waving-hands/app/deploy/waving-hands.cron /etc/cron.d/waving-hands
|
|
mkdir -p /var/log/waving-hands
|
|
systemctl daemon-reload
|
|
systemctl enable --now waving-hands
|
|
systemctl restart waving-hands
|
|
systemctl reload caddy
|
|
sleep 1
|
|
systemctl --no-pager -l status waving-hands | head -3
|
|
'
|
|
echo "deployed."
|