diff --git a/apps/api/src/schema.ts b/apps/api/src/schema.ts index 609289bf7..f87d0ee32 100644 --- a/apps/api/src/schema.ts +++ b/apps/api/src/schema.ts @@ -3,8 +3,8 @@ import { z } from "zod"; export const deployJobSchema = z.discriminatedUnion("applicationType", [ z.object({ applicationId: z.string(), - titleLog: z.string(), - descriptionLog: z.string(), + titleLog: z.string().optional(), + descriptionLog: z.string().optional(), server: z.boolean().optional(), type: z.enum(["deploy", "redeploy"]), applicationType: z.literal("application"), @@ -12,8 +12,8 @@ export const deployJobSchema = z.discriminatedUnion("applicationType", [ }), z.object({ composeId: z.string(), - titleLog: z.string(), - descriptionLog: z.string(), + titleLog: z.string().optional(), + descriptionLog: z.string().optional(), server: z.boolean().optional(), type: z.enum(["deploy", "redeploy"]), applicationType: z.literal("compose"), @@ -22,8 +22,8 @@ export const deployJobSchema = z.discriminatedUnion("applicationType", [ z.object({ applicationId: z.string(), previewDeploymentId: z.string(), - titleLog: z.string(), - descriptionLog: z.string(), + titleLog: z.string().optional(), + descriptionLog: z.string().optional(), server: z.boolean().optional(), type: z.enum(["deploy"]), applicationType: z.literal("application-preview"), diff --git a/apps/api/src/utils.ts b/apps/api/src/utils.ts index ee3943d34..ee2ac3e50 100644 --- a/apps/api/src/utils.ts +++ b/apps/api/src/utils.ts @@ -18,14 +18,14 @@ export const deploy = async (job: DeployJob) => { if (job.type === "redeploy") { await rebuildRemoteApplication({ applicationId: job.applicationId, - titleLog: job.titleLog, - descriptionLog: job.descriptionLog, + titleLog: job.titleLog || "Rebuild deployment", + descriptionLog: job.descriptionLog || "", }); } else if (job.type === "deploy") { await deployRemoteApplication({ applicationId: job.applicationId, - titleLog: job.titleLog, - descriptionLog: job.descriptionLog, + titleLog: job.titleLog || "Manual deployment", + descriptionLog: job.descriptionLog || "", }); } } @@ -38,14 +38,14 @@ export const deploy = async (job: DeployJob) => { if (job.type === "redeploy") { await rebuildRemoteCompose({ composeId: job.composeId, - titleLog: job.titleLog, - descriptionLog: job.descriptionLog, + titleLog: job.titleLog || "Rebuild deployment", + descriptionLog: job.descriptionLog || "", }); } else if (job.type === "deploy") { await deployRemoteCompose({ composeId: job.composeId, - titleLog: job.titleLog, - descriptionLog: job.descriptionLog, + titleLog: job.titleLog || "Manual deployment", + descriptionLog: job.descriptionLog || "", }); } } @@ -57,8 +57,8 @@ export const deploy = async (job: DeployJob) => { if (job.type === "deploy") { await deployRemotePreviewApplication({ applicationId: job.applicationId, - titleLog: job.titleLog, - descriptionLog: job.descriptionLog, + titleLog: job.titleLog || "Preview Deployment", + descriptionLog: job.descriptionLog || "", previewDeploymentId: job.previewDeploymentId, }); } diff --git a/apps/dokploy/server/api/routers/application.ts b/apps/dokploy/server/api/routers/application.ts index b89637de3..bddae6887 100644 --- a/apps/dokploy/server/api/routers/application.ts +++ b/apps/dokploy/server/api/routers/application.ts @@ -40,8 +40,10 @@ import { import { db } from "@/server/db"; import { apiCreateApplication, + apiDeployApplication, apiFindMonitoringStats, apiFindOneApplication, + apiRedeployApplication, apiReloadApplication, apiSaveBitbucketProvider, apiSaveBuildType, @@ -306,7 +308,7 @@ export const applicationRouter = createTRPCRouter({ }), redeploy: protectedProcedure - .input(apiFindOneApplication) + .input(apiRedeployApplication) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( @@ -320,8 +322,8 @@ export const applicationRouter = createTRPCRouter({ } const jobData: DeploymentJob = { applicationId: input.applicationId, - titleLog: "Rebuild deployment", - descriptionLog: "", + titleLog: input.title || "Rebuild deployment", + descriptionLog: input.description || "", type: "redeploy", applicationType: "application", server: !!application.serverId, @@ -670,7 +672,7 @@ export const applicationRouter = createTRPCRouter({ return true; }), deploy: protectedProcedure - .input(apiFindOneApplication) + .input(apiDeployApplication) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); if ( @@ -684,8 +686,8 @@ export const applicationRouter = createTRPCRouter({ } const jobData: DeploymentJob = { applicationId: input.applicationId, - titleLog: "Manual deployment", - descriptionLog: "", + titleLog: input.title || "Manual deployment", + descriptionLog: input.description || "", type: "deploy", applicationType: "application", server: !!application.serverId, diff --git a/apps/dokploy/server/api/routers/compose.ts b/apps/dokploy/server/api/routers/compose.ts index f84da9bc6..2f9984183 100644 --- a/apps/dokploy/server/api/routers/compose.ts +++ b/apps/dokploy/server/api/routers/compose.ts @@ -48,9 +48,11 @@ import { db } from "@/server/db"; import { apiCreateCompose, apiDeleteCompose, + apiDeployCompose, apiFetchServices, apiFindCompose, apiRandomizeCompose, + apiRedeployCompose, apiUpdateCompose, compose as composeTable, } from "@/server/db/schema"; @@ -367,7 +369,7 @@ export const composeRouter = createTRPCRouter({ }), deploy: protectedProcedure - .input(apiFindCompose) + .input(apiDeployCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); @@ -382,10 +384,10 @@ export const composeRouter = createTRPCRouter({ } const jobData: DeploymentJob = { composeId: input.composeId, - titleLog: "Manual deployment", + titleLog: input.title || "Manual deployment", type: "deploy", applicationType: "compose", - descriptionLog: "", + descriptionLog: input.description || "", server: !!compose.serverId, }; @@ -404,7 +406,7 @@ export const composeRouter = createTRPCRouter({ ); }), redeploy: protectedProcedure - .input(apiFindCompose) + .input(apiRedeployCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); if ( @@ -418,10 +420,10 @@ export const composeRouter = createTRPCRouter({ } const jobData: DeploymentJob = { composeId: input.composeId, - titleLog: "Rebuild deployment", + titleLog: input.title || "Rebuild deployment", type: "redeploy", applicationType: "compose", - descriptionLog: "", + descriptionLog: input.description || "", server: !!compose.serverId, }; if (IS_CLOUD && compose.serverId) { diff --git a/packages/server/src/db/schema/application.ts b/packages/server/src/db/schema/application.ts index 42e958e4e..6d176e737 100644 --- a/packages/server/src/db/schema/application.ts +++ b/packages/server/src/db/schema/application.ts @@ -328,6 +328,26 @@ export const apiFindOneApplication = createSchema }) .required(); +export const apiDeployApplication = createSchema + .pick({ + applicationId: true, + }) + .extend({ + applicationId: z.string().min(1), + title: z.string().optional(), + description: z.string().optional(), + }); + +export const apiRedeployApplication = createSchema + .pick({ + applicationId: true, + }) + .extend({ + applicationId: z.string().min(1), + title: z.string().optional(), + description: z.string().optional(), + }); + export const apiReloadApplication = createSchema .pick({ appName: true, diff --git a/packages/server/src/db/schema/compose.ts b/packages/server/src/db/schema/compose.ts index 2d75e511a..958c2c32c 100644 --- a/packages/server/src/db/schema/compose.ts +++ b/packages/server/src/db/schema/compose.ts @@ -181,6 +181,18 @@ export const apiFindCompose = z.object({ composeId: z.string().min(1), }); +export const apiDeployCompose = z.object({ + composeId: z.string().min(1), + title: z.string().optional(), + description: z.string().optional(), +}); + +export const apiRedeployCompose = z.object({ + composeId: z.string().min(1), + title: z.string().optional(), + description: z.string().optional(), +}); + export const apiDeleteCompose = z.object({ composeId: z.string().min(1), deleteVolumes: z.boolean(),