From 88bba910dfeffd560432783f7a74b67125109b0a Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Fri, 11 Jul 2025 14:28:55 +0800 Subject: [PATCH 1/3] feat(cli): add --migrations option to migration commands --- packages/cli/src/actions/action-utils.ts | 8 ++++++-- packages/cli/src/actions/migrate.ts | 7 ++++++- packages/cli/src/index.ts | 5 +++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/actions/action-utils.ts b/packages/cli/src/actions/action-utils.ts index 2712e9cf..3099b15a 100644 --- a/packages/cli/src/actions/action-utils.ts +++ b/packages/cli/src/actions/action-utils.ts @@ -53,10 +53,14 @@ export function handleSubProcessError(err: unknown) { } } -export async function generateTempPrismaSchema(zmodelPath: string) { +export async function generateTempPrismaSchema(zmodelPath: string, folder?: string) { const model = await loadSchemaDocument(zmodelPath); const prismaSchema = await new PrismaSchemaGenerator(model).generate(); - const prismaSchemaFile = path.resolve(path.dirname(zmodelPath), '~schema.prisma'); + if (!folder) { + folder = path.dirname(zmodelPath); + } + const prismaSchemaFile = path.resolve(folder, '~schema.prisma'); + console.log('Writing prisma schema to:', prismaSchemaFile); fs.writeFileSync(prismaSchemaFile, prismaSchema); return prismaSchemaFile; } diff --git a/packages/cli/src/actions/migrate.ts b/packages/cli/src/actions/migrate.ts index bb13956d..7335cc14 100644 --- a/packages/cli/src/actions/migrate.ts +++ b/packages/cli/src/actions/migrate.ts @@ -1,9 +1,11 @@ import fs from 'node:fs'; +import path from 'node:path'; import { execPackage } from '../utils/exec-utils'; import { generateTempPrismaSchema, getSchemaFile } from './action-utils'; type CommonOptions = { schema?: string; + migrations?: string; }; type DevOptions = CommonOptions & { @@ -24,7 +26,9 @@ type StatusOptions = CommonOptions; */ export async function run(command: string, options: CommonOptions) { const schemaFile = getSchemaFile(options.schema); - const prismaSchemaFile = await generateTempPrismaSchema(schemaFile); + const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined; + const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir); + console.log('prisma schema file:', prismaSchemaFile); try { switch (command) { @@ -91,6 +95,7 @@ async function runDeploy(prismaSchemaFile: string, _options: DeployOptions) { async function runStatus(prismaSchemaFile: string, _options: StatusOptions) { try { + console.log(`prisma migrate status --schema "${prismaSchemaFile}"`); await execPackage(`prisma migrate status --schema "${prismaSchemaFile}"`); } catch (err) { handleSubProcessError(err); diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 61013bfe..d75cff32 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -60,12 +60,14 @@ export function createProgram() { .action(generateAction); const migrateCommand = program.command('migrate').description('Update the database schema with migrations.'); + const migrationsOption = new Option('--migrations ', 'path for migrations'); migrateCommand .command('dev') .addOption(schemaOption) .addOption(new Option('-n, --name ', 'migration name')) .addOption(new Option('--create-only', 'only create migration, do not apply')) + .addOption(migrationsOption) .description('Create a migration from changes in schema and apply it to the database.') .action((options) => migrateAction('dev', options)); @@ -73,18 +75,21 @@ export function createProgram() { .command('reset') .addOption(schemaOption) .addOption(new Option('--force', 'skip the confirmation prompt')) + .addOption(migrationsOption) .description('Reset your database and apply all migrations, all data will be lost.') .action((options) => migrateAction('reset', options)); migrateCommand .command('deploy') .addOption(schemaOption) + .addOption(migrationsOption) .description('Deploy your pending migrations to your production/staging database.') .action((options) => migrateAction('deploy', options)); migrateCommand .command('status') .addOption(schemaOption) + .addOption(migrationsOption) .description('check the status of your database migrations.') .action((options) => migrateAction('status', options)); From 3246ced3ef49c22a5ab5424bfcad8c61f62f13b0 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Fri, 11 Jul 2025 14:52:28 +0800 Subject: [PATCH 2/3] update --- packages/cli/src/actions/action-utils.ts | 1 - packages/cli/src/actions/migrate.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/cli/src/actions/action-utils.ts b/packages/cli/src/actions/action-utils.ts index 3099b15a..6bc0f46e 100644 --- a/packages/cli/src/actions/action-utils.ts +++ b/packages/cli/src/actions/action-utils.ts @@ -60,7 +60,6 @@ export async function generateTempPrismaSchema(zmodelPath: string, folder?: stri folder = path.dirname(zmodelPath); } const prismaSchemaFile = path.resolve(folder, '~schema.prisma'); - console.log('Writing prisma schema to:', prismaSchemaFile); fs.writeFileSync(prismaSchemaFile, prismaSchema); return prismaSchemaFile; } diff --git a/packages/cli/src/actions/migrate.ts b/packages/cli/src/actions/migrate.ts index 7335cc14..9dca1462 100644 --- a/packages/cli/src/actions/migrate.ts +++ b/packages/cli/src/actions/migrate.ts @@ -28,7 +28,6 @@ export async function run(command: string, options: CommonOptions) { const schemaFile = getSchemaFile(options.schema); const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined; const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir); - console.log('prisma schema file:', prismaSchemaFile); try { switch (command) { From 80df324070b7972d778e5ac3456fcd6d154540ca Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Fri, 11 Jul 2025 14:53:06 +0800 Subject: [PATCH 3/3] update --- packages/cli/src/actions/migrate.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli/src/actions/migrate.ts b/packages/cli/src/actions/migrate.ts index 9dca1462..6a667a16 100644 --- a/packages/cli/src/actions/migrate.ts +++ b/packages/cli/src/actions/migrate.ts @@ -94,7 +94,6 @@ async function runDeploy(prismaSchemaFile: string, _options: DeployOptions) { async function runStatus(prismaSchemaFile: string, _options: StatusOptions) { try { - console.log(`prisma migrate status --schema "${prismaSchemaFile}"`); await execPackage(`prisma migrate status --schema "${prismaSchemaFile}"`); } catch (err) { handleSubProcessError(err);