"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var lib_exports = {}; __export(lib_exports, { deployApplication: () => deployApplication, generateConfigHash: () => generateConfigHash, getApplicationFromDB: () => getApplicationFromDB, setDefaultBaseImage: () => setDefaultBaseImage }); module.exports = __toCommonJS(lib_exports); var import_cuid = __toESM(require("cuid")); var import_node_crypto = __toESM(require("node:crypto")); var import_common = require("../../../lib/common"); var import_prisma = require("../../../prisma"); async function deployApplication(id, teamId, forceRebuild, pullmergeRequestId = null, branch = null) { const buildId = (0, import_cuid.default)(); const application = await getApplicationFromDB(id, teamId); if (application) { if (!application?.configHash) { await generateConfigHash( id, application.buildPack, application.port, application.exposePort, application.installCommand, application.buildCommand, application.startCommand ); } await import_prisma.prisma.application.update({ where: { id }, data: { updatedAt: new Date() } }); if (application.gitSourceId) { await import_prisma.prisma.build.create({ data: { id: buildId, applicationId: id, sourceBranch: branch, branch: application.branch, pullmergeRequestId: pullmergeRequestId?.toString(), forceRebuild, destinationDockerId: application.destinationDocker?.id, gitSourceId: application.gitSource?.id, githubAppId: application.gitSource?.githubApp?.id, gitlabAppId: application.gitSource?.gitlabApp?.id, status: "queued", type: pullmergeRequestId ? application.gitSource?.githubApp?.id ? "manual_pr" : "manual_mr" : "manual" } }); } else { await import_prisma.prisma.build.create({ data: { id: buildId, applicationId: id, branch: "latest", forceRebuild, destinationDockerId: application.destinationDocker?.id, status: "queued", type: "manual" } }); } return buildId; } throw { status: 500, message: "Application cannot be deployed." }; } async function generateConfigHash(id, buildPack, port, exposePort, installCommand, buildCommand, startCommand) { const configHash = import_node_crypto.default.createHash("sha256").update( JSON.stringify({ buildPack, port, exposePort, installCommand, buildCommand, startCommand }) ).digest("hex"); return await import_prisma.prisma.application.update({ where: { id }, data: { configHash } }); } async function getApplicationFromDB(id, teamId) { let application = await import_prisma.prisma.application.findFirst({ where: { id, teams: { some: { id: teamId === "0" ? void 0 : teamId } } }, include: { destinationDocker: true, settings: true, gitSource: { include: { githubApp: true, gitlabApp: true } }, secrets: true, persistentStorage: true, connectedDatabase: true, previewApplication: true, dockerRegistry: true } }); if (!application) { throw { status: 404, message: "Application not found." }; } application = decryptApplication(application); const buildPack = application?.buildPack || null; const { baseImage, baseBuildImage, baseBuildImages, baseImages } = setDefaultBaseImage(buildPack); if (application && !application.baseImage) { application.baseImage = baseImage; } if (application && !application.baseBuildImage) { application.baseBuildImage = baseBuildImage; } return { ...application, baseBuildImages, baseImages }; } function decryptApplication(application) { if (application) { if (application?.gitSource?.githubApp?.clientSecret) { application.gitSource.githubApp.clientSecret = (0, import_common.decrypt)(application.gitSource.githubApp.clientSecret) || null; } if (application?.gitSource?.githubApp?.webhookSecret) { application.gitSource.githubApp.webhookSecret = (0, import_common.decrypt)(application.gitSource.githubApp.webhookSecret) || null; } if (application?.gitSource?.githubApp?.privateKey) { application.gitSource.githubApp.privateKey = (0, import_common.decrypt)(application.gitSource.githubApp.privateKey) || null; } if (application?.gitSource?.gitlabApp?.appSecret) { application.gitSource.gitlabApp.appSecret = (0, import_common.decrypt)(application.gitSource.gitlabApp.appSecret) || null; } if (application?.secrets.length > 0) { application.secrets = application.secrets.map((s) => { s.value = (0, import_common.decrypt)(s.value) || null; return s; }); } return application; } } const staticApps = ["static", "react", "vuejs", "svelte", "gatsby", "astro", "eleventy"]; const nodeBased = [ "react", "preact", "vuejs", "svelte", "gatsby", "astro", "eleventy", "node", "nestjs", "nuxtjs", "nextjs" ]; function setDefaultBaseImage(buildPack, deploymentType = null) { const nodeVersions = [ { value: "node:lts", label: "node:lts" }, { value: "node:18", label: "node:18" }, { value: "node:17", label: "node:17" }, { value: "node:16", label: "node:16" }, { value: "node:14", label: "node:14" }, { value: "node:12", label: "node:12" } ]; const staticVersions = [ { value: "webdevops/nginx:alpine", label: "webdevops/nginx:alpine" }, { value: "webdevops/apache:alpine", label: "webdevops/apache:alpine" }, { value: "nginx:alpine", label: "nginx:alpine" }, { value: "httpd:alpine", label: "httpd:alpine (Apache)" } ]; const rustVersions = [ { value: "rust:latest", label: "rust:latest" }, { value: "rust:1.60", label: "rust:1.60" }, { value: "rust:1.60-buster", label: "rust:1.60-buster" }, { value: "rust:1.60-bullseye", label: "rust:1.60-bullseye" }, { value: "rust:1.60-slim-buster", label: "rust:1.60-slim-buster" }, { value: "rust:1.60-slim-bullseye", label: "rust:1.60-slim-bullseye" }, { value: "rust:1.60-alpine3.14", label: "rust:1.60-alpine3.14" }, { value: "rust:1.60-alpine3.15", label: "rust:1.60-alpine3.15" } ]; const phpVersions = [ { value: "webdevops/php-apache:8.2", label: "webdevops/php-apache:8.2" }, { value: "webdevops/php-nginx:8.2", label: "webdevops/php-nginx:8.2" }, { value: "webdevops/php-apache:8.1", label: "webdevops/php-apache:8.1" }, { value: "webdevops/php-nginx:8.1", label: "webdevops/php-nginx:8.1" }, { value: "webdevops/php-apache:8.0", label: "webdevops/php-apache:8.0" }, { value: "webdevops/php-nginx:8.0", label: "webdevops/php-nginx:8.0" }, { value: "webdevops/php-apache:7.4", label: "webdevops/php-apache:7.4" }, { value: "webdevops/php-nginx:7.4", label: "webdevops/php-nginx:7.4" }, { value: "webdevops/php-apache:7.3", label: "webdevops/php-apache:7.3" }, { value: "webdevops/php-nginx:7.3", label: "webdevops/php-nginx:7.3" }, { value: "webdevops/php-apache:7.2", label: "webdevops/php-apache:7.2" }, { value: "webdevops/php-nginx:7.2", label: "webdevops/php-nginx:7.2" }, { value: "webdevops/php-apache:7.1", label: "webdevops/php-apache:7.1" }, { value: "webdevops/php-nginx:7.1", label: "webdevops/php-nginx:7.1" }, { value: "webdevops/php-apache:7.0", label: "webdevops/php-apache:7.0" }, { value: "webdevops/php-nginx:7.0", label: "webdevops/php-nginx:7.0" }, { value: "webdevops/php-apache:5.6", label: "webdevops/php-apache:5.6" }, { value: "webdevops/php-nginx:5.6", label: "webdevops/php-nginx:5.6" }, { value: "webdevops/php-apache:8.2-alpine", label: "webdevops/php-apache:8.2-alpine" }, { value: "webdevops/php-nginx:8.2-alpine", label: "webdevops/php-nginx:8.2-alpine" }, { value: "webdevops/php-apache:8.1-alpine", label: "webdevops/php-apache:8.1-alpine" }, { value: "webdevops/php-nginx:8.1-alpine", label: "webdevops/php-nginx:8.1-alpine" }, { value: "webdevops/php-apache:8.0-alpine", label: "webdevops/php-apache:8.0-alpine" }, { value: "webdevops/php-nginx:8.0-alpine", label: "webdevops/php-nginx:8.0-alpine" }, { value: "webdevops/php-apache:7.4-alpine", label: "webdevops/php-apache:7.4-alpine" }, { value: "webdevops/php-nginx:7.4-alpine", label: "webdevops/php-nginx:7.4-alpine" }, { value: "webdevops/php-apache:7.3-alpine", label: "webdevops/php-apache:7.3-alpine" }, { value: "webdevops/php-nginx:7.3-alpine", label: "webdevops/php-nginx:7.3-alpine" }, { value: "webdevops/php-apache:7.2-alpine", label: "webdevops/php-apache:7.2-alpine" }, { value: "webdevops/php-nginx:7.2-alpine", label: "webdevops/php-nginx:7.2-alpine" }, { value: "webdevops/php-apache:7.1-alpine", label: "webdevops/php-apache:7.1-alpine" }, { value: "php:8.1-fpm", label: "php:8.1-fpm" }, { value: "php:8.0-fpm", label: "php:8.0-fpm" }, { value: "php:8.1-fpm-alpine", label: "php:8.1-fpm-alpine" }, { value: "php:8.0-fpm-alpine", label: "php:8.0-fpm-alpine" } ]; const pythonVersions = [ { value: "python:3.10-alpine", label: "python:3.10-alpine" }, { value: "python:3.10-buster", label: "python:3.10-buster" }, { value: "python:3.10-bullseye", label: "python:3.10-bullseye" }, { value: "python:3.10-slim-bullseye", label: "python:3.10-slim-bullseye" }, { value: "python:3.9-alpine", label: "python:3.9-alpine" }, { value: "python:3.9-buster", label: "python:3.9-buster" }, { value: "python:3.9-bullseye", label: "python:3.9-bullseye" }, { value: "python:3.9-slim-bullseye", label: "python:3.9-slim-bullseye" }, { value: "python:3.8-alpine", label: "python:3.8-alpine" }, { value: "python:3.8-buster", label: "python:3.8-buster" }, { value: "python:3.8-bullseye", label: "python:3.8-bullseye" }, { value: "python:3.8-slim-bullseye", label: "python:3.8-slim-bullseye" }, { value: "python:3.7-alpine", label: "python:3.7-alpine" }, { value: "python:3.7-buster", label: "python:3.7-buster" }, { value: "python:3.7-bullseye", label: "python:3.7-bullseye" }, { value: "python:3.7-slim-bullseye", label: "python:3.7-slim-bullseye" } ]; const herokuVersions = [ { value: "heroku/builder:22", label: "heroku/builder:22" }, { value: "heroku/buildpacks:20", label: "heroku/buildpacks:20" }, { value: "heroku/builder-classic:22", label: "heroku/builder-classic:22" } ]; let payload = { baseImage: null, baseBuildImage: null, baseImages: [], baseBuildImages: [] }; if (nodeBased.includes(buildPack)) { if (deploymentType === "static") { payload.baseImage = (0, import_common.isARM)(process.arch) ? "nginx:alpine" : "webdevops/nginx:alpine"; payload.baseImages = (0, import_common.isARM)(process.arch) ? staticVersions.filter((version) => !version.value.includes("webdevops")) : staticVersions; payload.baseBuildImage = "node:lts"; payload.baseBuildImages = nodeVersions; } else { payload.baseImage = "node:lts"; payload.baseImages = nodeVersions; payload.baseBuildImage = "node:lts"; payload.baseBuildImages = nodeVersions; } } if (staticApps.includes(buildPack)) { payload.baseImage = (0, import_common.isARM)(process.arch) ? "nginx:alpine" : "webdevops/nginx:alpine"; payload.baseImages = (0, import_common.isARM)(process.arch) ? staticVersions.filter((version) => !version.value.includes("webdevops")) : staticVersions; payload.baseBuildImage = "node:lts"; payload.baseBuildImages = nodeVersions; } if (buildPack === "python") { payload.baseImage = "python:3.10-alpine"; payload.baseImages = pythonVersions; } if (buildPack === "rust") { payload.baseImage = "rust:latest"; payload.baseBuildImage = "rust:latest"; payload.baseImages = rustVersions; payload.baseBuildImages = rustVersions; } if (buildPack === "deno") { payload.baseImage = "denoland/deno:latest"; } if (buildPack === "php") { payload.baseImage = (0, import_common.isARM)(process.arch) ? "php:8.1-fpm-alpine" : "webdevops/php-apache:8.2-alpine"; payload.baseImages = (0, import_common.isARM)(process.arch) ? phpVersions.filter((version) => !version.value.includes("webdevops")) : phpVersions; } if (buildPack === "laravel") { payload.baseImage = (0, import_common.isARM)(process.arch) ? "php:8.1-fpm-alpine" : "webdevops/php-apache:8.2-alpine"; payload.baseImages = (0, import_common.isARM)(process.arch) ? phpVersions.filter((version) => !version.value.includes("webdevops")) : phpVersions; payload.baseBuildImage = "node:18"; payload.baseBuildImages = nodeVersions; } if (buildPack === "heroku") { payload.baseImage = "heroku/buildpacks:20"; payload.baseImages = herokuVersions; } return payload; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { deployApplication, generateConfigHash, getApplicationFromDB, setDefaultBaseImage });