67 lines
1.5 KiB
JavaScript
67 lines
1.5 KiB
JavaScript
#!/usr/bin/env node
|
|||
|
|
/**
|
||
|
|
* Cross-platform goose migrate + sqlc generate (Windows / macOS / Linux).
|
||
|
|
* Loads monorepo-root `.env` when DATABASE_URL is unset.
|
||
|
|
*
|
||
|
|
* Usage: node scripts/migrate.mjs
|
||
|
|
*/
|
||
|
|
import { spawnSync } from "node:child_process";
|
||
|
|
import path from "node:path";
|
||
|
|
import { loadRootEnv, repoRoot } from "./root-env.mjs";
|
||
|
|
|
||
|
|
const env = loadRootEnv(process.env);
|
||
|
|
if (!env.DATABASE_URL) {
|
||
|
|
console.error(
|
||
|
|
"DATABASE_URL is required (set in monorepo-root .env or the shell; see .env.example)",
|
||
|
|
);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
const apiDir = path.join(repoRoot, "apps", "api");
|
||
|
|
|
||
|
|
function run(command, args, opts = {}) {
|
||
|
|
const r = spawnSync(command, args, {
|
||
|
|
cwd: apiDir,
|
||
|
|
env,
|
||
|
|
stdio: "inherit",
|
||
|
|
shell: process.platform === "win32",
|
||
|
|
...opts,
|
||
|
|
});
|
||
|
|
if (r.error) {
|
||
|
|
console.error(r.error.message);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
if (r.status !== 0) {
|
||
|
|
process.exit(r.status ?? 1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log("==> goose up (apps/api/sql/schema)");
|
||
|
|
run("go", [
|
||
|
|
"run",
|
||
|
|
"github.com/pressly/goose/v3/cmd/goose@v3.24.3",
|
||
|
|
"-dir",
|
||
|
|
"sql/schema",
|
||
|
|
"postgres",
|
||
|
|
env.DATABASE_URL,
|
||
|
|
"up",
|
||
|
|
]);
|
||
|
|
|
||
|
|
console.log("==> sqlc generate");
|
||
|
|
const sqlc = spawnSync("sqlc", ["generate"], {
|
||
|
|
cwd: apiDir,
|
||
|
|
env,
|
||
|
|
stdio: "inherit",
|
||
|
|
shell: process.platform === "win32",
|
||
|
|
});
|
||
|
|
if (sqlc.status !== 0) {
|
||
|
|
console.log("sqlc not on PATH (or failed); using go run");
|
||
|
|
run("go", [
|
||
|
|
"run",
|
||
|
|
"github.com/sqlc-dev/sqlc/cmd/sqlc@v1.28.0",
|
||
|
|
"generate",
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log("==> done");
|