From 558f6aecaeaaba33d3b8aafe66d6b13f785c662f Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Mon, 28 Jul 2025 01:48:33 -0600 Subject: [PATCH 1/3] fix(application): improve error handling and notification messages during deployment --- packages/server/src/services/application.ts | 25 +++++++++++++------ .../src/utils/notifications/build-error.ts | 4 ++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/server/src/services/application.ts b/packages/server/src/services/application.ts index 179820b8f..719617322 100644 --- a/packages/server/src/services/application.ts +++ b/packages/server/src/services/application.ts @@ -142,11 +142,10 @@ export const updateApplication = async ( applicationId: string, applicationData: Partial, ) => { - const { appName, ...rest } = applicationData; const application = await db .update(applications) .set({ - ...rest, + ...applicationData, }) .where(eq(applications.applicationId, applicationId)) .returning(); @@ -237,12 +236,21 @@ export const deployApplication = async ({ } catch (error) { await updateDeploymentStatus(deployment.deploymentId, "error"); await updateApplicationStatus(applicationId, "error"); + + const errorMessage = + error instanceof Error + ? error.message + : String(error) || "Error building"; + // Truncate and sanitize error message for notifications + const sanitizedErrorMessage = errorMessage + .replace(/ghs_[a-zA-Z0-9]+/g, "ghs_***") // Hide GitHub tokens + .substring(0, 1500); // Truncate to avoid notification limits + await sendBuildErrorNotifications({ projectName: application.project.name, applicationName: application.name, applicationType: "application", - // @ts-ignore - errorMessage: error?.message || "Error building", + errorMessage: sanitizedErrorMessage, buildLink, organizationId: application.project.organizationId, }); @@ -370,8 +378,9 @@ export const deployRemoteApplication = async ({ domains: application.domains, }); } catch (error) { - // @ts-ignore - const encodedContent = encodeBase64(error?.message); + const errorMessage = error instanceof Error ? error.message : String(error); + + const encodedContent = encodeBase64(errorMessage); await execAsyncRemote( application.serverId, @@ -383,12 +392,12 @@ export const deployRemoteApplication = async ({ await updateDeploymentStatus(deployment.deploymentId, "error"); await updateApplicationStatus(applicationId, "error"); + await sendBuildErrorNotifications({ projectName: application.project.name, applicationName: application.name, applicationType: "application", - // @ts-ignore - errorMessage: error?.message || "Error building", + errorMessage: `Please check the logs for details: ${errorMessage}`, buildLink, organizationId: application.project.organizationId, }); diff --git a/packages/server/src/utils/notifications/build-error.ts b/packages/server/src/utils/notifications/build-error.ts index c873c9ab5..47fa4de77 100644 --- a/packages/server/src/utils/notifications/build-error.ts +++ b/packages/server/src/utils/notifications/build-error.ts @@ -65,6 +65,8 @@ export const sendBuildErrorNotifications = async ({ const decorate = (decoration: string, text: string) => `${discord.decoration ? decoration : ""} ${text}`.trim(); + const limitCharacter = 800; + const truncatedErrorMessage = errorMessage.substring(0, limitCharacter); await sendDiscordNotification(discord, { title: decorate(">", "`⚠️` Build Failed"), color: 0xed4245, @@ -101,7 +103,7 @@ export const sendBuildErrorNotifications = async ({ }, { name: decorate("`⚠️`", "Error Message"), - value: `\`\`\`${errorMessage}\`\`\``, + value: `\`\`\`${truncatedErrorMessage}\`\`\``, }, { name: decorate("`🧷`", "Build Link"), From bac2afb423c543394efa49f268c26f9a43e40a33 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Mon, 28 Jul 2025 01:50:58 -0600 Subject: [PATCH 2/3] refactor(application): exclude appName from updateApplication data to streamline database updates --- packages/server/src/services/application.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/server/src/services/application.ts b/packages/server/src/services/application.ts index 719617322..571a6fa83 100644 --- a/packages/server/src/services/application.ts +++ b/packages/server/src/services/application.ts @@ -142,10 +142,11 @@ export const updateApplication = async ( applicationId: string, applicationData: Partial, ) => { + const { appName, ...rest } = applicationData; const application = await db .update(applications) .set({ - ...applicationData, + ...rest, }) .where(eq(applications.applicationId, applicationId)) .returning(); From 2442494096250f116c03ccf9dadd98828d700383 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Mon, 28 Jul 2025 01:51:21 -0600 Subject: [PATCH 3/3] fix(application): simplify error message handling in deployment notifications --- packages/server/src/services/application.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/server/src/services/application.ts b/packages/server/src/services/application.ts index 571a6fa83..a8effba98 100644 --- a/packages/server/src/services/application.ts +++ b/packages/server/src/services/application.ts @@ -238,20 +238,12 @@ export const deployApplication = async ({ await updateDeploymentStatus(deployment.deploymentId, "error"); await updateApplicationStatus(applicationId, "error"); - const errorMessage = - error instanceof Error - ? error.message - : String(error) || "Error building"; - // Truncate and sanitize error message for notifications - const sanitizedErrorMessage = errorMessage - .replace(/ghs_[a-zA-Z0-9]+/g, "ghs_***") // Hide GitHub tokens - .substring(0, 1500); // Truncate to avoid notification limits - await sendBuildErrorNotifications({ projectName: application.project.name, applicationName: application.name, applicationType: "application", - errorMessage: sanitizedErrorMessage, + // @ts-ignore + errorMessage: error?.message || "Error building", buildLink, organizationId: application.project.organizationId, });