From e6f98675008e5d157235b7e7517bb16c73841d36 Mon Sep 17 00:00:00 2001 From: Lorenzo Migliorero Date: Thu, 1 Aug 2024 10:13:29 +0200 Subject: [PATCH] fix: error handling --- .../dokploy/server/utils/builders/nixpacks.ts | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/apps/dokploy/server/utils/builders/nixpacks.ts b/apps/dokploy/server/utils/builders/nixpacks.ts index 674af34f..6769901f 100644 --- a/apps/dokploy/server/utils/builders/nixpacks.ts +++ b/apps/dokploy/server/utils/builders/nixpacks.ts @@ -1,20 +1,28 @@ import type { WriteStream } from "node:fs"; import path from "node:path"; import { buildStatic } from "@/server/utils/builders/static"; +import { nanoid } from "nanoid"; import type { ApplicationNested } from "."; import { prepareEnvironmentVariables } from "../docker/utils"; import { getBuildAppDirectory } from "../filesystem/directory"; import { spawnAsync } from "../process/spawnAsync"; -// TODO: integrate in the vps sudo chown -R $(whoami) ~/.docker export const buildNixpacks = async ( application: ApplicationNested, writeStream: WriteStream, ) => { const { env, appName, publishDirectory } = application; - const buildAppDirectory = getBuildAppDirectory(application); + const buildAppDirectory = getBuildAppDirectory(application); + const buildContainerId = `${appName}-${nanoid(10)}`; const envVariables = prepareEnvironmentVariables(env); + + const writeToStream = (data: string) => { + if (writeStream.writable) { + writeStream.write(data); + } + }; + try { const args = ["build", buildAppDirectory, "--name", appName]; @@ -27,11 +35,7 @@ export const buildNixpacks = async ( args.push("--no-error-without-start"); } - await spawnAsync("nixpacks", args, (data) => { - if (writeStream.writable) { - writeStream.write(data); - } - }); + await spawnAsync("nixpacks", args, writeToStream); /* Run the container with the image created by nixpacks, @@ -42,38 +46,28 @@ export const buildNixpacks = async ( if (publishDirectory) { await spawnAsync( "docker", - ["create", "--name", `${appName}-temp`, appName], - (data) => { - if (writeStream.writable) { - writeStream.write(data); - } - }, + ["create", "--name", buildContainerId, appName], + writeToStream, ); await spawnAsync( "docker", [ "cp", - `${appName}-temp:/app/${publishDirectory}`, + `${buildContainerId}:/app/${publishDirectory}`, path.join(buildAppDirectory, publishDirectory), ], - (data) => { - if (writeStream.writable) { - writeStream.write(data); - } - }, + writeToStream, ); - await spawnAsync("docker", ["rm", `${appName}-temp`], (data) => { - if (writeStream.writable) { - writeStream.write(data); - } - }); + await spawnAsync("docker", ["rm", buildContainerId], writeToStream); await buildStatic(application, writeStream); } return true; } catch (e) { + await spawnAsync("docker", ["rm", buildContainerId], writeToStream); + throw e; } };