63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
/**
|
|
* Ensures the baseline migration is marked as applied for databases
|
|
* that were created with `drizzle-kit push` before we switched to
|
|
* file-based migrations. Safe to run on fresh databases (no-op).
|
|
*/
|
|
import postgres from "postgres";
|
|
import { readFileSync } from "fs";
|
|
import { createHash } from "crypto";
|
|
import { resolve } from "path";
|
|
|
|
const sql = postgres(process.env.DATABASE_URL!);
|
|
|
|
try {
|
|
// Check if any application tables exist (indicator of a push-created DB)
|
|
const [{ exists: tablesExist }] = await sql`
|
|
SELECT EXISTS (
|
|
SELECT FROM information_schema.tables
|
|
WHERE table_schema = 'public' AND table_name = 'paragraphs'
|
|
) as exists
|
|
`;
|
|
|
|
if (!tablesExist) {
|
|
console.log("Fresh database — baseline seeding not needed.");
|
|
await sql.end();
|
|
process.exit(0);
|
|
}
|
|
|
|
// Ensure the drizzle schema + migrations table exist
|
|
await sql`CREATE SCHEMA IF NOT EXISTS drizzle`;
|
|
await sql`
|
|
CREATE TABLE IF NOT EXISTS drizzle.__drizzle_migrations (
|
|
id serial PRIMARY KEY,
|
|
hash text NOT NULL,
|
|
created_at bigint
|
|
)
|
|
`;
|
|
|
|
// Check if any migrations are already recorded
|
|
const [{ count }] = await sql`
|
|
SELECT count(*)::int as count FROM drizzle.__drizzle_migrations
|
|
`;
|
|
|
|
if (Number(count) > 0) {
|
|
console.log("Migration history already exists — baseline seeding not needed.");
|
|
await sql.end();
|
|
process.exit(0);
|
|
}
|
|
|
|
// Compute hash of the baseline migration and insert it
|
|
const baselinePath = resolve(import.meta.dirname!, "../drizzle/0000_baseline.sql");
|
|
const content = readFileSync(baselinePath, "utf-8");
|
|
const hash = createHash("sha256").update(content).digest("hex");
|
|
|
|
await sql`
|
|
INSERT INTO drizzle.__drizzle_migrations (hash, created_at)
|
|
VALUES (${hash}, ${Date.now()})
|
|
`;
|
|
|
|
console.log("Baseline migration marked as applied (push → migrate transition).");
|
|
} finally {
|
|
await sql.end();
|
|
}
|