From ca599f27f7dd6a6ace8d6cf466202365637ad16c Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sat, 20 Jul 2024 16:17:10 -0600 Subject: [PATCH] refactor(dockerfile): create .env file when using dockerfile #227 --- server/utils/builders/docker-file.ts | 7 ++++--- server/utils/builders/utils.ts | 12 ++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 server/utils/builders/utils.ts diff --git a/server/utils/builders/docker-file.ts b/server/utils/builders/docker-file.ts index 1b2881da..62562085 100644 --- a/server/utils/builders/docker-file.ts +++ b/server/utils/builders/docker-file.ts @@ -3,12 +3,13 @@ import { docker } from "@/server/constants"; 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 } = application; + const { appName, env } = application; const dockerFilePath = getBuildAppDirectory(application); try { const image = `${appName}`; @@ -16,11 +17,11 @@ 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, dockerfile: dockerFilePath.substring(dockerFilePath.lastIndexOf("/") + 1), - // TODO: maybe use or not forcerm - // forcerm: true, }); await new Promise((resolve, reject) => { diff --git a/server/utils/builders/utils.ts b/server/utils/builders/utils.ts new file mode 100644 index 00000000..a5ce5362 --- /dev/null +++ b/server/utils/builders/utils.ts @@ -0,0 +1,12 @@ +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); +};