v3: load-v3.sh — one-time in-place migration from v2 (import base, push, swap containers)

This commit is contained in:
2026-08-13 22:39:42 +10:00
parent 43abf922f4
commit ecce2d4949
+67
View File
@@ -0,0 +1,67 @@
#!/usr/bin/env bash
# load-v3.sh — one-time migration: import the v2 base into v3, push it, and deploy
# v3 IN PLACE of v2 (same host port, same container name, same live-state volume).
#
# Run on hal-blackpearl: bash load-v3.sh
# If the push step needs credentials: GITEA_TOKEN=<your token> bash load-v3.sh
#
# Rollback at any time: cd ~/newbury-exhibit && docker compose up -d --build
set -e
GITEA_HOST="gitea.hideawaygaming.com.au"
V2_URL="https://${GITEA_HOST}/jessikitty/newbury-exhibit-v2.git"
V3_URL="https://${GITEA_HOST}/jessikitty/newbury-exhibit-v3.git"
DIR="$HOME/newbury-exhibit-v3"
OLD="$HOME/newbury-exhibit"
# 1) clone or update v3
if [ ! -d "$DIR/.git" ]; then git clone "$V3_URL" "$DIR"; fi
cd "$DIR"
git fetch origin && git reset --hard origin/main
# 2) import unchanged v2 base files (only ones v3 doesn't already define),
# then PUSH — required, so future `deploy.sh` hard-resets keep the base.
if [ ! -f server/server.js ]; then
echo "== importing v2 base files =="
TMP="$(mktemp -d)"
git clone --depth 1 "$V2_URL" "$TMP/v2"
rm -rf "$TMP/v2/.git"
rm -f "$TMP"/v2/*.bat # v2-era upload helpers target the old repo
if command -v rsync >/dev/null 2>&1; then
rsync -a --ignore-existing "$TMP/v2/" "$DIR/"
else
cp -rn "$TMP/v2/." "$DIR/"
fi
rm -rf "$TMP"
git add -A
git -c user.name="load-v3" -c user.email="load-v3@local" commit -m "Import v2 base (unchanged files)"
if [ -n "$GITEA_TOKEN" ]; then
git push "https://jessikitty:${GITEA_TOKEN}@${GITEA_HOST}/jessikitty/newbury-exhibit-v3.git" main:main
else
if ! git push origin main; then
echo ""
echo "!! Push failed (no credentials on this machine)."
echo "!! Re-run as: GITEA_TOKEN=your-api-token bash load-v3.sh"
echo "!! Not deploying yet — deploy.sh hard-resets to origin/main, so the"
echo "!! base import must be on the remote first."
exit 1
fi
fi
fi
# 3) carry deployment config + locally-dropped OBJ models over from v2
if [ -f "$OLD/.env" ]; then cp -n "$OLD/.env" .env 2>/dev/null || true
elif [ ! -f .env ]; then cp .env.example .env; fi
if [ -d "$OLD/public/models" ]; then
mkdir -p public/models
cp -an "$OLD/public/models/." public/models/ 2>/dev/null || true
fi
# 4) swap containers in place. Same compose project name => same container,
# ports, and exhibit-live volume; live state carries over automatically.
if [ -d "$OLD" ]; then (cd "$OLD" && docker compose down) || true; fi
docker compose up -d --build
docker image prune -f >/dev/null
echo ""
echo "v3 is live at the same address (host port unchanged)."
echo "Future deploys: cd $DIR && bash deploy.sh"
echo "Rollback: cd $OLD && docker compose up -d --build"