Feat: Improvements to the migrations CLI and workflow (#8060)

This commit is contained in:
Harminder Virk
2024-07-11 16:52:34 +05:30
committed by GitHub
parent bb0303cd6a
commit 45c573b03a
10 changed files with 257 additions and 144 deletions
+45 -8
View File
@@ -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)
}
}
+30 -3
View File
@@ -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,