fix(logs): improve logs in remote server when is error, and fix the env parsing to allow any values in enviroment variables

This commit is contained in:
Mauricio Siu 2024-10-13 02:27:33 -06:00
parent 8488d530f3
commit 8d41bafb93
7 changed files with 54 additions and 11 deletions

View File

@ -38,6 +38,7 @@ import { eq } from "drizzle-orm";
import { getDokployUrl } from "./admin";
import { createDeployment, updateDeploymentStatus } from "./deployment";
import { validUniqueServerAppName } from "./project";
import { encodeBase64 } from "../utils/docker/utils";
export type Application = typeof applications.$inferSelect;
export const createApplication = async (
@ -312,6 +313,17 @@ export const deployRemoteApplication = async ({
buildLink,
});
} catch (error) {
// @ts-ignore
const encodedContent = encodeBase64(error?.message);
await execAsyncRemote(
application.serverId,
`
echo "\n\n===================================EXTRA LOGS============================================" >> ${deployment.logPath};
echo "Error occurred ❌, check the logs for details." >> ${deployment.logPath};
echo "${encodedContent}" | base64 -d >> "${deployment.logPath}";`,
);
await updateDeploymentStatus(deployment.deploymentId, "error");
await updateApplicationStatus(applicationId, "error");
await sendBuildErrorNotifications({
@ -365,6 +377,17 @@ export const rebuildRemoteApplication = async ({
await updateDeploymentStatus(deployment.deploymentId, "done");
await updateApplicationStatus(applicationId, "done");
} catch (error) {
// @ts-ignore
const encodedContent = encodeBase64(error?.message);
await execAsyncRemote(
application.serverId,
`
echo "\n\n===================================EXTRA LOGS============================================" >> ${deployment.logPath};
echo "Error occurred ❌, check the logs for details." >> ${deployment.logPath};
echo "${encodedContent}" | base64 -d >> "${deployment.logPath}";`,
);
await updateDeploymentStatus(deployment.deploymentId, "error");
await updateApplicationStatus(applicationId, "error");
throw error;

View File

@ -44,6 +44,7 @@ import { eq } from "drizzle-orm";
import { getDokployUrl } from "./admin";
import { createDeploymentCompose, updateDeploymentStatus } from "./deployment";
import { validUniqueServerAppName } from "./project";
import { encodeBase64 } from "../utils/docker/utils";
export type Compose = typeof compose.$inferSelect;
@ -351,7 +352,16 @@ export const deployRemoteCompose = async ({
buildLink,
});
} catch (error) {
console.log(error);
// @ts-ignore
const encodedContent = encodeBase64(error?.message);
await execAsyncRemote(
compose.serverId,
`
echo "\n\n===================================EXTRA LOGS============================================" >> ${deployment.logPath};
echo "Error occurred ❌, check the logs for details." >> ${deployment.logPath};
echo "${encodedContent}" | base64 -d >> "${deployment.logPath}";`,
);
await updateDeploymentStatus(deployment.deploymentId, "error");
await updateCompose(composeId, {
composeStatus: "error",
@ -394,6 +404,16 @@ export const rebuildRemoteCompose = async ({
composeStatus: "done",
});
} catch (error) {
// @ts-ignore
const encodedContent = encodeBase64(error?.message);
await execAsyncRemote(
compose.serverId,
`
echo "\n\n===================================EXTRA LOGS============================================" >> ${deployment.logPath};
echo "Error occurred ❌, check the logs for details." >> ${deployment.logPath};
echo "${encodedContent}" | base64 -d >> "${deployment.logPath}";`,
);
await updateDeploymentStatus(deployment.deploymentId, "error");
await updateCompose(composeId, {
composeStatus: "error",

View File

@ -95,7 +95,7 @@ export const getDockerCommand = (
command += createEnvFileCommand(dockerFilePath, env);
}
command = `
command += `
echo "Building ${appName}" >> ${logPath};
cd ${dockerContextPath} >> ${logPath} 2>> ${logPath} || {
echo "❌ The path ${dockerContextPath} does not exist" >> ${logPath};

View File

@ -56,7 +56,7 @@ export const getHerokuCommand = (
];
for (const env of envVariables) {
args.push("--env", env);
args.push("--env", `'${env}'`);
}
const command = `pack ${args.join(" ")}`;

View File

@ -94,7 +94,7 @@ export const getNixpacksCommand = (
const args = ["build", buildAppDirectory, "--name", appName];
for (const env of envVariables) {
args.push("--env", env);
args.push("--env", `'${env}'`);
}
if (publishDirectory) {

View File

@ -55,7 +55,7 @@ export const getPaketoCommand = (
];
for (const env of envVariables) {
args.push("--env", env);
args.push("--env", `'${env}'`);
}
const command = `pack ${args.join(" ")}`;

View File

@ -1,6 +1,6 @@
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
import { dirname, join } from "node:path";
import { prepareEnvironmentVariables } from "../docker/utils";
import { encodeBase64, prepareEnvironmentVariables } from "../docker/utils";
export const createEnvFile = (directory: string, env: string | null) => {
const envFilePath = join(dirname(directory), ".env");
@ -12,10 +12,10 @@ export const createEnvFile = (directory: string, env: string | null) => {
};
export const createEnvFileCommand = (directory: string, env: string | null) => {
const envFilePath = join(dirname(directory), ".env");
if (!existsSync(dirname(envFilePath))) {
mkdirSync(dirname(envFilePath), { recursive: true });
}
const envFileContent = prepareEnvironmentVariables(env).join("\n");
return `echo "${envFileContent}" > ${envFilePath}`;
const encodedContent = encodeBase64(envFileContent || "");
const envFilePath = join(dirname(directory), ".env");
return `echo "${encodedContent}" | base64 -d > "${envFilePath}";`;
};