chore(ci): add workspace and db guardrails
This commit is contained in:
+5
-20
@@ -1,10 +1,10 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import { URL } from "node:url";
|
||||
import { loadWorkspaceEnv, resolveWorkspaceEnvPaths } from "./load-env.mjs";
|
||||
import { getExpectedDatabaseName, inspectDatabaseUrl } from "./db-target-guard.mjs";
|
||||
|
||||
const loadedEnvPaths = loadWorkspaceEnv();
|
||||
const expectedDatabase = process.argv[2] ?? "capakraken";
|
||||
const expectedDatabase = process.argv[2] ?? getExpectedDatabaseName();
|
||||
const rawUrl = process.env.DATABASE_URL;
|
||||
const expectedEnvSources = loadedEnvPaths.length > 0
|
||||
? loadedEnvPaths.join(", ")
|
||||
@@ -15,25 +15,10 @@ if (!rawUrl) {
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
let parsed;
|
||||
try {
|
||||
parsed = new URL(rawUrl);
|
||||
const result = inspectDatabaseUrl(rawUrl, expectedDatabase);
|
||||
console.log(`DB target OK: ${result.target}`);
|
||||
} catch (error) {
|
||||
console.error(`DATABASE_URL is invalid: ${error instanceof Error ? error.message : String(error)}`);
|
||||
console.error(error instanceof Error ? error.message : String(error));
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const databaseName = parsed.pathname.replace(/^\/+/, "");
|
||||
const target = `${parsed.protocol}//${decodeURIComponent(parsed.username)}@${parsed.hostname}${parsed.port ? `:${parsed.port}` : ""}/${databaseName}`;
|
||||
|
||||
if (!databaseName) {
|
||||
console.error(`DATABASE_URL does not contain a database name. Target=${target}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (databaseName !== expectedDatabase) {
|
||||
console.error(`Unexpected database target '${databaseName}'. Expected '${expectedDatabase}'. Target=${target}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log(`DB target OK: ${target}`);
|
||||
|
||||
Reference in New Issue
Block a user