Merge canary and regenerate the migration at a free number

canary landed its own 0190 (0190_nappy_anita_blake), which collides with this
branch's 0190_even_mastermind. Renaming would not have been enough: drizzle
applies migrations by comparing timestamps against the last applied one, so this
branch's older `when` would have been silently skipped on any deployment that
had already run canary's 0190, leaving the enum without its new value.

Regenerated as 0191_elite_ultragirl with a current timestamp.
This commit is contained in:
Guillaume Juge
2026-09-02 08:58:09 +02:00
44 changed files with 11673 additions and 1369 deletions
+2
View File
@@ -237,12 +237,14 @@ export const apiDeployCompose = z.object({
composeId: z.string().min(1),
title: z.string().optional(),
description: z.string().optional(),
freshVolumes: z.boolean().optional(),
});
export const apiRedeployCompose = z.object({
composeId: z.string().min(1),
title: z.string().optional(),
description: z.string().optional(),
freshVolumes: z.boolean().optional(),
});
export const apiDeleteCompose = z.object({
+2
View File
@@ -73,6 +73,7 @@ export const user = pgTable("user", {
bookmarkedTemplates: text("bookmarkedTemplates")
.array()
.default(sql`ARRAY[]::text[]`),
onboardingCompletedAt: timestamp("onboardingCompletedAt"),
});
export const usersRelations = relations(user, ({ one, many }) => ({
@@ -97,6 +98,7 @@ const createSchema = createInsertSchema(user, {
bookmarkedTemplates: true,
isValidEnterpriseLicense: true,
isEnterpriseCloud: true,
onboardingCompletedAt: true,
});
export const apiCreateUserInvitation = createSchema.pick({}).extend({
+24
View File
@@ -229,10 +229,12 @@ export const deployCompose = async ({
composeId,
titleLog = "Manual deployment",
descriptionLog = "",
freshVolumes = false,
}: {
composeId: string;
titleLog: string;
descriptionLog: string;
freshVolumes?: boolean;
}) => {
const compose = await findComposeById(composeId);
@@ -286,6 +288,16 @@ export const deployCompose = async ({
}
}
if (freshVolumes && compose.composeType === "docker-compose") {
const downCommand = `set -e; env -i PATH="$PATH" docker compose -p ${compose.appName} down --volumes 2>&1 || true;`;
const downWithLog = `(${downCommand}) >> ${deployment.logPath} 2>&1`;
if (compose.serverId) {
await execAsyncRemote(compose.serverId, downWithLog);
} else {
await execAsync(downWithLog);
}
}
command = "set -e;";
command += await getBuildComposeCommand(entity);
commandWithLog = `(${command}) >> ${deployment.logPath} 2>&1`;
@@ -359,10 +371,12 @@ export const rebuildCompose = async ({
composeId,
titleLog = "Rebuild deployment",
descriptionLog = "",
freshVolumes = false,
}: {
composeId: string;
titleLog: string;
descriptionLog: string;
freshVolumes?: boolean;
}) => {
const compose = await findComposeById(composeId);
@@ -400,6 +414,16 @@ export const rebuildCompose = async ({
}
}
if (freshVolumes && compose.composeType === "docker-compose") {
const downCommand = `set -e; env -i PATH="$PATH" docker compose -p ${compose.appName} down --volumes 2>&1 || true;`;
const downWithLog = `(${downCommand}) >> ${deployment.logPath} 2>&1`;
if (compose.serverId) {
await execAsyncRemote(compose.serverId, downWithLog);
} else {
await execAsync(downWithLog);
}
}
command = "set -e;";
command += await getBuildComposeCommand(compose);
commandWithLog = `(${command}) >> ${deployment.logPath} 2>&1`;
@@ -26,11 +26,7 @@ export const getDockerCommand = (application: ApplicationNested) => {
try {
const image = `${appName}`;
const defaultContextPath =
dockerFilePath.substring(0, dockerFilePath.lastIndexOf("/") + 1) || ".";
const dockerContextPath =
getDockerContextPath(application) || defaultContextPath;
const dockerContextPath = getDockerContextPath(application);
const commandArgs = ["build", "-t", image, "-f", dockerFilePath, "."];
@@ -138,8 +138,10 @@ export const getDockerContextPath = (application: Application) => {
const { APPLICATIONS_PATH } = paths(!!application.serverId);
const { appName, dockerContextPath } = application;
if (!dockerContextPath) {
return null;
}
return path.join(APPLICATIONS_PATH, appName, "code", dockerContextPath);
return path.join(
APPLICATIONS_PATH,
appName,
"code",
dockerContextPath || ".",
);
};