fix(cli): improve Alchemy deployment and D1 scripts

This commit is contained in:
Aman Varshney
2025-08-23 16:23:02 +05:30
parent bd1b2f4f72
commit 3c9811b053
2 changed files with 81 additions and 30 deletions

View File

@@ -29,7 +29,12 @@ export async function displayPostInstallInstructions(
} = config; } = config;
const isConvex = backend === "convex"; const isConvex = backend === "convex";
const runCmd = packageManager === "npm" ? "npm run" : packageManager; const runCmd =
packageManager === "npm"
? "npm run"
: packageManager === "pnpm"
? "pnpm run"
: "bun run";
const cdCmd = `cd ${relativePath}`; const cdCmd = `cd ${relativePath}`;
const hasHuskyOrBiome = const hasHuskyOrBiome =
addons?.includes("husky") || addons?.includes("biome"); addons?.includes("husky") || addons?.includes("biome");
@@ -253,7 +258,7 @@ async function getDatabaseInstructions(
); );
instructions.push( instructions.push(
`${pc.cyan("4.")} Generate migrations: ${pc.white( `${pc.cyan("4.")} Generate migrations: ${pc.white(
`cd apps/server && ${packageManager} db:generate`, `cd apps/server && ${runCmd} db:generate`,
)}`, )}`,
); );
instructions.push( instructions.push(
@@ -269,6 +274,11 @@ async function getDatabaseInstructions(
} }
if (dbSetup === "d1" && serverDeploy === "alchemy") { if (dbSetup === "d1" && serverDeploy === "alchemy") {
instructions.push(
`${pc.yellow(
"NOTE:",
)} D1 migrations are automatically handled by Alchemy`,
);
} }
if (orm === "prisma") { if (orm === "prisma") {
@@ -293,7 +303,11 @@ async function getDatabaseInstructions(
); );
} }
instructions.push(`${pc.cyan("•")} Apply schema: ${`${runCmd} db:push`}`); instructions.push(`${pc.cyan("•")} Apply schema: ${`${runCmd} db:push`}`);
instructions.push(`${pc.cyan("•")} Database UI: ${`${runCmd} db:studio`}`); if (!(dbSetup === "d1" && serverDeploy === "alchemy")) {
instructions.push(
`${pc.cyan("•")} Database UI: ${`${runCmd} db:studio`}`,
);
}
} else if (orm === "drizzle") { } else if (orm === "drizzle") {
if (dbSetup === "docker") { if (dbSetup === "docker") {
instructions.push( instructions.push(
@@ -303,7 +317,11 @@ async function getDatabaseInstructions(
if (dbSetup !== "d1") { if (dbSetup !== "d1") {
instructions.push(`${pc.cyan("•")} Apply schema: ${`${runCmd} db:push`}`); instructions.push(`${pc.cyan("•")} Apply schema: ${`${runCmd} db:push`}`);
} }
instructions.push(`${pc.cyan("•")} Database UI: ${`${runCmd} db:studio`}`); if (!(dbSetup === "d1" && serverDeploy === "alchemy")) {
instructions.push(
`${pc.cyan("•")} Database UI: ${`${runCmd} db:studio`}`,
);
}
if (database === "sqlite" && dbSetup !== "d1") { if (database === "sqlite" && dbSetup !== "d1") {
instructions.push( instructions.push(
`${pc.cyan( `${pc.cyan(
@@ -394,15 +412,15 @@ function getAlchemyDeployInstructions(
if (webDeploy === "alchemy" && serverDeploy !== "alchemy") { if (webDeploy === "alchemy" && serverDeploy !== "alchemy") {
instructions.push( instructions.push(
`${pc.bold("Deploy web to Alchemy:")}\n${pc.cyan("•")} Deploy: ${`cd apps/web && ${runCmd} deploy`}`, `${pc.bold("Deploy web with Alchemy:")}\n${pc.cyan("•")} Dev: ${`cd apps/web && ${runCmd} alchemy:dev`}\n${pc.cyan("•")} Deploy: ${`cd apps/web && ${runCmd} deploy`}\n${pc.cyan("•")} Destroy: ${`cd apps/web && ${runCmd} destroy`}`,
); );
} else if (serverDeploy === "alchemy" && webDeploy !== "alchemy") { } else if (serverDeploy === "alchemy" && webDeploy !== "alchemy") {
instructions.push( instructions.push(
`${pc.bold("Deploy server to Alchemy:")}\n${pc.cyan("•")} Deploy: ${`cd apps/server && ${runCmd} deploy`}`, `${pc.bold("Deploy server with Alchemy:")}\n${pc.cyan("•")} Dev: ${`cd apps/server && ${runCmd} alchemy:dev`}\n${pc.cyan("•")} Deploy: ${`cd apps/server && ${runCmd} deploy`}\n${pc.cyan("•")} Destroy: ${`cd apps/server && ${runCmd} destroy`}`,
); );
} else if (webDeploy === "alchemy" && serverDeploy === "alchemy") { } else if (webDeploy === "alchemy" && serverDeploy === "alchemy") {
instructions.push( instructions.push(
`${pc.bold("Deploy to Alchemy:")}\n${pc.cyan("•")} Deploy: ${`${runCmd} deploy`}`, `${pc.bold("Deploy with Alchemy:")}\n${pc.cyan("•")} Dev: ${`${runCmd} alchemy:dev`}\n${pc.cyan("•")} Deploy: ${`${runCmd} deploy`}\n${pc.cyan("•")} Destroy: ${`${runCmd} destroy`}`,
); );
} }

View File

@@ -71,13 +71,19 @@ async function updateRootPackageJson(
} }
if (needsDbScripts) { if (needsDbScripts) {
scripts["db:push"] = `turbo -F ${backendPackageName} db:push`; scripts["db:push"] = `turbo -F ${backendPackageName} db:push`;
scripts["db:studio"] = `turbo -F ${backendPackageName} db:studio`; if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:studio"] = `turbo -F ${backendPackageName} db:studio`;
}
if (options.orm === "prisma") { if (options.orm === "prisma") {
scripts["db:generate"] = `turbo -F ${backendPackageName} db:generate`; scripts["db:generate"] = `turbo -F ${backendPackageName} db:generate`;
scripts["db:migrate"] = `turbo -F ${backendPackageName} db:migrate`; if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] = `turbo -F ${backendPackageName} db:migrate`;
}
} else if (options.orm === "drizzle") { } else if (options.orm === "drizzle") {
scripts["db:generate"] = `turbo -F ${backendPackageName} db:generate`; scripts["db:generate"] = `turbo -F ${backendPackageName} db:generate`;
scripts["db:migrate"] = `turbo -F ${backendPackageName} db:migrate`; if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] = `turbo -F ${backendPackageName} db:migrate`;
}
} }
} }
if (options.dbSetup === "docker") { if (options.dbSetup === "docker") {
@@ -98,17 +104,23 @@ async function updateRootPackageJson(
} }
if (needsDbScripts) { if (needsDbScripts) {
scripts["db:push"] = `pnpm --filter ${backendPackageName} db:push`; scripts["db:push"] = `pnpm --filter ${backendPackageName} db:push`;
scripts["db:studio"] = `pnpm --filter ${backendPackageName} db:studio`; if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:studio"] = `pnpm --filter ${backendPackageName} db:studio`;
}
if (options.orm === "prisma") { if (options.orm === "prisma") {
scripts["db:generate"] = scripts["db:generate"] =
`pnpm --filter ${backendPackageName} db:generate`; `pnpm --filter ${backendPackageName} db:generate`;
scripts["db:migrate"] = if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
`pnpm --filter ${backendPackageName} db:migrate`; scripts["db:migrate"] =
`pnpm --filter ${backendPackageName} db:migrate`;
}
} else if (options.orm === "drizzle") { } else if (options.orm === "drizzle") {
scripts["db:generate"] = scripts["db:generate"] =
`pnpm --filter ${backendPackageName} db:generate`; `pnpm --filter ${backendPackageName} db:generate`;
scripts["db:migrate"] = if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
`pnpm --filter ${backendPackageName} db:migrate`; scripts["db:migrate"] =
`pnpm --filter ${backendPackageName} db:migrate`;
}
} }
} }
if (options.dbSetup === "docker") { if (options.dbSetup === "docker") {
@@ -130,18 +142,24 @@ async function updateRootPackageJson(
} }
if (needsDbScripts) { if (needsDbScripts) {
scripts["db:push"] = `npm run db:push --workspace ${backendPackageName}`; scripts["db:push"] = `npm run db:push --workspace ${backendPackageName}`;
scripts["db:studio"] = if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
`npm run db:studio --workspace ${backendPackageName}`; scripts["db:studio"] =
`npm run db:studio --workspace ${backendPackageName}`;
}
if (options.orm === "prisma") { if (options.orm === "prisma") {
scripts["db:generate"] = scripts["db:generate"] =
`npm run db:generate --workspace ${backendPackageName}`; `npm run db:generate --workspace ${backendPackageName}`;
scripts["db:migrate"] = if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
`npm run db:migrate --workspace ${backendPackageName}`; scripts["db:migrate"] =
`npm run db:migrate --workspace ${backendPackageName}`;
}
} else if (options.orm === "drizzle") { } else if (options.orm === "drizzle") {
scripts["db:generate"] = scripts["db:generate"] =
`npm run db:generate --workspace ${backendPackageName}`; `npm run db:generate --workspace ${backendPackageName}`;
scripts["db:migrate"] = if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
`npm run db:migrate --workspace ${backendPackageName}`; scripts["db:migrate"] =
`npm run db:migrate --workspace ${backendPackageName}`;
}
} }
} }
if (options.dbSetup === "docker") { if (options.dbSetup === "docker") {
@@ -164,17 +182,24 @@ async function updateRootPackageJson(
} }
if (needsDbScripts) { if (needsDbScripts) {
scripts["db:push"] = `bun run --filter ${backendPackageName} db:push`; scripts["db:push"] = `bun run --filter ${backendPackageName} db:push`;
scripts["db:studio"] = `bun run --filter ${backendPackageName} db:studio`; if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:studio"] =
`bun run --filter ${backendPackageName} db:studio`;
}
if (options.orm === "prisma") { if (options.orm === "prisma") {
scripts["db:generate"] = scripts["db:generate"] =
`bun run --filter ${backendPackageName} db:generate`; `bun run --filter ${backendPackageName} db:generate`;
scripts["db:migrate"] = if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
`bun run --filter ${backendPackageName} db:migrate`; scripts["db:migrate"] =
`bun run --filter ${backendPackageName} db:migrate`;
}
} else if (options.orm === "drizzle") { } else if (options.orm === "drizzle") {
scripts["db:generate"] = scripts["db:generate"] =
`bun run --filter ${backendPackageName} db:generate`; `bun run --filter ${backendPackageName} db:generate`;
scripts["db:migrate"] = if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
`bun run --filter ${backendPackageName} db:migrate`; scripts["db:migrate"] =
`bun run --filter ${backendPackageName} db:migrate`;
}
} }
} }
if (options.dbSetup === "docker") { if (options.dbSetup === "docker") {
@@ -249,14 +274,22 @@ async function updateServerPackageJson(
if (options.orm === "prisma") { if (options.orm === "prisma") {
scripts["db:push"] = "prisma db push"; scripts["db:push"] = "prisma db push";
scripts["db:studio"] = "prisma studio"; if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:studio"] = "prisma studio";
}
scripts["db:generate"] = "prisma generate"; scripts["db:generate"] = "prisma generate";
scripts["db:migrate"] = "prisma migrate dev"; if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] = "prisma migrate dev";
}
} else if (options.orm === "drizzle") { } else if (options.orm === "drizzle") {
scripts["db:push"] = "drizzle-kit push"; scripts["db:push"] = "drizzle-kit push";
scripts["db:studio"] = "drizzle-kit studio"; if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:studio"] = "drizzle-kit studio";
}
scripts["db:generate"] = "drizzle-kit generate"; scripts["db:generate"] = "drizzle-kit generate";
scripts["db:migrate"] = "drizzle-kit migrate"; if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] = "drizzle-kit migrate";
}
} }
} }