From d0b87131488c57c0e8977f4b276d28df8725196d Mon Sep 17 00:00:00 2001 From: Antigravity Date: Sat, 16 May 2026 22:26:43 +0000 Subject: [PATCH] ci: dump prod DB before each migration with size check --- .gitea/workflows/deploy.yaml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index 79f2e57..5491fb8 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -142,6 +142,17 @@ jobs: echo "=== Create vector extension ===" docker compose exec -T postgres psql -U "${POSTGRES_USER:-memento}" -d "${POSTGRES_DB:-memento}" -c "CREATE EXTENSION IF NOT EXISTS vector;" + echo "=== Dump database before migration ===" + DUMP_FILE="/opt/memento/backups/pre-migrate-$(date +%Y%m%d-%H%M%S).sql.gz" + mkdir -p /opt/memento/backups + docker compose exec -T postgres pg_dump -U "${POSTGRES_USER:-memento}" -d "${POSTGRES_DB:-memento}" --clean --if-exists | gzip > "$DUMP_FILE" + DUMP_SIZE=$(stat -c%s "$DUMP_FILE") + if [ "$DUMP_SIZE" -lt 1048576 ]; then + echo "ERROR: Dump is only $DUMP_SIZE bytes (< 1MB). Aborting deploy!" + exit 1 + fi + echo "Backup saved: $DUMP_FILE ($(( DUMP_SIZE / 1024 ))KB)" + echo "=== Resolve failed prisma migrations ===" docker compose exec -T postgres psql -U "${POSTGRES_USER:-memento}" -d "${POSTGRES_DB:-memento}" -c "UPDATE \"_prisma_migrations\" SET \"finished_at\"=NOW(), \"rolled_back_at\"=NULL WHERE \"finished_at\" IS NULL AND \"rolled_back_at\" IS NULL;" || true @@ -203,4 +214,8 @@ jobs: - name: Cleanup if: always() - run: ssh root@192.168.1.190 "docker image prune -f" || true + run: | + ssh root@192.168.1.190 << 'ENDSSH' + docker image prune -f + cd /opt/memento/backups 2>/dev/null && ls -t pre-migrate-*.sql.gz | tail -n +11 | xargs -r rm -f && echo "Old backups cleaned" || true + ENDSSH