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;
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 hasHuskyOrBiome =
addons?.includes("husky") || addons?.includes("biome");
@@ -253,7 +258,7 @@ async function getDatabaseInstructions(
);
instructions.push(
`${pc.cyan("4.")} Generate migrations: ${pc.white(
`cd apps/server && ${packageManager} db:generate`,
`cd apps/server && ${runCmd} db:generate`,
)}`,
);
instructions.push(
@@ -269,6 +274,11 @@ async function getDatabaseInstructions(
}
if (dbSetup === "d1" && serverDeploy === "alchemy") {
instructions.push(
`${pc.yellow(
"NOTE:",
)} D1 migrations are automatically handled by Alchemy`,
);
}
if (orm === "prisma") {
@@ -293,7 +303,11 @@ async function getDatabaseInstructions(
);
}
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") {
if (dbSetup === "docker") {
instructions.push(
@@ -303,7 +317,11 @@ async function getDatabaseInstructions(
if (dbSetup !== "d1") {
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") {
instructions.push(
`${pc.cyan(
@@ -394,15 +412,15 @@ function getAlchemyDeployInstructions(
if (webDeploy === "alchemy" && serverDeploy !== "alchemy") {
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") {
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") {
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) {
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") {
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") {
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") {
@@ -98,17 +104,23 @@ async function updateRootPackageJson(
}
if (needsDbScripts) {
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") {
scripts["db:generate"] =
`pnpm --filter ${backendPackageName} db:generate`;
scripts["db:migrate"] =
`pnpm --filter ${backendPackageName} db:migrate`;
if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] =
`pnpm --filter ${backendPackageName} db:migrate`;
}
} else if (options.orm === "drizzle") {
scripts["db:generate"] =
`pnpm --filter ${backendPackageName} db:generate`;
scripts["db:migrate"] =
`pnpm --filter ${backendPackageName} db:migrate`;
if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] =
`pnpm --filter ${backendPackageName} db:migrate`;
}
}
}
if (options.dbSetup === "docker") {
@@ -130,18 +142,24 @@ async function updateRootPackageJson(
}
if (needsDbScripts) {
scripts["db:push"] = `npm run db:push --workspace ${backendPackageName}`;
scripts["db:studio"] =
`npm run db:studio --workspace ${backendPackageName}`;
if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:studio"] =
`npm run db:studio --workspace ${backendPackageName}`;
}
if (options.orm === "prisma") {
scripts["db:generate"] =
`npm run db:generate --workspace ${backendPackageName}`;
scripts["db:migrate"] =
`npm run db:migrate --workspace ${backendPackageName}`;
if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] =
`npm run db:migrate --workspace ${backendPackageName}`;
}
} else if (options.orm === "drizzle") {
scripts["db:generate"] =
`npm run db:generate --workspace ${backendPackageName}`;
scripts["db:migrate"] =
`npm run db:migrate --workspace ${backendPackageName}`;
if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] =
`npm run db:migrate --workspace ${backendPackageName}`;
}
}
}
if (options.dbSetup === "docker") {
@@ -164,17 +182,24 @@ async function updateRootPackageJson(
}
if (needsDbScripts) {
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") {
scripts["db:generate"] =
`bun run --filter ${backendPackageName} db:generate`;
scripts["db:migrate"] =
`bun run --filter ${backendPackageName} db:migrate`;
if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] =
`bun run --filter ${backendPackageName} db:migrate`;
}
} else if (options.orm === "drizzle") {
scripts["db:generate"] =
`bun run --filter ${backendPackageName} db:generate`;
scripts["db:migrate"] =
`bun run --filter ${backendPackageName} db:migrate`;
if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] =
`bun run --filter ${backendPackageName} db:migrate`;
}
}
}
if (options.dbSetup === "docker") {
@@ -249,14 +274,22 @@ async function updateServerPackageJson(
if (options.orm === "prisma") {
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:migrate"] = "prisma migrate dev";
if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] = "prisma migrate dev";
}
} else if (options.orm === "drizzle") {
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:migrate"] = "drizzle-kit migrate";
if (!(options.dbSetup === "d1" && options.serverDeploy === "alchemy")) {
scripts["db:migrate"] = "drizzle-kit migrate";
}
}
}