Skip to content

Commit d997813

Browse files
committed
update cosmos based chain and genesis file to match helm
1 parent 1b2bc47 commit d997813

File tree

9 files changed

+221
-96
lines changed

9 files changed

+221
-96
lines changed

packages/packages/generator/__tests__/cosmos.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,9 @@ describe('Cosmos Generator Tests', () => {
118118
expect(patchConfigMap).toBeDefined();
119119
expect(patchConfigMap?.kind).toBe('ConfigMap');
120120

121-
const genesisJsonString = patchConfigMap?.data?.['genesis.json'] as string;
121+
const genesisJsonString = patchConfigMap?.data?.[
122+
'genesis.json'
123+
] as string;
122124
const genesisData = JSON.parse(genesisJsonString || '{}');
123125
expect(genesisData.app_state.staking.params.unbonding_time).toBe('5s');
124126

packages/packages/generator/src/builders/chains/cosmos/configmap.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Chain, StarshipConfig } from '@starship-ci/types';
22
import * as fs from 'fs';
3-
import { ConfigMap } from 'kubernetesjs';
43
import * as path from 'path';
54

65
import { DefaultsManager } from '../../../defaults';
@@ -125,7 +124,11 @@ export class SetupScriptsConfigMapGenerator implements IGenerator {
125124
private chain: Chain;
126125
private scriptManager: ScriptManager;
127126

128-
constructor(chain: Chain, config: StarshipConfig, scriptManager: ScriptManager) {
127+
constructor(
128+
chain: Chain,
129+
config: StarshipConfig,
130+
scriptManager: ScriptManager
131+
) {
129132
this.config = config;
130133
this.chain = chain;
131134
this.scriptManager = scriptManager;
@@ -242,15 +245,16 @@ export class IcsConsumerProposalConfigMapGenerator implements IGenerator {
242245
const providerChain = this.config.chains.find(
243246
(c) => c.id === this.chain.ics.provider
244247
);
245-
248+
246249
if (!providerChain) {
247250
console.warn(
248251
`Warning: ICS Provider chain '${this.chain.ics.provider}' not found. Skipping ICS proposal for '${this.chain.id}'.`
249252
);
250253
return [];
251254
}
252255

253-
const processedProviderChain = this.defaultsManager.processChain(providerChain);
256+
const processedProviderChain =
257+
this.defaultsManager.processChain(providerChain);
254258

255259
const proposal = {
256260
title: `Add ${this.chain.name} consumer chain`,
@@ -313,13 +317,21 @@ export class CosmosConfigMapGenerator implements IGenerator {
313317
private scriptManager: ScriptManager;
314318
private generators: IGenerator[];
315319

316-
constructor(chain: Chain, config: StarshipConfig, scriptManager: ScriptManager) {
320+
constructor(
321+
chain: Chain,
322+
config: StarshipConfig,
323+
scriptManager: ScriptManager
324+
) {
317325
this.config = config;
318326
this.chain = chain;
319327
this.scriptManager = scriptManager;
320-
328+
321329
this.generators = [
322-
new SetupScriptsConfigMapGenerator(this.chain, this.config, this.scriptManager),
330+
new SetupScriptsConfigMapGenerator(
331+
this.chain,
332+
this.config,
333+
this.scriptManager
334+
),
323335
new GenesisPatchConfigMapGenerator(this.chain, this.config),
324336
new IcsConsumerProposalConfigMapGenerator(this.chain, this.config)
325337
];
@@ -340,7 +352,7 @@ export class GlobalConfigMapGenerator implements IGenerator {
340352

341353
constructor(config: StarshipConfig, projectRoot?: string) {
342354
this.config = config;
343-
355+
344356
this.generators = [
345357
new KeysConfigMapGenerator(this.config, projectRoot),
346358
new GlobalScriptsConfigMapGenerator(this.config, projectRoot)

packages/packages/generator/src/builders/chains/cosmos/genesis.ts

Lines changed: 72 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Container, StatefulSet } from 'kubernetesjs';
44
import { DefaultsManager } from '../../../defaults';
55
import * as helpers from '../../../helpers';
66
import { ScriptManager } from '../../../scripts';
7-
import { IGenerator, Manifest } from '../../../types';
7+
import { IGenerator } from '../../../types';
88
import { getGeneratorVersion } from '../../../version';
99

1010
export class CosmosGenesisStatefulSetGenerator implements IGenerator {
@@ -13,7 +13,11 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
1313
private scriptManager: ScriptManager;
1414
private defaultsManager: DefaultsManager;
1515

16-
constructor(chain: Chain, config: StarshipConfig, scriptManager: ScriptManager) {
16+
constructor(
17+
chain: Chain,
18+
config: StarshipConfig,
19+
scriptManager: ScriptManager
20+
) {
1721
this.config = config;
1822
this.chain = chain;
1923
this.scriptManager = scriptManager;
@@ -36,7 +40,7 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
3640

3741
generate(): Array<StatefulSet> {
3842
const processedChain = this.defaultsManager.processChain(this.chain);
39-
43+
4044
return [
4145
{
4246
apiVersion: 'apps/v1',
@@ -74,7 +78,9 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
7478
},
7579
spec: {
7680
...((processedChain as any).imagePullSecrets
77-
? helpers.generateImagePullSecrets((processedChain as any).imagePullSecrets)
81+
? helpers.generateImagePullSecrets(
82+
(processedChain as any).imagePullSecrets
83+
)
7884
: {}),
7985
initContainers: this.createInitContainers(processedChain),
8086
containers: this.createMainContainers(processedChain),
@@ -109,7 +115,9 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
109115
if (chain.ics?.enabled) {
110116
// Add wait container for provider chain
111117
const providerChainId = chain.ics.provider || 'cosmoshub';
112-
initContainers.push(this.createIcsWaitInitContainer([providerChainId], exposerPort));
118+
initContainers.push(
119+
this.createIcsWaitInitContainer([providerChainId], exposerPort)
120+
);
113121
initContainers.push(this.createIcsInitContainer(chain, exposerPort));
114122
}
115123

@@ -254,11 +262,13 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
254262
// Need to get provider chain info - for now using a placeholder
255263
// In real implementation, this would need access to provider chain config
256264
const providerChainId = chain.ics?.provider || 'cosmoshub';
257-
const providerHostname = helpers.getChainName(providerChainId);
258-
265+
const providerChain = this.config.chains.find(
266+
(c) => c.id === providerChainId
267+
);
268+
259269
return {
260270
name: 'init-ics',
261-
image: chain.image, // Should use provider chain image in real implementation
271+
image: providerChain?.image,
262272
imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent',
263273
env: [
264274
...helpers.getDefaultEnvVars(chain),
@@ -273,7 +283,11 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
273283
},
274284
{ name: 'KEYS_CONFIG', value: '/configs/keys.json' }
275285
],
276-
command: ['bash', '-c', this.getIcsInitScript(chain, providerHostname)],
286+
command: [
287+
'bash',
288+
'-c',
289+
this.getIcsInitScript(chain, providerChain, exposerPort)
290+
],
277291
resources: helpers.getNodeResources(chain, this.config),
278292
volumeMounts: [
279293
{ mountPath: '/proposal', name: 'proposal' },
@@ -284,17 +298,16 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
284298
};
285299
}
286300

287-
private createIcsWaitInitContainer(chainIDs: string[], port: number): Container {
288-
return helpers.generateWaitInitContainer(
289-
chainIDs,
290-
port,
291-
this.config
292-
);
301+
private createIcsWaitInitContainer(
302+
chainIDs: string[],
303+
port: number
304+
): Container {
305+
return helpers.generateWaitInitContainer(chainIDs, port, this.config);
293306
}
294307

295308
private createValidatorContainer(chain: Chain): Container {
296309
const toBuild = chain.build?.enabled || chain.upgrade?.enabled;
297-
310+
298311
return {
299312
name: 'validator',
300313
image: chain.image,
@@ -307,10 +320,19 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
307320
value: String(chain.faucet?.enabled || false)
308321
},
309322
{ name: 'SLOGFILE', value: 'slog.slog' },
310-
...(toBuild ? [
311-
{ name: 'DAEMON_NAME', value: chain.binary || helpers.getChainId(chain) },
312-
{ name: 'DAEMON_HOME', value: chain.home || `/home/validator/.${helpers.getChainId(chain)}` }
313-
] : []),
323+
...(toBuild
324+
? [
325+
{
326+
name: 'DAEMON_NAME',
327+
value: chain.binary || helpers.getChainId(chain)
328+
},
329+
{
330+
name: 'DAEMON_HOME',
331+
value:
332+
chain.home || `/home/validator/.${helpers.getChainId(chain)}`
333+
}
334+
]
335+
: []),
314336
...(chain.env || []).map((env: any) => ({
315337
name: env.name,
316338
value: String(env.value)
@@ -397,7 +419,10 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
397419
const faucet = chain.faucet as FaucetConfig;
398420
return {
399421
name: 'faucet',
400-
image: faucet.image || this.config.faucet?.image || 'ghcr.io/cosmology-tech/starship/faucet:latest',
422+
image:
423+
faucet.image ||
424+
this.config.faucet?.image ||
425+
'ghcr.io/cosmology-tech/starship/faucet:latest',
401426
imagePullPolicy: this.config.images?.imagePullPolicy || 'IfNotPresent',
402427
env: [
403428
{
@@ -415,7 +440,10 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
415440
{ name: 'FAUCET_REFILL_FACTOR', value: '8' },
416441
{ name: 'FAUCET_REFILL_THRESHOLD', value: '20' },
417442
{ name: 'FAUCET_COOLDOWN_TIME', value: '0' },
418-
{ name: 'COINS', value: chain.coins || `1000000000000000000${chain.denom}` },
443+
{
444+
name: 'COINS',
445+
value: chain.coins || `1000000000000000000${chain.denom}`
446+
},
419447
{ name: 'HD_PATH', value: chain.hdPath || "m/44'/118'/0'/0/0" }
420448
],
421449
command: ['bash', '-c', this.getCosmjsFaucetScript()],
@@ -452,9 +480,15 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
452480
name: 'FAUCET_HTTP_PORT',
453481
value: String(faucet.ports?.rest || 8000)
454482
},
455-
{ name: 'FAUCET_CHAIN_BINARY', value: chain.binary || helpers.getChainId(chain) },
483+
{
484+
name: 'FAUCET_CHAIN_BINARY',
485+
value: chain.binary || helpers.getChainId(chain)
486+
},
456487
{ name: 'FAUCET_CHAIN_ID', value: helpers.getChainId(chain) },
457-
{ name: 'COINS', value: chain.coins || `1000000000000000000${chain.denom}` }
488+
{
489+
name: 'COINS',
490+
value: chain.coins || `1000000000000000000${chain.denom}`
491+
}
458492
],
459493
command: ['bash', '-c', this.getStarshipFaucetScript()],
460494
resources: helpers.getResourceObject(
@@ -478,7 +512,7 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
478512

479513
private getGenesisInitScript(chain: Chain): string {
480514
const toBuild = chain.build?.enabled || chain.upgrade?.enabled;
481-
515+
482516
let script = `
483517
VAL_INDEX=\${HOSTNAME##*-}
484518
echo "Validator Index: $VAL_INDEX"
@@ -528,7 +562,7 @@ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account ${balance.address} ${balance.a
528562

529563
private getConfigInitScript(chain: Chain): string {
530564
const toBuild = chain.build?.enabled || chain.upgrade?.enabled;
531-
565+
532566
let script = `
533567
VAL_INDEX=\${HOSTNAME##*-}
534568
echo "Validator Index: $VAL_INDEX"
@@ -570,9 +604,7 @@ bash -e /scripts/update-config.sh
570604

571605
private getValidatorStartScript(chain: Chain): string {
572606
const toBuild = chain.build?.enabled || chain.upgrade?.enabled;
573-
const chainBin = chain.binary || helpers.getChainId(chain);
574-
const chainHome = chain.home || `/home/validator/.${helpers.getChainId(chain)}`;
575-
607+
576608
return `#!/bin/bash
577609
set -euo pipefail
578610
@@ -656,28 +688,33 @@ done
656688
`.trim();
657689
}
658690

659-
private getIcsInitScript(chain: Chain, providerHostname: string): string {
691+
private getIcsInitScript(
692+
chain: Chain,
693+
providerChain: Chain,
694+
exposerPort: number
695+
): string {
696+
const providerHostname = helpers.getChainName(providerChain.id);
660697
return `
661698
export
662699
663700
echo "Fetching priv keys from provider exposer"
664-
curl -s http://${providerHostname}-genesis.$NAMESPACE.svc.cluster.local:8081/priv_keys | jq > $CHAIN_DIR/config/provider_priv_validator_key.json
701+
curl -s http://${providerHostname}-genesis.$NAMESPACE.svc.cluster.local:${exposerPort}/priv_keys | jq > $CHAIN_DIR/config/provider_priv_validator_key.json
665702
cat $CHAIN_DIR/config/provider_priv_validator_key.json
666703
667704
echo "Replace provider priv validator key with provider keys"
668705
mv $CHAIN_DIR/config/priv_validator_key.json $CHAIN_DIR/config/previous_priv_validator_key.json
669706
mv $CHAIN_DIR/config/provider_priv_validator_key.json $CHAIN_DIR/config/priv_validator_key.json
670707
671708
echo "Create consumer addition proposal"
672-
DENOM=${chain.ics?.provider ? '$DENOM' : 'uatom'} \\
673-
CHAIN_ID=${chain.ics?.provider || 'cosmoshub'} \\
674-
CHAIN_BIN=${chain.binary || '$CHAIN_BIN'} \\
709+
DENOM=${providerChain?.denom} \\
710+
CHAIN_ID=${providerChain?.id} \\
711+
CHAIN_BIN=${providerChain?.binary || '$CHAIN_BIN'} \\
675712
NODE_URL=http://${providerHostname}-genesis.$NAMESPACE.svc.cluster.local:26657 \\
676713
PROPOSAL_FILE=/proposal/proposal.json \\
677714
bash -e /scripts/create-ics.sh
678715
679716
echo "create ccv state file"
680-
${chain.binary || '$CHAIN_BIN'} query provider consumer-genesis ${helpers.getChainId(chain)} \\
717+
${providerChain?.binary || '$CHAIN_BIN'} query provider consumer-genesis ${chain.id} \\
681718
--node http://${providerHostname}-genesis.$NAMESPACE.svc.cluster.local:26657 \\
682719
-o json > $CHAIN_DIR/config/ccv-state.json
683720
cat $CHAIN_DIR/config/ccv-state.json | jq

packages/packages/generator/src/builders/chains/cosmos/index.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import { StarshipConfig } from '@starship-ci/types';
22

33
import { ScriptManager } from '../../../scripts';
44
import { IGenerator, Manifest } from '../../../types';
5-
import { CosmosConfigMapGenerator, GlobalConfigMapGenerator } from './configmap';
5+
import {
6+
CosmosConfigMapGenerator,
7+
GlobalConfigMapGenerator
8+
} from './configmap';
69
import { CosmosServiceGenerator } from './service';
710
import { CosmosStatefulSetGenerator } from './statefulset';
811

@@ -21,9 +24,10 @@ export class CosmosBuilder implements IGenerator {
2124
this.generators = [];
2225

2326
// Filter cosmos chains
24-
const cosmosChains = this.config.chains?.filter(
25-
(chain) => chain.name !== 'ethereum' && typeof chain.id === 'string'
26-
) || [];
27+
const cosmosChains =
28+
this.config.chains?.filter(
29+
(chain) => chain.name !== 'ethereum' && typeof chain.id === 'string'
30+
) || [];
2731

2832
if (cosmosChains.length === 0) {
2933
return; // No cosmos chains to process
@@ -37,15 +41,19 @@ export class CosmosBuilder implements IGenerator {
3741
// Services
3842
this.generators.push(new CosmosServiceGenerator(chain, this.config));
3943

40-
// StatefulSets
41-
this.generators.push(new CosmosStatefulSetGenerator(chain, this.config, this.scriptManager));
44+
// StatefulSets
45+
this.generators.push(
46+
new CosmosStatefulSetGenerator(chain, this.config, this.scriptManager)
47+
);
4248

4349
// ConfigMaps
44-
this.generators.push(new CosmosConfigMapGenerator(chain, this.config, this.scriptManager));
50+
this.generators.push(
51+
new CosmosConfigMapGenerator(chain, this.config, this.scriptManager)
52+
);
4553
});
4654
}
4755

4856
generate(): Manifest[] {
4957
return this.generators.flatMap((generator) => generator.generate());
5058
}
51-
}
59+
}

0 commit comments

Comments
 (0)