|
| 1 | +#!/usr/bin/env bash |
| 2 | +set -euo pipefail |
| 3 | + |
| 4 | +# Reset the preview Supabase database using linked mode |
| 5 | +# (--linked mode knows about Supabase-managed extensions like pg_cron) |
| 6 | + |
| 7 | +cd "$(dirname "$0")/.." |
| 8 | + |
| 9 | +# Source env |
| 10 | +set -a; source .env.preview; set +a |
| 11 | + |
| 12 | +echo "🗑️ Resetting preview database..." |
| 13 | +echo " Project: $SUPABASE_PROJECT_REF" |
| 14 | + |
| 15 | +# Clean up pgmq queues while extension is still intact |
| 16 | +# This prevents orphaned tables after db reset drops the extension |
| 17 | +echo "🧹 Cleaning up pgmq queues..." |
| 18 | +if ! psql "$SUPABASE_DB_URL" -q -c "SELECT pgmq.drop_queue(queue_name) FROM pgmq.list_queues();" 2>/dev/null; then |
| 19 | + echo " (no queues to clean up or pgmq not available - continuing)" |
| 20 | +fi |
| 21 | + |
| 22 | +# Link to the project (uses SUPABASE_ACCESS_TOKEN for auth) |
| 23 | +echo "🔗 Linking to project..." |
| 24 | +SUPABASE_ACCESS_TOKEN="$SUPABASE_ACCESS_TOKEN" pnpm supabase link --project-ref "$SUPABASE_PROJECT_REF" |
| 25 | + |
| 26 | +# Reset using linked mode (respects Supabase-managed extensions) |
| 27 | +pnpm supabase db reset --linked --yes |
| 28 | + |
| 29 | +# Set up vault secrets and register worker function |
| 30 | +# - Secrets needed for ensure_workers cron to make HTTP calls to edge functions |
| 31 | +# - Worker registration so cron knows to keep article_flow_worker alive |
| 32 | +echo "🔐 Setting up vault secrets and registering worker..." |
| 33 | + |
| 34 | +# Use psql's -v for safe variable passing (prevents SQL injection) |
| 35 | +# ON_ERROR_STOP ensures heredoc errors propagate correctly with set -e |
| 36 | +if ! psql "$SUPABASE_DB_URL" -q \ |
| 37 | + -v ON_ERROR_STOP=1 \ |
| 38 | + -v service_role_key="$SUPABASE_SERVICE_ROLE_KEY" \ |
| 39 | + -v project_ref="$SUPABASE_PROJECT_REF" \ |
| 40 | + <<'EOSQL' |
| 41 | +DELETE FROM vault.secrets WHERE name IN ('supabase_service_role_key', 'supabase_project_id'); |
| 42 | +SELECT vault.create_secret(:'service_role_key', 'supabase_service_role_key'); |
| 43 | +SELECT vault.create_secret(:'project_ref', 'supabase_project_id'); |
| 44 | +SELECT pgflow.track_worker_function('article_flow_worker'); |
| 45 | +EOSQL |
| 46 | +then |
| 47 | + echo "❌ Failed to set up vault secrets and register worker" |
| 48 | + exit 1 |
| 49 | +fi |
| 50 | + |
| 51 | +echo "" |
| 52 | +echo "✅ Preview database reset complete!" |
0 commit comments