🌳
pt0/deployF/dbF/guardPendingMigrationsAI.mts
8const getQsNameFromAppCfg = (appCfg: Record<string, any>): string | undefined => {
9 if (appCfg.dbQsCfg?.dbQsName) return appCfg.dbQsCfg.dbQsName
10 const dbSecrets = appCfg.envConf?.dbSecrets
11 if (dbSecrets) {
12 const primaryQs = dbSecrets.db
13 if (typeof primaryQs === 'string' && primaryQs.endsWith('_qs')) return primaryQs
14 }
15 const secretsMapping = appCfg.envConf?.secretsMapping
16 if (secretsMapping) {
17 const defaultQs = secretsMapping.defaultdb_qs
18 if (typeof defaultQs === 'string' && defaultQs.endsWith('_qs')) return defaultQs
19 }
22export const guardPendingMigrations = async ({appCfg}: {appCfg: Record<string, any>}) => {
23 if (cliFlag('--skipMigrationCheck')) return
24 const qsName = getQsNameFromAppCfg(appCfg)
25 if (!qsName) return
26 const dbEps = getDbEntrypointsByQsName(qsName)
27 if (!dbEps.length) return
28 const dbEpPath = ptDir + '/' + dbEps[0].regEpPath
29 let dbEpCfg: { migrationOpts: Record<string, unknown> }
30 try {
31 const imported = await import(dbEpPath) as { dbEpCfg: { migrationOpts: Record<string, unknown> } }
32 dbEpCfg = imported.dbEpCfg
33 } catch (err) {
34 throw new Error(`guardPendingMigrations: failed to import dbEpCfg from ${dbEpPath}: ${err}\nUse --skipMigrationCheck to bypass`)
35 }
36 if (!dbEpCfg?.migrationOpts) return
37 let pending: any[]
38 try {
39 setEnvConf(appCfg.envConf)
40 pending = await withDb(async ({db}) => {
41 const [, result] = await (db as import('knex').Knex).migrate.list(dbEpCfg.migrationOpts)
42 return result
43 }, {reuseConn: false})
44 } catch (err) {
45 throw new Error(`guardPendingMigrations: failed to check migration status for ${qsName}: ${err}\nUse --skipMigrationCheck to bypass`)
46 } finally {
47 portForwardMgr.teardown()
48 }
49 if (pending?.length) {
50 const pendingNames = pending.map((m: any) => m.file || m.name || m).join('\n - ')
51 throw new Error(
52 `${pending.length} pending migration(s) must be applied before deploying:\n - ${pendingNames}\n\nRun: ptnode ${dbEps[0].regEpPath} migrate\nOr: --skipMigrationCheck`
53 )
54 }