diff --git a/apps/api/src/jobs/deployApplication.ts b/apps/api/src/jobs/deployApplication.ts index 7f0977043..b09bd5a4e 100644 --- a/apps/api/src/jobs/deployApplication.ts +++ b/apps/api/src/jobs/deployApplication.ts @@ -148,15 +148,27 @@ import * as buildpacks from '../lib/buildPacks'; (s) => s.name === secret.name && s.isPRMRSecret ); if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + envs.push(`${secret.name}=${isSecretFound[0].value}`); + } else { envs.push(`${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); - } - } + } + } + } }); } await fs.writeFile(`${workdir}/.env`, envs.join('\n')); @@ -706,13 +718,25 @@ import * as buildpacks from '../lib/buildPacks'; (s) => s.name === secret.name && s.isPRMRSecret ); if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + envs.push(`${secret.name}=${isSecretFound[0].value}`); + } else { envs.push(`${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } }); diff --git a/apps/api/src/lib/buildPacks/common.ts b/apps/api/src/lib/buildPacks/common.ts index f25e15e7d..14645e599 100644 --- a/apps/api/src/lib/buildPacks/common.ts +++ b/apps/api/src/lib/buildPacks/common.ts @@ -792,13 +792,25 @@ export async function buildCacheImageWithNode(data, imageForBuild) { if (pullmergeRequestId) { const isSecretFound = secrets.filter((s) => s.name === secret.name && s.isPRMRSecret); if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${isSecretFound[0].value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } } @@ -828,15 +840,28 @@ export async function buildCacheImageForLaravel(data, imageForBuild) { secrets.forEach((secret) => { if (secret.isBuildSecret) { if (pullmergeRequestId) { - const isSecretFound = secrets.filter((s) => s.name === secret.name && s.isPRMRSecret); + const isSecretFound = secrets.filter(s => s.name === secret.name && s.isPRMRSecret) if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${isSecretFound[0].value}`); + } else { + Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } } diff --git a/apps/api/src/lib/buildPacks/compose.ts b/apps/api/src/lib/buildPacks/compose.ts index bda83bd9e..dd52a2bbd 100644 --- a/apps/api/src/lib/buildPacks/compose.ts +++ b/apps/api/src/lib/buildPacks/compose.ts @@ -31,13 +31,25 @@ export default async function (data) { if (pullmergeRequestId) { const isSecretFound = secrets.filter((s) => s.name === secret.name && s.isPRMRSecret); if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { envs.push(`${secret.name}='${isSecretFound[0].value}'`); + } else { + envs.push(`${secret.name}=${isSecretFound[0].value}`); + } } else { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } }); diff --git a/apps/api/src/lib/buildPacks/deno.ts b/apps/api/src/lib/buildPacks/deno.ts index 90107e4d2..f2197cb86 100644 --- a/apps/api/src/lib/buildPacks/deno.ts +++ b/apps/api/src/lib/buildPacks/deno.ts @@ -29,13 +29,26 @@ const createDockerfile = async (data, image): Promise => { if (pullmergeRequestId) { const isSecretFound = secrets.filter(s => s.name === secret.name && s.isPRMRSecret) if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${isSecretFound[0].value}`); + } else { + Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } } diff --git a/apps/api/src/lib/buildPacks/docker.ts b/apps/api/src/lib/buildPacks/docker.ts index 2ef265fe3..ea1362ae1 100644 --- a/apps/api/src/lib/buildPacks/docker.ts +++ b/apps/api/src/lib/buildPacks/docker.ts @@ -21,7 +21,11 @@ export default async function (data) { ) { Dockerfile.forEach((line, index) => { if (line.startsWith('FROM')) { + if (secret.value.includes('\\n')) { + Dockerfile.splice(index + 1, 0, `ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.splice(index + 1, 0, `ARG ${secret.name}='${secret.value}'`); + } } }); } diff --git a/apps/api/src/lib/buildPacks/nextjs.ts b/apps/api/src/lib/buildPacks/nextjs.ts index c7aaa9dcd..fd9bf5299 100644 --- a/apps/api/src/lib/buildPacks/nextjs.ts +++ b/apps/api/src/lib/buildPacks/nextjs.ts @@ -29,13 +29,25 @@ const createDockerfile = async (data, image): Promise => { if (pullmergeRequestId) { const isSecretFound = secrets.filter(s => s.name === secret.name && s.isPRMRSecret) if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${isSecretFound[0].value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secrets.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secrets.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } } diff --git a/apps/api/src/lib/buildPacks/node.ts b/apps/api/src/lib/buildPacks/node.ts index c2e77c9f5..cdaf0c689 100644 --- a/apps/api/src/lib/buildPacks/node.ts +++ b/apps/api/src/lib/buildPacks/node.ts @@ -23,15 +23,28 @@ const createDockerfile = async (data, image): Promise => { secrets.forEach((secret) => { if (secret.isBuildSecret) { if (pullmergeRequestId) { - const isSecretFound = secrets.filter((s) => s.name === secret.name && s.isPRMRSecret); + const isSecretFound = secrets.filter(s => s.name === secret.name && s.isPRMRSecret) if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${isSecretFound[0].value}`); + } else { + Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } } diff --git a/apps/api/src/lib/buildPacks/nuxtjs.ts b/apps/api/src/lib/buildPacks/nuxtjs.ts index c7aaa9dcd..eee21f00f 100644 --- a/apps/api/src/lib/buildPacks/nuxtjs.ts +++ b/apps/api/src/lib/buildPacks/nuxtjs.ts @@ -29,13 +29,26 @@ const createDockerfile = async (data, image): Promise => { if (pullmergeRequestId) { const isSecretFound = secrets.filter(s => s.name === secret.name && s.isPRMRSecret) if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${isSecretFound[0].value}`); + } else { + Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } } diff --git a/apps/api/src/lib/buildPacks/php.ts b/apps/api/src/lib/buildPacks/php.ts index a5e2737ac..26f52596d 100644 --- a/apps/api/src/lib/buildPacks/php.ts +++ b/apps/api/src/lib/buildPacks/php.ts @@ -18,13 +18,26 @@ const createDockerfile = async (data, image, htaccessFound): Promise => { if (pullmergeRequestId) { const isSecretFound = secrets.filter(s => s.name === secret.name && s.isPRMRSecret) if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${isSecretFound[0].value}`); + } else { + Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } } diff --git a/apps/api/src/lib/buildPacks/python.ts b/apps/api/src/lib/buildPacks/python.ts index 3b5dfc264..ef526899d 100644 --- a/apps/api/src/lib/buildPacks/python.ts +++ b/apps/api/src/lib/buildPacks/python.ts @@ -23,13 +23,26 @@ const createDockerfile = async (data, image): Promise => { if (pullmergeRequestId) { const isSecretFound = secrets.filter(s => s.name === secret.name && s.isPRMRSecret) if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${isSecretFound[0].value}`); + } else { + Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } } diff --git a/apps/api/src/lib/buildPacks/static.ts b/apps/api/src/lib/buildPacks/static.ts index 235175c7a..c9f97e31b 100644 --- a/apps/api/src/lib/buildPacks/static.ts +++ b/apps/api/src/lib/buildPacks/static.ts @@ -30,13 +30,26 @@ const createDockerfile = async (data, image): Promise => { if (pullmergeRequestId) { const isSecretFound = secrets.filter(s => s.name === secret.name && s.isPRMRSecret) if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${isSecretFound[0].value}`); + } else { + Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + Dockerfile.push(`ARG ${secret.name}=${secret.value}`); + } else { Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); + } } } } diff --git a/apps/api/src/lib/common.ts b/apps/api/src/lib/common.ts index 52dd2dd53..6c4d1834c 100644 --- a/apps/api/src/lib/common.ts +++ b/apps/api/src/lib/common.ts @@ -19,7 +19,7 @@ import { saveBuildLog, saveDockerRegistryCredentials } from './buildPacks/common import { scheduler } from './scheduler'; import type { ExecaChildProcess } from 'execa'; -export const version = '3.12.2'; +export const version = '3.12.3'; export const isDev = process.env.NODE_ENV === 'development'; export const sentryDSN = 'https://409f09bcb7af47928d3e0f46b78987f3@o1082494.ingest.sentry.io/4504236622217216'; diff --git a/apps/api/src/routes/api/v1/applications/handlers.ts b/apps/api/src/routes/api/v1/applications/handlers.ts index 3e2739ec5..00faff097 100644 --- a/apps/api/src/routes/api/v1/applications/handlers.ts +++ b/apps/api/src/routes/api/v1/applications/handlers.ts @@ -468,13 +468,26 @@ export async function restartApplication(request: FastifyRequest s.name === secret.name && s.isPRMRSecret) if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + envs.push(`${secret.name}=${isSecretFound[0].value}`); + } else { envs.push(`${secret.name}='${isSecretFound[0].value}'`); + + } } else { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } }); @@ -1169,13 +1182,25 @@ export async function restartPreview(request: FastifyRequest s.name === secret.name && s.isPRMRSecret) if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + envs.push(`${secret.name}=${isSecretFound[0].value}`); + } else { envs.push(`${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } }); @@ -1604,4 +1629,4 @@ export async function removeBranchDatabase(database: any, pullmergeRequestId: st } catch ({ status, message }) { return errorHandler({ status, message }) } -} \ No newline at end of file +} diff --git a/apps/server/src/trpc/routers/applications/index.ts b/apps/server/src/trpc/routers/applications/index.ts index 2674bdd79..12eda9dc3 100644 --- a/apps/server/src/trpc/routers/applications/index.ts +++ b/apps/server/src/trpc/routers/applications/index.ts @@ -210,13 +210,25 @@ export const applicationsRouter = router({ if (pullmergeRequestId) { const isSecretFound = secrets.filter((s) => s.name === secret.name && s.isPRMRSecret); if (isSecretFound.length > 0) { + if (isSecretFound[0].value.includes('\\n')) { + envs.push(`${secret.name}=${isSecretFound[0].value}`); + } else { envs.push(`${secret.name}='${isSecretFound[0].value}'`); + } } else { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } else { if (!secret.isPRMRSecret) { + if (secret.value.includes('\\n')) { + envs.push(`${secret.name}=${secret.value}`); + } else { envs.push(`${secret.name}='${secret.value}'`); + } } } }); diff --git a/package.json b/package.json index 361b63719..0b6546855 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "coolify", "description": "An open-source & self-hostable Heroku / Netlify alternative.", - "version": "3.12.2", + "version": "3.12.3", "license": "Apache-2.0", "repository": "github:coollabsio/coolify", "scripts": {