#!/usr/bin/env bash # retoor 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"