53 lines
2.3 KiB
Bash
Executable File
53 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# deploy.sh <host> <tag> — push-based deploy from the dev machine (SPEC-007).
|
|
# Rollback = run again with the previous tag (DEP-06); restore the
|
|
# bot.db.pre-<tag> backup first when the schema version moved (PER-06).
|
|
set -euo pipefail
|
|
|
|
HOST="${1:?usage: deploy.sh <fjerkroa|ggg> <tag>}"
|
|
TAG="${2:?usage: deploy.sh <fjerkroa|ggg> <tag>}"
|
|
|
|
case "$HOST" in
|
|
fjerkroa) SERVICE=kroa CONFIG=kroa.toml ;;
|
|
ggg) SERVICE=luma CONFIG=ggg.toml ;;
|
|
*) echo "unknown host: $HOST (known: fjerkroa, ggg)" >&2; exit 1 ;;
|
|
esac
|
|
|
|
# Tags only — no branch/commit deploys (DEP-01)
|
|
git rev-parse -q --verify "refs/tags/$TAG" >/dev/null || { echo "not a tag: $TAG" >&2; exit 1; }
|
|
|
|
# Restaurant service window (DEP-05)
|
|
if [ "$HOST" = fjerkroa ] && [ "${DEPLOY_FORCE:-0}" != 1 ]; then
|
|
HOUR=$(TZ=Europe/Oslo date +%H)
|
|
if [ "$HOUR" -ge 11 ] && [ "$HOUR" -lt 22 ]; then
|
|
echo "refusing kroa deploy during service hours (11-22 Europe/Oslo); DEPLOY_FORCE=1 overrides (DEP-05)" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "== deploy $TAG -> $HOST (service $SERVICE, config $CONFIG) =="
|
|
|
|
# Code push: tag tree over ~/fjerkroa_bot; untracked config/state survives (DEP-01)
|
|
git archive "$TAG" | ssh "$HOST" 'mkdir -p ~/fjerkroa_bot && tar -x -C ~/fjerkroa_bot'
|
|
|
|
ssh "$HOST" "set -e
|
|
[ -x ~/venv-bot/bin/python ] || python3.11 -m venv ~/venv-bot
|
|
~/venv-bot/bin/pip install -q --upgrade pip
|
|
~/venv-bot/bin/pip install -q ~/fjerkroa_bot
|
|
printf '#!/bin/sh\ncd %s/fjerkroa_bot || exit 1\nexec %s/venv-bot/bin/python -m fjerkroa_bot --config $CONFIG\n' \"\$HOME\" \"\$HOME\" > ~/fjerkroa_bot/start.sh
|
|
chmod +x ~/fjerkroa_bot/start.sh
|
|
~/venv-bot/bin/python -c 'import fjerkroa_bot'
|
|
find ~/fjerkroa_bot -maxdepth 3 -name bot.db | while read -r db; do cp \"\$db\" \"\$db.pre-$TAG\"; done # DEP-03
|
|
supervisorctl restart $SERVICE"
|
|
|
|
echo "== waiting for startsecs =="
|
|
sleep 35
|
|
|
|
# Smoke (DEP-04)
|
|
ssh "$HOST" "supervisorctl status $SERVICE | grep -q RUNNING" \
|
|
|| { echo "SMOKE FAIL: $SERVICE not RUNNING on $HOST — rollback: deploy.sh $HOST <previous-tag> (DEP-06)" >&2; exit 1; }
|
|
ssh "$HOST" "tail -80 ~/logs/supervisord.log | grep -q 'We have logged in as'" \
|
|
|| { echo "SMOKE FAIL: no fresh Discord login line on $HOST — check logs, consider rollback (DEP-06)" >&2; exit 1; }
|
|
|
|
echo "== OK: $HOST runs $TAG — RUNNING + logged in (DEP-04) =="
|