graphile-migrate
Version:
Opinionated SQL-powered migration tool for PostgreSQL
66 lines • 3.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const actions_1 = require("../actions");
const migration_1 = require("../migration");
const pg_1 = require("../pg");
const pgReal_1 = require("../pgReal");
const settings_1 = require("../settings");
const _common_1 = require("./_common");
async function _migrate(parsedSettings, shadow = false, forceActions = false) {
const connectionString = shadow
? parsedSettings.shadowConnectionString
: parsedSettings.connectionString;
if (!connectionString) {
throw new Error("Could not determine connection string");
}
const logSuffix = shadow ? "[shadow]" : "";
await pg_1.withClient(connectionString, parsedSettings, async (pgClient, context) => {
await pgReal_1.withAdvisoryLock(pgClient, async () => {
const lastMigration = await migration_1.getLastMigration(pgClient, parsedSettings);
const remainingMigrations = await migration_1.getMigrationsAfter(parsedSettings, lastMigration);
const shouldExecuteActions = remainingMigrations.length > 0 || forceActions;
if (shouldExecuteActions) {
await actions_1.executeActions(parsedSettings, shadow, parsedSettings.beforeAllMigrations);
}
// Run migrations in series
for (const migration of remainingMigrations) {
await migration_1.runCommittedMigration(pgClient, parsedSettings, context, migration, logSuffix);
}
if (shouldExecuteActions) {
await actions_1.executeActions(parsedSettings, shadow, parsedSettings.afterAllMigrations);
}
parsedSettings.logger.info(`graphile-migrate${logSuffix}: ${remainingMigrations.length > 0
? `${remainingMigrations.length} committed migrations executed`
: lastMigration
? "Already up to date"
: `Up to date — no committed migrations to run`}`);
});
});
}
exports._migrate = _migrate;
async function migrate(settings, shadow = false, forceActions = false) {
const parsedSettings = await settings_1.parseSettings(settings, shadow);
return _migrate(parsedSettings, shadow, forceActions);
}
exports.migrate = migrate;
exports.migrateCommand = {
command: "migrate",
aliases: [],
describe: "Runs any un-executed committed migrations. Does NOT run the current migration. For use in production and development.",
builder: {
shadow: {
type: "boolean",
default: false,
description: "Apply migrations to the shadow DB (for development).",
},
forceActions: {
type: "boolean",
default: false,
description: "Run beforeAllMigrations and afterAllMigrations actions even if no migration was necessary.",
},
},
handler: async (argv) => {
await migrate(await _common_1.getSettings({ configFile: argv.config }), argv.shadow, argv.forceActions);
},
};
//# sourceMappingURL=migrate.js.map