From 3601abc4c128efdaa2ca550797642696bdc58d5d Mon Sep 17 00:00:00 2001 From: Lorenzo Migliorero Date: Mon, 22 Jul 2024 11:52:20 +0200 Subject: [PATCH] feat: apply buildargs --- server/utils/builders/docker-file.ts | 7 +++---- server/utils/builders/utils.ts | 12 ------------ server/utils/docker/utils.ts | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 16 deletions(-) delete mode 100644 server/utils/builders/utils.ts diff --git a/server/utils/builders/docker-file.ts b/server/utils/builders/docker-file.ts index 62562085..940a623a 100644 --- a/server/utils/builders/docker-file.ts +++ b/server/utils/builders/docker-file.ts @@ -1,15 +1,15 @@ import type { WriteStream } from "node:fs"; import { docker } from "@/server/constants"; +import { prepareBuildArgs } from "@/server/utils/docker/utils"; import * as tar from "tar-fs"; import type { ApplicationNested } from "."; import { getBuildAppDirectory } from "../filesystem/directory"; -import { createEnvFile } from "./utils"; export const buildCustomDocker = async ( application: ApplicationNested, writeStream: WriteStream, ) => { - const { appName, env } = application; + const { appName, buildArgs } = application; const dockerFilePath = getBuildAppDirectory(application); try { const image = `${appName}`; @@ -17,10 +17,9 @@ export const buildCustomDocker = async ( dockerFilePath.substring(0, dockerFilePath.lastIndexOf("/") + 1) || "."; const tarStream = tar.pack(contextPath); - createEnvFile(dockerFilePath, env); - const stream = await docker.buildImage(tarStream, { t: image, + buildargs: prepareBuildArgs(buildArgs), dockerfile: dockerFilePath.substring(dockerFilePath.lastIndexOf("/") + 1), }); diff --git a/server/utils/builders/utils.ts b/server/utils/builders/utils.ts deleted file mode 100644 index a5ce5362..00000000 --- a/server/utils/builders/utils.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { existsSync, mkdirSync, writeFileSync } from "node:fs"; -import { dirname, join } from "node:path"; -import { prepareEnvironmentVariables } from "../docker/utils"; - -export const createEnvFile = (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"); - writeFileSync(envFilePath, envFileContent); -}; diff --git a/server/utils/docker/utils.ts b/server/utils/docker/utils.ts index 256a1f96..b1eb8973 100644 --- a/server/utils/docker/utils.ts +++ b/server/utils/docker/utils.ts @@ -161,6 +161,21 @@ export const removeService = async (appName: string) => { export const prepareEnvironmentVariables = (env: string | null) => Object.entries(parse(env ?? "")).map(([key, value]) => `${key}=${value}`); +export const prepareBuildArgs = (input: string | null) => { + const pairs = (input ?? "").split(" "); + + const jsonObject: Record = {}; + + for (const pair of pairs) { + const [key, value] = pair.split("="); + if (key && value) { + jsonObject[key] = value; + } + } + + return jsonObject; +}; + export const generateVolumeMounts = (mounts: ApplicationNested["mounts"]) => { if (!mounts || mounts.length === 0) { return [];