@topgroup/diginext
Version:
A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.
118 lines (117 loc) • 5.62 kB
JavaScript
;
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;