UNPKG

@topgroup/diginext

Version:

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

70 lines (69 loc) 2.98 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DeploymentYamlProcessor = void 0; const js_yaml_1 = __importDefault(require("js-yaml")); const slug_1 = require("../../../plugins/slug"); class DeploymentYamlProcessor { constructor(deploymentYaml) { this.originalYaml = deploymentYaml; this.processedYamlConfigs = js_yaml_1.default.loadAll(deploymentYaml); } processDeploymentYaml() { let deploymentName = ""; let mainAppName = ""; let appVersion = ""; let newReplicas = 1; this.processedYamlConfigs.forEach((doc) => { var _a, _b; if (doc && doc.kind === "Ingress") { this.ingressConfig = doc; } if (doc && doc.kind === "Service") { this.serviceConfig = doc; } if (doc && doc.kind === "Deployment") { this.deploymentConfig = doc; // Extract deployment name deploymentName = doc.metadata.name; // Extract or generate main app name mainAppName = ((_a = doc.metadata.labels) === null || _a === void 0 ? void 0 : _a["main-app"]) || (0, slug_1.makeSlug)(doc.metadata.name).toLowerCase(); // Extract app version appVersion = ((_b = doc.metadata.labels) === null || _b === void 0 ? void 0 : _b["app-version"]) || `${mainAppName}-${Date.now()}`; // Store original replica count newReplicas = doc.spec.replicas || 1; // Temporarily set replicas to 2 to avoid downtime doc.spec.replicas = 2; // Ensure version label is set doc.metadata.labels = doc.metadata.labels || {}; doc.metadata.labels["app-version"] = appVersion; doc.metadata.labels["main-app"] = mainAppName; // Add labels to pod template doc.spec.template.metadata = doc.spec.template.metadata || {}; doc.spec.template.metadata.labels = { ...doc.spec.template.metadata.labels, "app-version": appVersion, "main-app": mainAppName, }; } }); if (!deploymentName) { throw new Error("No deployment configuration found in the YAML"); } return { deploymentName, mainAppName, appVersion, newReplicas, }; } getProcessedYaml() { if (!this.processedYamlConfigs) { throw new Error("YAML has not been processed yet"); } return this.processedYamlConfigs.map((config) => js_yaml_1.default.dump(config)).join("---\n"); } } exports.DeploymentYamlProcessor = DeploymentYamlProcessor;