@starship-ci/generator
Version:
Kubernetes manifest generator for Starship deployments
149 lines (148 loc) • 5.11 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.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;