53 lines
1.4 KiB
Bash
Executable File
53 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
PG_APP="blade-and-brawn-db"
|
|
API_APP="blade-and-brawn-api"
|
|
LOCAL_PORT=5433
|
|
|
|
proxy_pid=""
|
|
cleanup() {
|
|
if [[ -n "$proxy_pid" ]]; then
|
|
kill "$proxy_pid" 2>/dev/null || true
|
|
fi
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
echo "Fetching production DATABASE_URL from $API_APP..." >&2
|
|
prod_url=$(fly ssh console -a "$API_APP" -C "printenv DATABASE_URL" 2>/dev/null | grep -m1 '^postgres')
|
|
if [[ -z "$prod_url" ]]; then
|
|
echo "Failed to fetch DATABASE_URL from $API_APP" >&2
|
|
exit 1
|
|
fi
|
|
tunneled_url=$(echo "$prod_url" | sed -E "s#@[^/]+/#@localhost:${LOCAL_PORT}/#")
|
|
|
|
echo "Starting tunnel to $PG_APP on localhost:${LOCAL_PORT}..." >&2
|
|
fly proxy "${LOCAL_PORT}:5432" -a "$PG_APP" &
|
|
proxy_pid=$!
|
|
|
|
echo "Waiting for tunnel..." >&2
|
|
for _ in $(seq 1 30); do
|
|
nc -z localhost "$LOCAL_PORT" 2>/dev/null && break
|
|
sleep 0.5
|
|
done
|
|
|
|
target="${1:-migrate}"
|
|
|
|
case "$target" in
|
|
migrate)
|
|
DATABASE_URL="$tunneled_url" bun run --filter @blade-and-brawn/api db:migrate:latest
|
|
;;
|
|
seed)
|
|
DATABASE_URL="$tunneled_url" bun run --filter @blade-and-brawn/api db:seed
|
|
;;
|
|
both)
|
|
DATABASE_URL="$tunneled_url" bun run --filter @blade-and-brawn/api db:migrate:latest
|
|
DATABASE_URL="$tunneled_url" bun run --filter @blade-and-brawn/api db:seed
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [migrate|seed|both]" >&2
|
|
exit 1
|
|
;;
|
|
esac
|