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