54 lines
2.0 KiB
TypeScript
54 lines
2.0 KiB
TypeScript
import { adapterEnv, identityShimEnabled } from "../src/config/env";
|
|
import { exitOnInvalidMigrationConfig } from "../src/config/fail-fast";
|
|
import {
|
|
assertManifestMatches,
|
|
listMigrationFiles,
|
|
migrate,
|
|
pendingMigrations,
|
|
readMigrationLedger,
|
|
} from "../src/infra/db/migrate";
|
|
import { bootstrapScript, describeTarget, runScript, runWithDb } from "./_bootstrap";
|
|
|
|
/**
|
|
* Três modos, separados de propósito:
|
|
* - `--plan` lista o manifesto no disco e não abre banco.
|
|
* - `--dry-run` lê `schema_migrations` e não aplica SQL.
|
|
* - sem flag, aplica o lote pendente numa transação.
|
|
*/
|
|
const plan = process.argv.includes("--plan");
|
|
const dryRun = process.argv.includes("--dry-run");
|
|
|
|
if (plan) {
|
|
runScript("migrate", async () => {
|
|
const files = await listMigrationFiles();
|
|
assertManifestMatches(files);
|
|
console.log(`plano estatico offline: ${files.join(", ")}`);
|
|
});
|
|
} else {
|
|
if (adapterEnv() === "staging") exitOnInvalidMigrationConfig(process.env);
|
|
else if (adapterEnv() === "production") {
|
|
console.error(
|
|
"[adaptador-planilhas] Configuração administrativa recusada. ADAPTER_ENV: migrate administrativo de homologação exige staging",
|
|
);
|
|
process.exit(1);
|
|
} else bootstrapScript("migrate");
|
|
|
|
runWithDb("migrate", "admin", async (db) => {
|
|
const ledger = await readMigrationLedger(db);
|
|
const pending = await pendingMigrations(db);
|
|
console.log(`alvo: ${adapterEnv() === "staging" ? "postgres administrativo" : describeTarget()}`);
|
|
console.log(`shim de identidade: ${identityShimEnabled() ? "SERÁ aplicado" : "NÃO será aplicado"}`);
|
|
if (ledger.state === "ausente") console.log("historico: ausente; schema_migrations nao foi criada");
|
|
if (pending.length === 0) {
|
|
console.log("migrations: nada pendente");
|
|
return;
|
|
}
|
|
if (dryRun) {
|
|
console.log(`migrations pendentes (dry-run, nada aplicado): ${pending.join(", ")}`);
|
|
return;
|
|
}
|
|
const ran = await migrate(db);
|
|
console.log(ran.length ? `migrations aplicadas: ${ran.join(", ")}` : "migrations: nada pendente");
|
|
});
|
|
}
|