UNPKG

@starship-ci/generator

Version:

Kubernetes manifest generator for Starship deployments

237 lines (236 loc) 9.21 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.ExplorerBuilder = exports.ExplorerDeploymentGenerator = exports.ExplorerServiceGenerator = exports.ExplorerConfigMapGenerator = void 0; const helpers = __importStar(require("../helpers")); const version_1 = require("../version"); /** * ConfigMap generator for Explorer service * Handles chain configurations for the explorer */ class ExplorerConfigMapGenerator { config; constructor(config) { this.config = config; } generate() { const chainConfigs = {}; this.config.chains.forEach((chain) => { const hostname = helpers.getChainName(String(chain.id)); const host = this.config.explorer?.localhost ? 'localhost' : `${hostname}-genesis.$(NAMESPACE).svc.cluster.local`; chainConfigs[`${chain.id}.json`] = JSON.stringify({ chain_name: chain.id, coingecko: chain.name, api: this.config.ingress?.enabled && this.config.ingress.host ? `https://rest.${chain.id}-genesis.${this.config.ingress.host.replace('*.', '')}:443` : `http://${host}:${chain.ports?.rest || 1317}`, rpc: [ this.config.ingress?.enabled && this.config.ingress.host ? `https://rpc.${chain.id}-genesis.${this.config.ingress.host.replace('*.', '')}:443` : `http://${host}:${chain.ports?.rpc || 26657}` ], snapshot_provider: '', sdk_version: '0.45.6', coin_type: chain.coinType, min_tx_fee: '3000', addr_prefix: chain.prefix, logo: '', assets: [ { base: chain.denom, symbol: chain.prefix?.toUpperCase(), exponent: '6', coingecko_id: chain.id, logo: '' } ] }); }); return [ { apiVersion: 'v1', kind: 'ConfigMap', metadata: { name: 'explorer', labels: { ...helpers.getCommonLabels(this.config), 'app.kubernetes.io/component': 'explorer', 'app.kubernetes.io/part-of': 'starship', 'app.kubernetes.io/name': 'explorer' } }, data: chainConfigs } ]; } } exports.ExplorerConfigMapGenerator = ExplorerConfigMapGenerator; /** * Service generator for Explorer service */ class ExplorerServiceGenerator { config; constructor(config) { this.config = config; } generate() { return [ { apiVersion: 'v1', kind: 'Service', metadata: { name: 'explorer', labels: { ...helpers.getCommonLabels(this.config), 'app.kubernetes.io/component': 'explorer', 'app.kubernetes.io/part-of': 'starship', 'app.kubernetes.io/name': 'explorer' } }, spec: { clusterIP: 'None', ports: [ { name: 'http', port: 8080, protocol: 'TCP', targetPort: '8080' } ], selector: { 'app.kubernetes.io/name': 'explorer' } } } ]; } } exports.ExplorerServiceGenerator = ExplorerServiceGenerator; /** * Deployment generator for Explorer service */ class ExplorerDeploymentGenerator { config; constructor(config) { this.config = config; } generate() { return [ { apiVersion: 'apps/v1', kind: 'Deployment', metadata: { name: 'explorer', labels: { ...helpers.getCommonLabels(this.config), 'app.kubernetes.io/component': 'explorer', 'app.kubernetes.io/part-of': 'starship', 'app.kubernetes.io/name': 'explorer' } }, spec: { replicas: 1, revisionHistoryLimit: 3, selector: { matchLabels: { 'app.kubernetes.io/instance': 'explorer', 'app.kubernetes.io/name': 'explorer' } }, template: { metadata: { annotations: { quality: 'release', role: 'api-gateway', sla: 'high', tier: 'gateway' }, labels: { 'app.kubernetes.io/instance': 'explorer', 'app.kubernetes.io/type': this.config.explorer?.type || 'ping-pub', 'app.kubernetes.io/name': 'explorer', 'app.kubernetes.io/rawname': 'explorer', 'app.kubernetes.io/version': (0, version_1.getGeneratorVersion)() } }, spec: { containers: [ { name: 'explorer', image: this.config.explorer?.image || 'ghcr.io/cosmology-tech/starship/ping-pub:latest', imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', env: [{ name: 'CHAINS_CONFIG_PATH', value: '/explorer' }], ports: [ { name: 'http', containerPort: 8080, protocol: 'TCP' } ], volumeMounts: [ { name: 'explorer-config', mountPath: '/explorer' } ], resources: helpers.getResourceObject(this.config.explorer?.resources || { cpu: '0.2', memory: '512Mi' }) } ], volumes: [ { name: 'explorer-config', configMap: { name: 'explorer' } } ] } } } } ]; } } exports.ExplorerDeploymentGenerator = ExplorerDeploymentGenerator; /** * Main Explorer builder * Orchestrates ConfigMap, Service, and Deployment generation and file output */ class ExplorerBuilder { config; generators; constructor(config) { this.config = config; this.generators = []; if (this.config.explorer?.enabled === true) { this.generators = [ new ExplorerConfigMapGenerator(config), new ExplorerServiceGenerator(config), new ExplorerDeploymentGenerator(config) ]; } } generate() { return this.generators.flatMap((generator) => generator.generate()); } } exports.ExplorerBuilder = ExplorerBuilder;