UNPKG

@starship-ci/generator

Version:

Kubernetes manifest generator for Starship deployments

257 lines (256 loc) 10.2 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.RegistryBuilder = exports.RegistryDeploymentGenerator = exports.RegistryServiceGenerator = exports.RegistryConfigMapGenerator = void 0; const helpers = __importStar(require("../helpers")); /** * ConfigMap generator for Registry service * Handles chain configurations and asset lists */ class RegistryConfigMapGenerator { config; constructor(config) { this.config = config; } generate() { const chainConfigs = {}; const assetLists = {}; this.config.chains.forEach((chain) => { const hostname = helpers.getChainName(String(chain.id)); chainConfigs[`${hostname}.json`] = JSON.stringify({ chain_name: chain.name, api: { rpc: `http://${hostname}-genesis.$(NAMESPACE).svc.cluster.local:26657`, grpc: `http://${hostname}-genesis.$(NAMESPACE).svc.cluster.local:9090`, rest: `http://${hostname}-genesis.$(NAMESPACE).svc.cluster.local:1317` }, assets: chain.assets || [] }); assetLists[`${hostname}.json`] = JSON.stringify({ chain_name: chain.name, assets: chain.assets || [] }); }); return [ { apiVersion: 'v1', kind: 'ConfigMap', metadata: { name: 'registry-config', labels: { ...helpers.getCommonLabels(this.config), 'app.kubernetes.io/component': 'registry', 'app.kubernetes.io/part-of': 'starship', 'app.kubernetes.io/name': 'registry-config' } }, data: { ...chainConfigs, ...assetLists } } ]; } } exports.RegistryConfigMapGenerator = RegistryConfigMapGenerator; /** * Service generator for Registry service */ class RegistryServiceGenerator { config; constructor(config) { this.config = config; } generate() { return [ { apiVersion: 'v1', kind: 'Service', metadata: { name: 'registry', labels: { ...helpers.getCommonLabels(this.config), 'app.kubernetes.io/component': 'registry', 'app.kubernetes.io/part-of': 'starship', 'app.kubernetes.io/name': 'registry' } }, spec: { selector: { app: 'registry' }, ports: [ { name: 'http', port: 8080, targetPort: '8080' }, { name: 'grpc', port: 9090, targetPort: '9090' } ] } } ]; } } exports.RegistryServiceGenerator = RegistryServiceGenerator; /** * Deployment generator for Registry service */ class RegistryDeploymentGenerator { config; constructor(config) { this.config = config; } generate() { const volumeMounts = this.config.chains.map((chain) => ({ name: `chain-${helpers.getChainName(String(chain.id))}`, mountPath: `/chains/${chain.id}` })); const volumes = this.config.chains.map((chain) => ({ name: `chain-${helpers.getChainName(String(chain.id))}`, configMap: { name: `chain-${helpers.getChainName(String(chain.id))}` } })); return [ { apiVersion: 'apps/v1', kind: 'Deployment', metadata: { name: 'registry', labels: { ...helpers.getCommonLabels(this.config), 'app.kubernetes.io/component': 'registry', 'app.kubernetes.io/part-of': 'starship', 'app.kubernetes.io/name': 'registry' } }, spec: { replicas: 1, selector: { matchLabels: { app: 'registry' } }, template: { metadata: { labels: { app: 'registry', ...helpers.getCommonLabels(this.config) } }, spec: { containers: [ { name: 'registry', image: this.config.registry?.image, ports: [ { name: 'http', containerPort: 8080 }, { name: 'grpc', containerPort: 9090 } ], env: [ { name: 'REGISTRY_CHAIN_CLIENT_RPCS', value: helpers.getChainRpcAddrs(this.config.chains, this.config) }, { name: 'REGISTRY_CHAIN_API_RPCS', value: helpers.getChainRpcAddrs(this.config.chains, this.config) }, { name: 'REGISTRY_CHAIN_API_GRPCS', value: helpers.getChainGrpcAddrs(this.config.chains, this.config) }, { name: 'REGISTRY_CHAIN_API_RESTS', value: helpers.getChainRestAddrs(this.config.chains, this.config) }, { name: 'REGISTRY_CHAIN_CLIENT_EXPOSERS', value: helpers.getChainExposerAddrs(this.config.chains) } ], volumeMounts, resources: helpers.getResourceObject(this.config.registry?.resources), readinessProbe: { httpGet: { path: '/health', port: '8080' }, initialDelaySeconds: 5, periodSeconds: 10 }, livenessProbe: { httpGet: { path: '/health', port: '8080' }, initialDelaySeconds: 15, periodSeconds: 20 } } ], volumes } } } } ]; } } exports.RegistryDeploymentGenerator = RegistryDeploymentGenerator; /** * Main Registry builder * Orchestrates ConfigMap, Service, and Deployment generation and file output */ class RegistryBuilder { config; generators; constructor(config) { this.config = config; this.generators = []; if (this.config.registry?.enabled === true) { this.generators = [ new RegistryConfigMapGenerator(config), new RegistryServiceGenerator(config), new RegistryDeploymentGenerator(config) ]; } } generate() { return this.generators.flatMap((generator) => generator.generate()); } } exports.RegistryBuilder = RegistryBuilder;