UNPKG

@starship-ci/generator

Version:

Kubernetes manifest generator for Starship deployments

149 lines (148 loc) 5.11 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.BaseRelayerBuilder = void 0; const helpers = __importStar(require("../../helpers")); /** * Base class for relayer builders with common functionality */ class BaseRelayerBuilder { config; relayer; generators = []; constructor(relayer, config) { this.config = config; this.relayer = relayer; } /** * Generate all manifests for the relayer by running sub-generators */ generate() { return this.generators.flatMap((generator) => generator.generate()); } /** * Generate common metadata for relayer resources */ getCommonMetadata(resourceType) { return { name: `${this.relayer.type}-${this.relayer.name}`, labels: { ...helpers.getCommonLabels(this.config), 'app.kubernetes.io/component': 'relayer', 'app.kubernetes.io/part-of': 'starship', 'app.kubernetes.io/role': this.relayer.type, 'app.kubernetes.io/name': `${this.relayer.type}-${this.relayer.name}` } }; } /** * Get chain configuration by ID */ getChainConfig(chainId) { const chain = this.config.chains.find((c) => String(c.id) === chainId); if (!chain) { throw new Error(`Chain ${chainId} not found in configuration`); } return chain; } /** * Get chain hostname */ getChainHostname(chainId) { const chain = this.getChainConfig(chainId); return helpers.getChainName(String(chain.id)); } /** * Get image for relayer (custom or default) */ getImage() { if (!this.relayer.image) { throw new Error(`No image configured for relayer ${this.relayer.name} of type ${this.relayer.type}`); } return this.relayer.image; } /** * Generate common volumes for relayers */ generateVolumes() { return [ { name: 'relayer', emptyDir: {} }, { name: 'relayer-config', configMap: { name: `${this.relayer.type}-${this.relayer.name}` } }, { name: 'keys', configMap: { name: 'keys' } }, { name: 'scripts', configMap: { name: 'setup-scripts' } } ]; } /** * Generate common environment variables */ generateCommonEnv() { return [ { name: 'KEYS_CONFIG', value: '/keys/keys.json' }, { name: 'NAMESPACE', valueFrom: { fieldRef: { fieldPath: 'metadata.namespace' } } } ]; } /** * Generate wait init containers for all chains */ generateWaitInitContainers() { return this.relayer.chains.map((chainId) => { const chain = this.getChainConfig(chainId); const chainName = helpers.getChainName(String(chain.id)); return { name: `init-${chainName}`, image: 'ghcr.io/cosmology-tech/starship/wait-for-service:v0.1.0', imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent', command: ['bash', '-c'], args: [ `echo "Waiting for ${chainName} service..."\nwait-for-service ${chainName}-genesis.$(NAMESPACE).svc.cluster.local:26657` ], env: [ { name: 'NAMESPACE', valueFrom: { fieldRef: { fieldPath: 'metadata.namespace' } } } ] }; }); } /** * Generate common volume mounts */ generateCommonVolumeMounts() { return [ { mountPath: '/root', name: 'relayer' }, { mountPath: '/configs', name: 'relayer-config' }, { mountPath: '/keys', name: 'keys' }, { mountPath: '/scripts', name: 'scripts' } ]; } } exports.BaseRelayerBuilder = BaseRelayerBuilder;