Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions packages/cli/src/actions/action-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
7 changes: 6 additions & 1 deletion packages/cli/src/actions/migrate.ts
Original file line number Diff line number Diff line change
@@ -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 & {
Expand All @@ -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) {
Expand Down Expand Up @@ -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);
Expand Down
5 changes: 5 additions & 0 deletions packages/cli/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,31 +60,36 @@ export function createProgram() {
.action(generateAction);

const migrateCommand = program.command('migrate').description('Update the database schema with migrations.');
const migrationsOption = new Option('--migrations <path>', 'path for migrations');

migrateCommand
.command('dev')
.addOption(schemaOption)
.addOption(new Option('-n, --name <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));

migrateCommand
.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));

Expand Down