Feat: Improvements to the migrations CLI and workflow (#8060)
This commit is contained in:
@@ -1,16 +1,19 @@
|
||||
import Logger from "../loaders/logger"
|
||||
import { migrateMedusaApp, revertMedusaApp } from "../loaders/medusa-app"
|
||||
import { initializeContainer } from "../loaders"
|
||||
import { ContainerRegistrationKeys } from "@medusajs/utils"
|
||||
import { ContainerRegistrationKeys, MedusaError } from "@medusajs/utils"
|
||||
import { getResolvedPlugins } from "../loaders/helpers/resolve-plugins"
|
||||
import { resolvePluginsLinks } from "../loaders/helpers/resolve-plugins-links"
|
||||
|
||||
const TERMINAL_SIZE = process.stdout.columns
|
||||
|
||||
const main = async function ({ directory }) {
|
||||
const args = process.argv
|
||||
args.shift()
|
||||
args.shift()
|
||||
args.shift()
|
||||
|
||||
const action = args[0]
|
||||
const container = await initializeContainer(directory)
|
||||
|
||||
const configModule = container.resolve(
|
||||
@@ -20,21 +23,55 @@ const main = async function ({ directory }) {
|
||||
const plugins = getResolvedPlugins(directory, configModule, true) || []
|
||||
const pluginLinks = await resolvePluginsLinks(plugins, container)
|
||||
|
||||
if (args[0] === "run") {
|
||||
if (action === "run") {
|
||||
Logger.info("Running migrations...")
|
||||
|
||||
await migrateMedusaApp({
|
||||
configModule,
|
||||
linkModules: pluginLinks,
|
||||
container,
|
||||
})
|
||||
|
||||
Logger.info("Migrations completed.")
|
||||
console.log(new Array(TERMINAL_SIZE).join("-"))
|
||||
Logger.info("Migrations completed")
|
||||
process.exit()
|
||||
} else if (args[0] === "revert") {
|
||||
await revertMedusaApp({ configModule, linkModules: pluginLinks, container })
|
||||
} else if (action === "revert") {
|
||||
const modulesToRevert = args.slice(1)
|
||||
if (!modulesToRevert.length) {
|
||||
Logger.error(
|
||||
"Please provide the modules for which you want to revert migrations"
|
||||
)
|
||||
Logger.error(`For example: "npx medusa migration revert <moduleName>"`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
Logger.info("Migrations reverted.")
|
||||
} else if (args[0] === "show") {
|
||||
Logger.info("not supported")
|
||||
Logger.info("Reverting migrations...")
|
||||
|
||||
try {
|
||||
await revertMedusaApp({
|
||||
modulesToRevert,
|
||||
configModule,
|
||||
linkModules: pluginLinks,
|
||||
container,
|
||||
})
|
||||
console.log(new Array(TERMINAL_SIZE).join("-"))
|
||||
Logger.info("Migrations reverted")
|
||||
process.exit()
|
||||
} catch (error) {
|
||||
console.log(new Array(TERMINAL_SIZE).join("-"))
|
||||
if (error.code && error.code === MedusaError.Codes.UNKNOWN_MODULES) {
|
||||
Logger.error(error.message)
|
||||
const modulesList = error.allModules.map(
|
||||
(name: string) => ` - ${name}`
|
||||
)
|
||||
Logger.error(`Available modules:\n${modulesList.join("\n")}`)
|
||||
} else {
|
||||
Logger.error(error.message, error)
|
||||
}
|
||||
process.exit(1)
|
||||
}
|
||||
} else if (action === "show") {
|
||||
Logger.info("Action not supported yet")
|
||||
process.exit(0)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ export function mergeDefaultModules(
|
||||
async function runMedusaAppMigrations({
|
||||
configModule,
|
||||
container,
|
||||
moduleNames,
|
||||
revert = false,
|
||||
linkModules,
|
||||
}: {
|
||||
@@ -69,8 +70,16 @@ async function runMedusaAppMigrations({
|
||||
}
|
||||
linkModules?: MedusaAppOptions["linkModules"]
|
||||
container: MedusaContainer
|
||||
revert?: boolean
|
||||
}): Promise<void> {
|
||||
} & (
|
||||
| {
|
||||
moduleNames?: never
|
||||
revert: false
|
||||
}
|
||||
| {
|
||||
moduleNames: string[]
|
||||
revert: true
|
||||
}
|
||||
)): Promise<void> {
|
||||
const injectedDependencies = {
|
||||
[ContainerRegistrationKeys.PG_CONNECTION]: container.resolve(
|
||||
ContainerRegistrationKeys.PG_CONNECTION
|
||||
@@ -93,7 +102,7 @@ async function runMedusaAppMigrations({
|
||||
const configModules = mergeDefaultModules(configModule.modules)
|
||||
|
||||
if (revert) {
|
||||
await MedusaAppMigrateDown({
|
||||
await MedusaAppMigrateDown(moduleNames!, {
|
||||
modulesConfig: configModules,
|
||||
sharedContainer: container,
|
||||
linkModules,
|
||||
@@ -111,6 +120,12 @@ async function runMedusaAppMigrations({
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param configModule The config module
|
||||
* @param linkModules Custom links from the plugins
|
||||
* @param container The medusa container
|
||||
*/
|
||||
export async function migrateMedusaApp({
|
||||
configModule,
|
||||
linkModules,
|
||||
@@ -127,14 +142,25 @@ export async function migrateMedusaApp({
|
||||
configModule,
|
||||
container,
|
||||
linkModules,
|
||||
revert: false,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param modulesToRevert An array of modules for which you want to revert
|
||||
* migrations
|
||||
* @param configModule The config module
|
||||
* @param linkModules Custom links from the plugins
|
||||
* @param container The medusa container
|
||||
*/
|
||||
export async function revertMedusaApp({
|
||||
modulesToRevert,
|
||||
configModule,
|
||||
linkModules,
|
||||
container,
|
||||
}: {
|
||||
modulesToRevert: string[]
|
||||
configModule: {
|
||||
modules?: CommonTypes.ConfigModule["modules"]
|
||||
projectConfig: CommonTypes.ConfigModule["projectConfig"]
|
||||
@@ -143,6 +169,7 @@ export async function revertMedusaApp({
|
||||
linkModules?: MedusaAppOptions["linkModules"]
|
||||
}): Promise<void> {
|
||||
await runMedusaAppMigrations({
|
||||
moduleNames: modulesToRevert,
|
||||
configModule,
|
||||
container,
|
||||
revert: true,
|
||||
|
||||
Reference in New Issue
Block a user