@starship-ci/generator
Version:
Kubernetes manifest generator for Starship deployments
237 lines (236 loc) • 9.21 kB
JavaScript
;
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;