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