diff --git a/package.json b/package.json index b936ec3bc..b3945abee 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "coolify", "description": "An open-source & self-hostable Heroku / Netlify alternative.", - "version": "2.0.15", + "version": "2.0.16", "license": "AGPL-3.0", "scripts": { "dev": "docker compose -f docker-compose-dev.yaml up -d && NODE_ENV=development svelte-kit dev --host 0.0.0.0", diff --git a/prisma/migrations/20220219231255_prmr_secrets/migration.sql b/prisma/migrations/20220219231255_prmr_secrets/migration.sql new file mode 100644 index 000000000..728fcae36 --- /dev/null +++ b/prisma/migrations/20220219231255_prmr_secrets/migration.sql @@ -0,0 +1,19 @@ +-- RedefineTables +PRAGMA foreign_keys=OFF; +CREATE TABLE "new_Secret" ( + "id" TEXT NOT NULL PRIMARY KEY, + "name" TEXT NOT NULL, + "value" TEXT NOT NULL, + "isPRMRSecret" BOOLEAN NOT NULL DEFAULT false, + "isBuildSecret" BOOLEAN NOT NULL DEFAULT false, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" DATETIME NOT NULL, + "applicationId" TEXT NOT NULL, + CONSTRAINT "Secret_applicationId_fkey" FOREIGN KEY ("applicationId") REFERENCES "Application" ("id") ON DELETE RESTRICT ON UPDATE CASCADE +); +INSERT INTO "new_Secret" ("applicationId", "createdAt", "id", "isBuildSecret", "name", "updatedAt", "value") SELECT "applicationId", "createdAt", "id", "isBuildSecret", "name", "updatedAt", "value" FROM "Secret"; +DROP TABLE "Secret"; +ALTER TABLE "new_Secret" RENAME TO "Secret"; +CREATE UNIQUE INDEX "Secret_name_applicationId_isPRMRSecret_key" ON "Secret"("name", "applicationId", "isPRMRSecret"); +PRAGMA foreign_key_check; +PRAGMA foreign_keys=ON; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index cf9684f53..7599602fb 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -109,13 +109,14 @@ model Secret { id String @id @default(cuid()) name String value String + isPRMRSecret Boolean @default(false) isBuildSecret Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt application Application @relation(fields: [applicationId], references: [id]) applicationId String - @@unique([name, applicationId]) + @@unique([name, applicationId, isPRMRSecret]) } model BuildLog { diff --git a/src/lib/buildPacks/docker.ts b/src/lib/buildPacks/docker.ts index 5bc6ce453..af000e551 100644 --- a/src/lib/buildPacks/docker.ts +++ b/src/lib/buildPacks/docker.ts @@ -9,7 +9,8 @@ export default async function ({ docker, buildId, baseDirectory, - secrets + secrets, + pullmergeRequestId }) { try { let file = `${workdir}/Dockerfile`; @@ -24,7 +25,15 @@ export default async function ({ if (secrets.length > 0) { secrets.forEach((secret) => { if (secret.isBuildSecret) { - Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + if (pullmergeRequestId) { + if (secret.isPRMRSecret) { + Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + } + } else { + if (!secret.isPRMRSecret) { + Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + } + } } }); } diff --git a/src/lib/buildPacks/nextjs.ts b/src/lib/buildPacks/nextjs.ts index 53a7f884e..648208d83 100644 --- a/src/lib/buildPacks/nextjs.ts +++ b/src/lib/buildPacks/nextjs.ts @@ -2,8 +2,16 @@ import { buildImage } from '$lib/docker'; import { promises as fs } from 'fs'; const createDockerfile = async (data, image): Promise => { - const { workdir, port, installCommand, buildCommand, startCommand, baseDirectory, secrets } = - data; + const { + workdir, + port, + installCommand, + buildCommand, + startCommand, + baseDirectory, + secrets, + pullmergeRequestId + } = data; const Dockerfile: Array = []; Dockerfile.push(`FROM ${image}`); @@ -11,7 +19,15 @@ const createDockerfile = async (data, image): Promise => { if (secrets.length > 0) { secrets.forEach((secret) => { if (secret.isBuildSecret) { - Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + if (pullmergeRequestId) { + if (secret.isPRMRSecret) { + Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + } + } else { + if (!secret.isPRMRSecret) { + Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + } + } } }); } diff --git a/src/lib/buildPacks/node.ts b/src/lib/buildPacks/node.ts index 53a7f884e..648208d83 100644 --- a/src/lib/buildPacks/node.ts +++ b/src/lib/buildPacks/node.ts @@ -2,8 +2,16 @@ import { buildImage } from '$lib/docker'; import { promises as fs } from 'fs'; const createDockerfile = async (data, image): Promise => { - const { workdir, port, installCommand, buildCommand, startCommand, baseDirectory, secrets } = - data; + const { + workdir, + port, + installCommand, + buildCommand, + startCommand, + baseDirectory, + secrets, + pullmergeRequestId + } = data; const Dockerfile: Array = []; Dockerfile.push(`FROM ${image}`); @@ -11,7 +19,15 @@ const createDockerfile = async (data, image): Promise => { if (secrets.length > 0) { secrets.forEach((secret) => { if (secret.isBuildSecret) { - Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + if (pullmergeRequestId) { + if (secret.isPRMRSecret) { + Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + } + } else { + if (!secret.isPRMRSecret) { + Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + } + } } }); } diff --git a/src/lib/buildPacks/nuxtjs.ts b/src/lib/buildPacks/nuxtjs.ts index 53a7f884e..648208d83 100644 --- a/src/lib/buildPacks/nuxtjs.ts +++ b/src/lib/buildPacks/nuxtjs.ts @@ -2,8 +2,16 @@ import { buildImage } from '$lib/docker'; import { promises as fs } from 'fs'; const createDockerfile = async (data, image): Promise => { - const { workdir, port, installCommand, buildCommand, startCommand, baseDirectory, secrets } = - data; + const { + workdir, + port, + installCommand, + buildCommand, + startCommand, + baseDirectory, + secrets, + pullmergeRequestId + } = data; const Dockerfile: Array = []; Dockerfile.push(`FROM ${image}`); @@ -11,7 +19,15 @@ const createDockerfile = async (data, image): Promise => { if (secrets.length > 0) { secrets.forEach((secret) => { if (secret.isBuildSecret) { - Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + if (pullmergeRequestId) { + if (secret.isPRMRSecret) { + Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + } + } else { + if (!secret.isPRMRSecret) { + Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + } + } } }); } diff --git a/src/lib/buildPacks/static.ts b/src/lib/buildPacks/static.ts index 0db1a0c83..d71eea6e1 100644 --- a/src/lib/buildPacks/static.ts +++ b/src/lib/buildPacks/static.ts @@ -2,8 +2,16 @@ import { buildCacheImageWithNode, buildImage } from '$lib/docker'; import { promises as fs } from 'fs'; const createDockerfile = async (data, image): Promise => { - const { applicationId, tag, workdir, buildCommand, baseDirectory, publishDirectory, secrets } = - data; + const { + applicationId, + tag, + workdir, + buildCommand, + baseDirectory, + publishDirectory, + secrets, + pullmergeRequestId + } = data; const Dockerfile: Array = []; Dockerfile.push(`FROM ${image}`); @@ -11,7 +19,15 @@ const createDockerfile = async (data, image): Promise => { if (secrets.length > 0) { secrets.forEach((secret) => { if (secret.isBuildSecret) { - Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + if (pullmergeRequestId) { + if (secret.isPRMRSecret) { + Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + } + } else { + if (!secret.isPRMRSecret) { + Dockerfile.push(`ARG ${secret.name} ${secret.value}`); + } + } } }); } diff --git a/src/lib/components/CopyPasswordField.svelte b/src/lib/components/CopyPasswordField.svelte index ac2ba94d4..648fc3278 100644 --- a/src/lib/components/CopyPasswordField.svelte +++ b/src/lib/components/CopyPasswordField.svelte @@ -1,9 +1,9 @@ -
showActions(true)} - on:mouseleave={() => showActions(false)} -> +
{#if !isPasswordField || showPassword} {#if textarea}