Files
ad/bin/staging-refresh.sh

25 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# retoor <retoor@molodetz.nl>
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
SRC="${1:-$ROOT/data/production}"
DEST="$ROOT/data/staging"
WORK="$(mktemp -d)"
trap 'rm -rf "$WORK"' EXIT
test -f "$SRC/molodetz.db" || { echo "no database at $SRC/molodetz.db"; exit 1; }
test -d "$DEST" || { echo "no staging data dir at $DEST"; exit 1; }
python3 -c "import sqlite3; s = sqlite3.connect('$SRC/molodetz.db'); d = sqlite3.connect('$WORK/molodetz.db'); s.backup(d); s.close(); d.close()"
for sub in uploads keys seo_reports; do
if [ -d "$SRC/$sub" ]; then cp -a "$SRC/$sub" "$WORK/"; fi
done
CHECK="$(python3 -c "import sqlite3; c = sqlite3.connect('file:$WORK/molodetz.db?mode=ro', uri=True); print(c.execute('pragma integrity_check').fetchone()[0])")"
test "$CHECK" = "ok" || { echo "snapshot integrity check failed: $CHECK"; exit 1; }
cd "$ROOT"
docker compose stop web
rm -rf "$DEST/molodetz.db-wal" "$DEST/molodetz.db-shm" "$DEST/molodetz.db" "$DEST/uploads" "$DEST/keys" "$DEST/seo_reports"
cp -a "$WORK/." "$DEST/"
docker compose up -d web
for i in $(seq 1 60); do curl -fs http://127.0.0.1:19847/health >/dev/null && break; sleep 1; done
curl -fs http://127.0.0.1:19847/health
echo "staging refreshed from $SRC"