Commit the first migration, and apply schema the same way everywhere
`drizzle/` was gitignored, so every environment re-derived the schema from src/db/schema and nothing recorded what a given release expected. That is survivable while nothing is deployed and a problem the moment something is. The generated migration is now committed: four tables, three enums, five foreign keys, and the per-farm unique index on gateway_printer_id. It needed one hand-added line to be usable on its own. drizzle-kit does not emit extension statements, but frame_embeddings.embedding is vector(512) with an ivfflat index, so as generated the migration only applied to a database somebody had already run `CREATE EXTENSION vector` on - which was true locally precisely because dev-env.sh does that, and would not have been true on a fresh deploy. `CREATE EXTENSION IF NOT EXISTS vector` now leads the file, and it survives regeneration: drizzle only appends new migrations, and the diffing snapshot lives in meta/0000_snapshot.json rather than in the SQL. Verified by dropping the database, recreating it with no extensions at all (`pg_extension` count 0), and running db:migrate: the extension and all four tables were created, `db:generate` then reported no pending changes, and the e2e script still passed against both live printers on the result. `dev-env.sh schema` now runs `migrate` instead of `push`, so a local database and a deployed one get the schema by the same route - testing `push` locally while production runs `migrate` tests two different things. `push` is still available as its own command for iterating on a table that is still moving, with a comment about what it does not record.
This commit is contained in:
+18
-7
@@ -24,7 +24,8 @@
|
||||
# scripts/dev-env.sh reset stop them AND delete all data
|
||||
# scripts/dev-env.sh status what is running, and which backend
|
||||
# scripts/dev-env.sh psql open a shell on the database
|
||||
# scripts/dev-env.sh schema apply the Drizzle schema (drizzle-kit push)
|
||||
# scripts/dev-env.sh schema apply the committed migrations (drizzle-kit migrate)
|
||||
# scripts/dev-env.sh push reshape the db from src/db/schema, no migration
|
||||
# scripts/dev-env.sh env print the DATABASE_URL/VALKEY_URL to use
|
||||
set -euo pipefail
|
||||
|
||||
@@ -204,12 +205,21 @@ cmd_status() { case "$(backend)" in docker) echo "backend: docker"; sudo docker
|
||||
cmd_psql() { PGPASSWORD=continuum psql -h localhost -p "$PG_PORT" -U continuum -d continuum "$@"; }
|
||||
cmd_env() { echo "DATABASE_URL=$DEV_DATABASE_URL"; echo "VALKEY_URL=$DEV_VALKEY_URL"; }
|
||||
|
||||
# Applies the committed migrations in drizzle/, the same way a deploy would.
|
||||
# This is the default because it is the path that has to work in production -
|
||||
# testing `push` locally and `migrate` in production tests two different things.
|
||||
cmd_schema() {
|
||||
# `push` rather than generate+migrate: no migrations are committed and the
|
||||
# schema is still moving. Switch once it settles - push diffs the live
|
||||
# database against the schema and will happily drop a column, which is fine
|
||||
# locally and nowhere else.
|
||||
echo "==> applying the Drizzle schema to $DEV_DATABASE_URL"
|
||||
echo "==> applying committed migrations to $DEV_DATABASE_URL"
|
||||
DATABASE_URL="$DEV_DATABASE_URL" bunx drizzle-kit migrate
|
||||
}
|
||||
|
||||
# Diffs the live database against src/db/schema and reshapes it in place, with
|
||||
# no migration file. Faster while iterating on the schema, and destructive: it
|
||||
# will drop a column to make the database match. Local only - and whatever it
|
||||
# does is not recorded anywhere, so run `bun run db:generate` before committing
|
||||
# a schema change made this way.
|
||||
cmd_push() {
|
||||
echo "==> pushing src/db/schema straight onto $DEV_DATABASE_URL"
|
||||
DATABASE_URL="$DEV_DATABASE_URL" bunx drizzle-kit push --force
|
||||
}
|
||||
|
||||
@@ -220,6 +230,7 @@ case "${1:-}" in
|
||||
status) cmd_status ;;
|
||||
psql) shift; cmd_psql "$@" ;;
|
||||
schema) cmd_schema ;;
|
||||
push) cmd_push ;;
|
||||
env) cmd_env ;;
|
||||
*) sed -n '2,30p' "${BASH_SOURCE[0]}" | sed 's/^# \?//'; exit 1 ;;
|
||||
*) awk 'NR>1 && /^#/ { sub(/^# ?/, ""); print; next } NR>1 { exit }' "${BASH_SOURCE[0]}"; exit 1 ;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user