Add jobId to deployment flow for tracking deployments

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-12-31 06:04:25 +00:00
parent 2e0d444cb2
commit 240f0b6017
7 changed files with 45 additions and 9 deletions

View File

@@ -325,6 +325,7 @@ export const applicationRouter = createTRPCRouter({
message: "You are not authorized to redeploy this application",
});
}
const jobId = nanoid();
const jobData: DeploymentJob = {
applicationId: input.applicationId,
titleLog: input.title || "Rebuild deployment",
@@ -332,6 +333,7 @@ export const applicationRouter = createTRPCRouter({
type: "redeploy",
applicationType: "application",
server: !!application.serverId,
jobId,
};
if (IS_CLOUD && application.serverId) {
@@ -339,7 +341,7 @@ export const applicationRouter = createTRPCRouter({
deploy(jobData).catch((error) => {
console.error("Background deployment failed:", error);
});
return true;
return { jobId };
}
await myQueue.add(
"deployments",
@@ -349,6 +351,7 @@ export const applicationRouter = createTRPCRouter({
removeOnFail: true,
},
);
return { jobId };
}),
saveEnvironment: protectedProcedure
.input(apiSaveEnvironmentVariables)
@@ -693,6 +696,7 @@ export const applicationRouter = createTRPCRouter({
message: "You are not authorized to deploy this application",
});
}
const jobId = nanoid();
const jobData: DeploymentJob = {
applicationId: input.applicationId,
titleLog: input.title || "Manual deployment",
@@ -700,6 +704,7 @@ export const applicationRouter = createTRPCRouter({
type: "deploy",
applicationType: "application",
server: !!application.serverId,
jobId,
};
if (IS_CLOUD && application.serverId) {
jobData.serverId = application.serverId;
@@ -707,7 +712,7 @@ export const applicationRouter = createTRPCRouter({
console.error("Background deployment failed:", error);
});
return true;
return { jobId };
}
await myQueue.add(
"deployments",
@@ -717,6 +722,7 @@ export const applicationRouter = createTRPCRouter({
removeOnFail: true,
},
);
return { jobId };
}),
cleanQueues: protectedProcedure

View File

@@ -406,6 +406,7 @@ export const composeRouter = createTRPCRouter({
message: "You are not authorized to deploy this compose",
});
}
const jobId = nanoid();
const jobData: DeploymentJob = {
composeId: input.composeId,
titleLog: input.title || "Manual deployment",
@@ -413,6 +414,7 @@ export const composeRouter = createTRPCRouter({
applicationType: "compose",
descriptionLog: input.description || "",
server: !!compose.serverId,
jobId,
};
if (IS_CLOUD && compose.serverId) {
@@ -420,7 +422,7 @@ export const composeRouter = createTRPCRouter({
deploy(jobData).catch((error) => {
console.error("Background deployment failed:", error);
});
return true;
return { jobId };
}
await myQueue.add(
"deployments",
@@ -430,7 +432,7 @@ export const composeRouter = createTRPCRouter({
removeOnFail: true,
},
);
return { success: true, message: "Deployment queued" };
return { jobId };
}),
redeploy: protectedProcedure
.input(apiRedeployCompose)
@@ -445,6 +447,7 @@ export const composeRouter = createTRPCRouter({
message: "You are not authorized to redeploy this compose",
});
}
const jobId = nanoid();
const jobData: DeploymentJob = {
composeId: input.composeId,
titleLog: input.title || "Rebuild deployment",
@@ -452,13 +455,14 @@ export const composeRouter = createTRPCRouter({
applicationType: "compose",
descriptionLog: input.description || "",
server: !!compose.serverId,
jobId,
};
if (IS_CLOUD && compose.serverId) {
jobData.serverId = compose.serverId;
deploy(jobData).catch((error) => {
console.error("Background deployment failed:", error);
});
return true;
return { jobId };
}
await myQueue.add(
"deployments",
@@ -468,7 +472,7 @@ export const composeRouter = createTRPCRouter({
removeOnFail: true,
},
);
return { success: true, message: "Redeployment queued" };
return { jobId };
}),
stop: protectedProcedure
.input(apiFindCompose)

View File

@@ -24,12 +24,14 @@ export const deploymentWorker = new Worker(
applicationId: job.data.applicationId,
titleLog: job.data.titleLog,
descriptionLog: job.data.descriptionLog,
jobId: job.data.jobId,
});
} else if (job.data.type === "deploy") {
await deployApplication({
applicationId: job.data.applicationId,
titleLog: job.data.titleLog,
descriptionLog: job.data.descriptionLog,
jobId: job.data.jobId,
});
}
} else if (job.data.applicationType === "compose") {
@@ -41,12 +43,14 @@ export const deploymentWorker = new Worker(
composeId: job.data.composeId,
titleLog: job.data.titleLog,
descriptionLog: job.data.descriptionLog,
jobId: job.data.jobId,
});
} else if (job.data.type === "redeploy") {
await rebuildCompose({
composeId: job.data.composeId,
titleLog: job.data.titleLog,
descriptionLog: job.data.descriptionLog,
jobId: job.data.jobId,
});
}
} else if (job.data.applicationType === "application-preview") {
@@ -60,6 +64,7 @@ export const deploymentWorker = new Worker(
titleLog: job.data.titleLog,
descriptionLog: job.data.descriptionLog,
previewDeploymentId: job.data.previewDeploymentId,
jobId: job.data.jobId,
});
}
}

View File

@@ -7,6 +7,7 @@ type DeployJob =
type: "deploy" | "redeploy";
applicationType: "application";
serverId?: string;
jobId?: string;
}
| {
composeId: string;
@@ -16,6 +17,7 @@ type DeployJob =
type: "deploy" | "redeploy";
applicationType: "compose";
serverId?: string;
jobId?: string;
}
| {
applicationId: string;
@@ -26,6 +28,7 @@ type DeployJob =
applicationType: "application-preview";
previewDeploymentId: string;
serverId?: string;
jobId?: string;
};
export type DeploymentJob = DeployJob;

View File

@@ -167,10 +167,12 @@ export const deployApplication = async ({
applicationId,
titleLog = "Manual deployment",
descriptionLog = "",
jobId,
}: {
applicationId: string;
titleLog: string;
descriptionLog: string;
jobId?: string;
}) => {
const application = await findApplicationById(applicationId);
const serverId = application.buildServerId || application.serverId;
@@ -180,6 +182,7 @@ export const deployApplication = async ({
applicationId: applicationId,
title: titleLog,
description: descriptionLog,
jobId,
});
try {
@@ -270,10 +273,12 @@ export const rebuildApplication = async ({
applicationId,
titleLog = "Rebuild deployment",
descriptionLog = "",
jobId,
}: {
applicationId: string;
titleLog: string;
descriptionLog: string;
jobId?: string;
}) => {
const application = await findApplicationById(applicationId);
const serverId = application.buildServerId || application.serverId;
@@ -283,6 +288,7 @@ export const rebuildApplication = async ({
applicationId: applicationId,
title: titleLog,
description: descriptionLog,
jobId,
});
try {
@@ -337,11 +343,13 @@ export const deployPreviewApplication = async ({
titleLog = "Preview Deployment",
descriptionLog = "",
previewDeploymentId,
jobId,
}: {
applicationId: string;
titleLog: string;
descriptionLog: string;
previewDeploymentId: string;
jobId?: string;
}) => {
const application = await findApplicationById(applicationId);
@@ -349,6 +357,7 @@ export const deployPreviewApplication = async ({
title: titleLog,
description: descriptionLog,
previewDeploymentId: previewDeploymentId,
jobId,
});
const previewDeployment =

View File

@@ -205,10 +205,12 @@ export const deployCompose = async ({
composeId,
titleLog = "Manual deployment",
descriptionLog = "",
jobId,
}: {
composeId: string;
titleLog: string;
descriptionLog: string;
jobId?: string;
}) => {
const compose = await findComposeById(composeId);
@@ -219,6 +221,7 @@ export const deployCompose = async ({
composeId: composeId,
title: titleLog,
description: descriptionLog,
jobId,
});
try {
@@ -321,10 +324,12 @@ export const rebuildCompose = async ({
composeId,
titleLog = "Rebuild deployment",
descriptionLog = "",
jobId,
}: {
composeId: string;
titleLog: string;
descriptionLog: string;
jobId?: string;
}) => {
const compose = await findComposeById(composeId);
@@ -332,6 +337,7 @@ export const rebuildCompose = async ({
composeId: composeId,
title: titleLog,
description: descriptionLog,
jobId,
});
try {

View File

@@ -71,7 +71,7 @@ export const createDeployment = async (
deployment: Omit<
typeof apiCreateDeployment._type,
"deploymentId" | "createdAt" | "status" | "logPath"
>,
> & { jobId?: string },
) => {
const application = await findApplicationById(deployment.applicationId);
try {
@@ -107,6 +107,7 @@ export const createDeployment = async (
const deploymentCreate = await db
.insert(deployments)
.values({
...(deployment.jobId && { deploymentId: deployment.jobId }),
applicationId: deployment.applicationId,
title: deployment.title || "Deployment",
status: "running",
@@ -152,7 +153,7 @@ export const createDeploymentPreview = async (
deployment: Omit<
typeof apiCreateDeploymentPreview._type,
"deploymentId" | "createdAt" | "status" | "logPath"
>,
> & { jobId?: string },
) => {
const previewDeployment = await findPreviewDeploymentById(
deployment.previewDeploymentId,
@@ -191,6 +192,7 @@ export const createDeploymentPreview = async (
const deploymentCreate = await db
.insert(deployments)
.values({
...(deployment.jobId && { deploymentId: deployment.jobId }),
title: deployment.title || "Deployment",
status: "running",
logPath: logFilePath,
@@ -235,7 +237,7 @@ export const createDeploymentCompose = async (
deployment: Omit<
typeof apiCreateDeploymentCompose._type,
"deploymentId" | "createdAt" | "status" | "logPath"
>,
> & { jobId?: string },
) => {
const compose = await findComposeById(deployment.composeId);
try {
@@ -268,6 +270,7 @@ echo "Initializing deployment\n" >> ${logFilePath};
const deploymentCreate = await db
.insert(deployments)
.values({
...(deployment.jobId && { deploymentId: deployment.jobId }),
composeId: deployment.composeId,
title: deployment.title || "Deployment",
description: deployment.description || "",