fix(db): desacopla configuracao administrativa das migrations
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
93f280621b
commit
8cfeeb0464
7 files changed
+356
-29
No files matched your search
+47
-22
@@ -1,28 +1,53 @@
|
||||
import { identityShimEnabled } from "../src/config/env";
|
||||
import { migrate, pendingMigrations } from "../src/infra/db/migrate";
|
||||
import { bootstrapScript, describeTarget, runWithDb } from "./_bootstrap";
|
||||
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";
|
||||
|
||||
/**
|
||||
* Aplica as migrations pendentes. `--dry-run` apenas lista: usado no pipeline
|
||||
* antes do passo manual de migração, para que ninguém descubra o que vai rodar
|
||||
* só depois de ter rodado.
|
||||
* 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");
|
||||
|
||||
bootstrapScript("migrate");
|
||||
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 pending = await pendingMigrations(db);
|
||||
console.log(`alvo: ${describeTarget()}`);
|
||||
console.log(`shim de identidade: ${identityShimEnabled() ? "SERÁ aplicado" : "NÃO será aplicado"}`);
|
||||
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");
|
||||
});
|
||||
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");
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user