fix(migrate): resolve migrations dir alongside or above the script
When esbuild bundles migrate.ts to apps/web/migrate.mjs (one directory higher than the source location), the relative `..` path in the previous implementation pointed at apps/, not apps/web/. Try both layouts and allow an explicit MIGRATIONS_DIR override. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -5,13 +5,31 @@
|
|||||||
* features we need (pgvector, generated columns), so we manage migration
|
* features we need (pgvector, generated columns), so we manage migration
|
||||||
* state ourselves in `_migrations` and apply files as plain SQL.
|
* state ourselves in `_migrations` and apply files as plain SQL.
|
||||||
*/
|
*/
|
||||||
|
import { existsSync } from "node:fs";
|
||||||
import { readFile, readdir } from "node:fs/promises";
|
import { readFile, readdir } from "node:fs/promises";
|
||||||
import { dirname, join } from "node:path";
|
import { dirname, join } from "node:path";
|
||||||
import { fileURLToPath } from "node:url";
|
import { fileURLToPath } from "node:url";
|
||||||
import postgres from "postgres";
|
import postgres from "postgres";
|
||||||
|
|
||||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||||
const MIGRATIONS_DIR = join(__dirname, "..", "drizzle");
|
|
||||||
|
// Resolve the migrations directory. Try, in order:
|
||||||
|
// 1. $MIGRATIONS_DIR env override (explicit deploy-time control)
|
||||||
|
// 2. `<script>/drizzle` — production: migrate.mjs sits alongside drizzle/
|
||||||
|
// 3. `<script>/../drizzle` — dev: scripts/migrate.ts has drizzle/ one up
|
||||||
|
function findMigrationsDir(): string {
|
||||||
|
if (process.env.MIGRATIONS_DIR) return process.env.MIGRATIONS_DIR;
|
||||||
|
const sibling = join(__dirname, "drizzle");
|
||||||
|
if (existsSync(sibling)) return sibling;
|
||||||
|
const parent = join(__dirname, "..", "drizzle");
|
||||||
|
if (existsSync(parent)) return parent;
|
||||||
|
throw new Error(
|
||||||
|
`Couldn't locate migrations directory (tried ${sibling}, ${parent}). ` +
|
||||||
|
`Set MIGRATIONS_DIR to override.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const MIGRATIONS_DIR = findMigrationsDir();
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const url = process.env.DATABASE_URL;
|
const url = process.env.DATABASE_URL;
|
||||||
|
|||||||
Reference in New Issue
Block a user