@starship-ci/generator
Version:
Kubernetes manifest generator for Starship deployments
169 lines (168 loc) • 6.53 kB
JavaScript
"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.FrontendBuilder = exports.FrontendDeploymentGenerator = exports.FrontendServiceGenerator = void 0;
const helpers = __importStar(require("../helpers"));
/**
* Service generator for Frontend services
*/
class FrontendServiceGenerator {
config;
frontend;
constructor(frontend, config) {
this.config = config;
this.frontend = frontend;
}
generate() {
return [
{
apiVersion: 'v1',
kind: 'Service',
metadata: {
name: this.frontend.name,
labels: {
'app.kubernetes.io/name': this.frontend.name,
'app.kubernetes.io/component': 'frontend',
'app.kubernetes.io/part-of': 'starship',
...helpers.getCommonLabels(this.config)
}
},
spec: {
clusterIP: 'None',
ports: this.frontend.ports?.rest
? [
{
name: 'http',
port: this.frontend.ports.rest,
protocol: 'TCP',
targetPort: 'http'
}
]
: [],
selector: {
'app.kubernetes.io/name': this.frontend.name
}
}
}
];
}
}
exports.FrontendServiceGenerator = FrontendServiceGenerator;
/**
* Deployment generator for Frontend services
*/
class FrontendDeploymentGenerator {
config;
frontend;
constructor(frontend, config) {
this.config = config;
this.frontend = frontend;
}
generate() {
return [
{
apiVersion: 'apps/v1',
kind: 'Deployment',
metadata: {
name: this.frontend.name,
labels: {
'app.kubernetes.io/component': 'frontend',
'app.kubernetes.io/part-of': 'starship',
'app.kubernetes.io/name': this.frontend.name,
...helpers.getCommonLabels(this.config)
}
},
spec: {
replicas: this.frontend.replicas || 1,
revisionHistoryLimit: 3,
selector: {
matchLabels: {
'app.kubernetes.io/instance': this.frontend.name,
'app.kubernetes.io/name': this.frontend.name
}
},
template: {
metadata: {
annotations: {
quality: 'release',
role: 'frontend',
sla: 'high',
tier: 'frontend'
},
labels: {
...helpers.getCommonLabels(this.config),
'app.kubernetes.io/instance': this.frontend.name,
'app.kubernetes.io/type': this.frontend.type,
'app.kubernetes.io/name': this.frontend.name
}
},
spec: {
containers: [
{
name: this.frontend.name,
image: this.frontend.image,
imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent',
ports: this.frontend.ports?.rest
? [
{
name: 'http',
containerPort: this.frontend.ports.rest,
protocol: 'TCP'
}
]
: [],
env: this.frontend.env || [],
resources: helpers.getResourceObject(this.frontend.resources || { cpu: '0.2', memory: '200M' })
}
]
}
}
}
}
];
}
}
exports.FrontendDeploymentGenerator = FrontendDeploymentGenerator;
/**
* Main Frontend builder
*/
class FrontendBuilder {
config;
generators;
constructor(config) {
this.config = config;
this.generators = [];
if (config.frontends && config.frontends.length > 0) {
config.frontends.forEach((frontend) => {
this.generators.push(new FrontendServiceGenerator(frontend, config));
this.generators.push(new FrontendDeploymentGenerator(frontend, config));
});
}
}
generate() {
return this.generators.flatMap((generator) => generator.generate());
}
}
exports.FrontendBuilder = FrontendBuilder;