fix: secrets with newline

This commit is contained in:
Andras Bacsai
2022-12-19 21:48:31 +01:00
parent 88f3f628ef
commit 29530f3b17
15 changed files with 199 additions and 7 deletions

View File

@@ -148,14 +148,26 @@ import * as buildpacks from '../lib/buildPacks';
(s) => s.name === secret.name && s.isPRMRSecret (s) => s.name === secret.name && s.isPRMRSecret
); );
if (isSecretFound.length > 0) { 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}'`); envs.push(`${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else { } else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
} }
}
} }
}); });
} }
@@ -706,13 +718,25 @@ import * as buildpacks from '../lib/buildPacks';
(s) => s.name === secret.name && s.isPRMRSecret (s) => s.name === secret.name && s.isPRMRSecret
); );
if (isSecretFound.length > 0) { 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}'`); envs.push(`${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else { } else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
}
} }
} }
}); });

View File

@@ -792,16 +792,28 @@ export async function buildCacheImageWithNode(data, imageForBuild) {
if (pullmergeRequestId) { 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.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}'`); Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else { } else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
} }
} }
} }
}
}); });
} }
if (isPnpm) { if (isPnpm) {
@@ -828,18 +840,31 @@ export async function buildCacheImageForLaravel(data, imageForBuild) {
secrets.forEach((secret) => { secrets.forEach((secret) => {
if (secret.isBuildSecret) { if (secret.isBuildSecret) {
if (pullmergeRequestId) { 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.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}'`); Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else { } else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
} }
} }
} }
}
}); });
} }
Dockerfile.push(`COPY *.json *.mix.js /app/`); Dockerfile.push(`COPY *.json *.mix.js /app/`);

View File

@@ -31,15 +31,27 @@ export default async function (data) {
if (pullmergeRequestId) { 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.length > 0) {
if (isSecretFound[0].value.includes('\\n')) {
envs.push(`${secret.name}='${isSecretFound[0].value}'`); 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 { } else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
} }
} }
}
}); });
} }
await fs.writeFile(`${workdir}/.env`, envs.join('\n')); await fs.writeFile(`${workdir}/.env`, envs.join('\n'));

View File

@@ -29,16 +29,29 @@ const createDockerfile = async (data, image): Promise<void> => {
if (pullmergeRequestId) { 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.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}'`); Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else { } else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
} }
} }
} }
}
}); });
} }
if (depsFound) { if (depsFound) {

View File

@@ -21,7 +21,11 @@ export default async function (data) {
) { ) {
Dockerfile.forEach((line, index) => { Dockerfile.forEach((line, index) => {
if (line.startsWith('FROM')) { 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}'`); Dockerfile.splice(index + 1, 0, `ARG ${secret.name}='${secret.value}'`);
}
} }
}); });
} }

View File

@@ -29,16 +29,28 @@ const createDockerfile = async (data, image): Promise<void> => {
if (pullmergeRequestId) { 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.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}'`); Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secrets.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else { } else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secrets.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
} }
} }
} }
}
}); });
} }
if (isPnpm) { if (isPnpm) {

View File

@@ -23,18 +23,31 @@ const createDockerfile = async (data, image): Promise<void> => {
secrets.forEach((secret) => { secrets.forEach((secret) => {
if (secret.isBuildSecret) { if (secret.isBuildSecret) {
if (pullmergeRequestId) { 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.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}'`); Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else { } else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
} }
} }
} }
}
}); });
} }
if (isPnpm) { if (isPnpm) {

View File

@@ -29,16 +29,29 @@ const createDockerfile = async (data, image): Promise<void> => {
if (pullmergeRequestId) { 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.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}'`); Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else { } else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
} }
} }
} }
}
}); });
} }
if (isPnpm) { if (isPnpm) {

View File

@@ -18,16 +18,29 @@ const createDockerfile = async (data, image, htaccessFound): Promise<void> => {
if (pullmergeRequestId) { 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.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}'`); Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else { } else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
} }
} }
} }
}
}); });
} }
Dockerfile.push('WORKDIR /app'); Dockerfile.push('WORKDIR /app');

View File

@@ -23,16 +23,29 @@ const createDockerfile = async (data, image): Promise<void> => {
if (pullmergeRequestId) { 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.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}'`); Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else { } else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
} }
} }
} }
}
}); });
} }
if (pythonWSGI?.toLowerCase() === 'gunicorn') { if (pythonWSGI?.toLowerCase() === 'gunicorn') {

View File

@@ -30,16 +30,29 @@ const createDockerfile = async (data, image): Promise<void> => {
if (pullmergeRequestId) { 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.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}'`); Dockerfile.push(`ARG ${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else { } else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
Dockerfile.push(`ARG ${secret.name}=${secret.value}`);
} else {
Dockerfile.push(`ARG ${secret.name}='${secret.value}'`); Dockerfile.push(`ARG ${secret.name}='${secret.value}'`);
} }
} }
} }
}
}); });
} }
if (buildCommand) { if (buildCommand) {

View File

@@ -19,7 +19,7 @@ import { saveBuildLog, saveDockerRegistryCredentials } from './buildPacks/common
import { scheduler } from './scheduler'; import { scheduler } from './scheduler';
import type { ExecaChildProcess } from 'execa'; 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 isDev = process.env.NODE_ENV === 'development';
export const sentryDSN = export const sentryDSN =
'https://409f09bcb7af47928d3e0f46b78987f3@o1082494.ingest.sentry.io/4504236622217216'; 'https://409f09bcb7af47928d3e0f46b78987f3@o1082494.ingest.sentry.io/4504236622217216';

View File

@@ -468,15 +468,28 @@ export async function restartApplication(request: FastifyRequest<RestartApplicat
if (pullmergeRequestId) { 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.length > 0) {
if (isSecretFound[0].value.includes('\\n')) {
envs.push(`${secret.name}=${isSecretFound[0].value}`);
} else {
envs.push(`${secret.name}='${isSecretFound[0].value}'`); envs.push(`${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else { } else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
} }
}
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
} }
} }
}
}); });
} }
const { workdir } = await createDirectories({ repository, buildId }); const { workdir } = await createDirectories({ repository, buildId });
@@ -1169,15 +1182,27 @@ export async function restartPreview(request: FastifyRequest<RestartPreviewAppli
if (pullmergeRequestId) { 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.length > 0) {
if (isSecretFound[0].value.includes('\\n')) {
envs.push(`${secret.name}=${isSecretFound[0].value}`);
} else {
envs.push(`${secret.name}='${isSecretFound[0].value}'`); envs.push(`${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else { } else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
} }
}
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
} }
} }
}
}); });
} }
const { workdir } = await createDirectories({ repository, buildId }); const { workdir } = await createDirectories({ repository, buildId });

View File

@@ -210,13 +210,25 @@ export const applicationsRouter = router({
if (pullmergeRequestId) { 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.length > 0) {
if (isSecretFound[0].value.includes('\\n')) {
envs.push(`${secret.name}=${isSecretFound[0].value}`);
} else {
envs.push(`${secret.name}='${isSecretFound[0].value}'`); envs.push(`${secret.name}='${isSecretFound[0].value}'`);
}
} else {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else { } else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
}
} }
} else { } else {
if (!secret.isPRMRSecret) { if (!secret.isPRMRSecret) {
if (secret.value.includes('\\n')) {
envs.push(`${secret.name}=${secret.value}`);
} else {
envs.push(`${secret.name}='${secret.value}'`); envs.push(`${secret.name}='${secret.value}'`);
}
} }
} }
}); });

View File

@@ -1,7 +1,7 @@
{ {
"name": "coolify", "name": "coolify",
"description": "An open-source & self-hostable Heroku / Netlify alternative.", "description": "An open-source & self-hostable Heroku / Netlify alternative.",
"version": "3.12.2", "version": "3.12.3",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": "github:coollabsio/coolify", "repository": "github:coollabsio/coolify",
"scripts": { "scripts": {