UNPKG

@topgroup/diginext

Version:

A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.

118 lines (117 loc) 5.62 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DeployService = void 0; const app_config_1 = require("../app.config"); const build_and_deploy_1 = require("../modules/build/build-and-deploy"); const create_build_slug_1 = require("../modules/deploy/create-build-slug"); const deploy_build_1 = require("../modules/deploy/deploy-build"); const deploy_build_v2_1 = require("../modules/deploy/deploy-build-v2"); const deploy_release_1 = require("../modules/deploy/deploy-release"); const promote_deploy_environment_1 = require("../modules/deploy/promote-deploy-environment"); const plugins_1 = require("../plugins"); class DeployService { constructor(ownership) { this.ownership = ownership; } /** * Build container image first, then deploy that build to target deploy environment. */ async buildAndDeploy(buildParams, deployParams, ownership) { const { DB } = await Promise.resolve().then(() => __importStar(require("../modules/api/DB"))); // but why??? let app = await DB.updateOne("app", { slug: buildParams.appSlug }, { updatedBy: ownership.owner._id }); // change cluster (if needed) if (deployParams.cluster) { const cluster = await DB.findOne("cluster", { slug: deployParams.cluster }, { subpath: "/all" }); if (cluster) app = await DB.updateOne("app", { _id: app._id }, { [`deployEnvironment.${deployParams.env}.cluster`]: cluster.slug }); } // change container registry (if needed) if (buildParams.registrySlug) deployParams.registry = buildParams.registrySlug; if (deployParams.registry) { const registry = await DB.findOne("registry", { slug: deployParams.registry }, { subpath: "/all" }); if (registry) app = await DB.updateOne("app", { _id: app._id }, { [`deployEnvironment.${deployParams.env}.registry`]: registry.slug }); } // ownership const author = ownership.owner || (await DB.findOne("user", { _id: deployParams.author }, { populate: ["activeWorkspace"] })); const workspace = author.activeWorkspace; const deployBuildOptions = { ...deployParams, env: deployParams.env || buildParams.env || "dev", cliVersion: buildParams.cliVersion, owner: author, workspace, }; // check for version compatibility between CLI & SERVER: buildParams.user = author; if (buildParams.cliVersion) { const breakingChangeVersionCli = buildParams.cliVersion.split(".")[1]; const serverVersion = (0, plugins_1.currentVersion)(); const breakingChangeVersionServer = serverVersion.split(".")[1]; if (breakingChangeVersionCli != breakingChangeVersionServer) { throw new Error(`Your CLI version (${buildParams.cliVersion}) is much lower than the BUILD SERVER version (${serverVersion}). Please update your CLI with: "dx update"`); } } // if (typeof buildParams.buildWatch === "undefined") buildParams.buildWatch = true; // start build in background process: // log(`buildAndDeploy > buildParams.buildTag :>>`, buildParams.buildTag); (0, build_and_deploy_1.buildAndDeploy)(buildParams, deployBuildOptions); const { appSlug, buildTag } = buildParams; const buildServerUrl = app_config_1.Config.BASE_URL; const SOCKET_ROOM = (0, create_build_slug_1.createBuildSlug)({ projectSlug: app.projectSlug, appSlug, buildTag }); const logURL = `${buildServerUrl}/build/logs?build_slug=${SOCKET_ROOM}&env=${deployParams.env}`; return { logURL }; } /** * Deploy from a build (V2 - Deprecated soon) * @deprecated */ async deployBuild(build, options) { return (0, deploy_build_1.deployBuild)(build, options); } /** * Deploy from a build (V2) */ async deployBuildV2(build, options) { return (0, deploy_build_v2_1.deployBuildV2)(build, options); } /** * Deploy from a release (V2) */ async deployRelease(release, options) { return (0, deploy_release_1.deployRelease)(release, options); } /** * Promote a deploy environment to another deploy environment (default: "production"). */ async promoteDeployEnvironment(options) { return (0, promote_deploy_environment_1.promoteDeployEnvironment)(options); } } exports.default = DeployService; exports.DeployService = DeployService;