feat(scripts): add db.sh wrapper and stubs for plans 2/4
This commit is contained in:
parent
cd50aa1415
commit
3c3b5165b8
69
scripts/db.sh
Executable file
69
scripts/db.sh
Executable file
@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Drizzle migration helper. Always runs inside the tools container.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
Drizzle migration helper.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
scripts/db.sh migrate Apply pending migrations to DATABASE_URL.
|
||||||
|
scripts/db.sh generate Generate a new migration from schema changes.
|
||||||
|
scripts/db.sh studio Open drizzle-kit studio (port 4983 in container, exposed on host).
|
||||||
|
scripts/db.sh seed Seed dev data (operator row).
|
||||||
|
scripts/db.sh reset Drop and recreate ALL tables (dev only).
|
||||||
|
|
||||||
|
Environment:
|
||||||
|
ENV_FILE Override env file (default: .env.development).
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
cd "${ROOT_DIR}"
|
||||||
|
|
||||||
|
ENV_FILE="${ENV_FILE:-.env.development}"
|
||||||
|
if [[ ! -f "${ENV_FILE}" ]]; then
|
||||||
|
echo "ERROR: ${ENV_FILE} not found." >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Load env locally just to read DATABASE_URL for the prod-DB safety check.
|
||||||
|
set -a
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
source "${ENV_FILE}"
|
||||||
|
set +a
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
-h|--help) usage ;;
|
||||||
|
migrate)
|
||||||
|
exec scripts/dev.sh pnpm --filter @cmbot/db migrate
|
||||||
|
;;
|
||||||
|
generate)
|
||||||
|
exec scripts/dev.sh pnpm --filter @cmbot/db generate
|
||||||
|
;;
|
||||||
|
studio)
|
||||||
|
exec scripts/dev.sh pnpm --filter @cmbot/db studio
|
||||||
|
;;
|
||||||
|
seed)
|
||||||
|
exec scripts/dev.sh pnpm --filter @cmbot/db seed
|
||||||
|
;;
|
||||||
|
reset)
|
||||||
|
if [[ "${DATABASE_URL}" == *whatsapp_bot_prod* ]]; then
|
||||||
|
echo "ERROR: refusing to reset prod database." >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
read -r -p "About to DROP all tables in ${DATABASE_URL}. Type 'yes' to continue: " confirm
|
||||||
|
[[ "${confirm}" == "yes" ]] || { echo "Aborted."; exit 1; }
|
||||||
|
scripts/dev.sh exec sh -c "pnpm exec tsx -e \"
|
||||||
|
import { Pool } from 'pg';
|
||||||
|
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
||||||
|
await pool.query(\\\"DROP SCHEMA public CASCADE; CREATE SCHEMA public;\\\");
|
||||||
|
await pool.query(\\\"DROP SCHEMA IF EXISTS pgboss CASCADE;\\\");
|
||||||
|
await pool.end();
|
||||||
|
console.log('Schema reset.');
|
||||||
|
\""
|
||||||
|
exec scripts/dev.sh pnpm --filter @cmbot/db migrate
|
||||||
|
;;
|
||||||
|
"") usage >&2; exit 1 ;;
|
||||||
|
*) echo "Unknown command: $1" >&2; usage >&2; exit 1 ;;
|
||||||
|
esac
|
||||||
3
scripts/link-account.sh
Executable file
3
scripts/link-account.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
echo "scripts/link-account.sh: not yet implemented (see plan 2)" >&2
|
||||||
|
exit 1
|
||||||
3
scripts/publish.sh
Executable file
3
scripts/publish.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
echo "scripts/publish.sh: not yet implemented (see plan 4)" >&2
|
||||||
|
exit 1
|
||||||
Loading…
x
Reference in New Issue
Block a user