Skip to content

Commit

Permalink
exposing custom scripts (#181)
Browse files Browse the repository at this point in the history
* initial implementation of exposing custom scripts

* update new setup scripts for each chain

* update install script

* add defaults for install params

* run custom script e2e tests in the PR

* upgrade starship-action to rc2

* update configmap to handle file reads

* update genesis unbonding time

* add e2e tests to check 15s unbonding time for a chain

* fix typo in token transfer script

* fix setup config script

* try and update resources for multi-validator test case
  • Loading branch information
Anmol1696 committed Aug 23, 2023
1 parent 11ad9fa commit 71985da
Show file tree
Hide file tree
Showing 25 changed files with 550 additions and 100 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/pr-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:

strategy:
matrix:
config-file: [ "one-chain.yaml", "one-custom-chain.yaml", "multi-validator.yaml" ]
config-file: [ "one-chain-custom-scripts.yaml", "one-chain.yaml", "one-custom-chain.yaml", "multi-validator.yaml" ]
fail-fast: true
max-parallel: 3

Expand Down
20 changes: 20 additions & 0 deletions charts/devnet/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -285,3 +285,23 @@ defaultRelayers:
image: ghcr.io/cosmology-tech/starship/hermes:1.5.1
go-relayer:
image: ghcr.io/polymerdao/relayer-ibcx:starship-integration

defaultScripts:
createGenesis:
name: create-genesis.sh
file: scripts/create-genesis.sh
updateGenesis:
name: update-genesis.sh
file: scripts/update-genesis.sh
updateConfig:
name: update-config.sh
file: scripts/update-config.sh
createValidator:
name: create-validator.sh
file: scripts/create-validator.sh
transferTokens:
name: transfer-tokens.sh
file: scripts/transfer-tokens.sh
buildChain:
name: build-chain.sh
file: scripts/build-chain.sh
File renamed without changes.
31 changes: 31 additions & 0 deletions charts/devnet/scripts/create-genesis.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/bash

DENOM="${DENOM:=uosmo}"
COINS="${COINS:=100000000000000000uosmo}"
CHAIN_ID="${CHAIN_ID:=osmosis}"
CHAIN_BIN="${CHAIN_BIN:=osmosisd}"
CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}"
KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}"

set -eu

# check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty
CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "")

jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_ID --recover

# Add genesis keys to the keyring and self delegate initial coins
echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG)
jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test"
$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test"

echo "Creating gentx..."
$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) 5000000000$DENOM --keyring-backend="test" --chain-id $CHAIN_ID

echo "Output of gentx"
cat $CHAIN_DIR/config/gentx/*.json | jq

echo "Running collect-gentxs"
$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs

ls $CHAIN_DIR/config
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,34 +1,12 @@
#!/bin/bash

DENOM="${DENOM:=uosmo}"
COINS="${COINS:=100000000000000000uosmo}"
CHAIN_ID="${CHAIN_ID:=osmosis}"
CHAIN_BIN="${CHAIN_BIN:=osmosisd}"
CHAIN_DIR="${CHAIN_DIR:=$HOME/.osmosisd}"
KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}"
WASM_PERMISSIONLESS="${WASM_PERMISSIONLESS:=true}"

set -eu

# check if the binary has genesis subcommand or not, if not, set CHAIN_GENESIS_CMD to empty
CHAIN_GENESIS_CMD=$($CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands" && echo "genesis" || echo "")

jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN init $CHAIN_ID --chain-id $CHAIN_ID --recover

# Add genesis keys to the keyring and self delegate initial coins
echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG)
jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $CHAIN_BIN keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test"
$CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account $($CHAIN_BIN keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test"

echo "Creating gentx..."
$CHAIN_BIN $CHAIN_GENESIS_CMD gentx $(jq -r ".genesis[0].name" $KEYS_CONFIG) 5000000000$DENOM --keyring-backend="test" --chain-id $CHAIN_ID

echo "Output of gentx"
cat $CHAIN_DIR/config/gentx/*.json | jq

echo "Running collect-gentxs"
$CHAIN_BIN $CHAIN_GENESIS_CMD collect-gentxs

ls $CHAIN_DIR/config

echo "Update genesis.json file with updated local params"
Expand Down
36 changes: 32 additions & 4 deletions charts/devnet/templates/chains/cosmos/configmap.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,33 @@
{{- range $chain := .Values.chains }}
{{- if ne $chain.type "virtual" }}
{{ $defaultFile := $.Files.Get "defaults.yaml" | fromYaml }}
{{ $defaultScripts := $defaultFile.defaultScripts }}
{{ $defaultChain := get $defaultFile.defaultChains $chain.type | default dict }}

# merge defaultChain values into the $chain dict
{{ $chain = merge $chain $defaultChain }}

{{ $scripts := get $chain "scripts" | default dict }}
{{ $scripts = merge $scripts $defaultScripts }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: setup-scripts
name: setup-scripts-{{ $chain.name }}
data:
{{- range $path, $_ := .Files.Glob "scripts/*.sh" }}
{{ base $path }}: |-
{{- $.Files.Get $path | nindent 4 }}
{{- range $k, $v := $scripts }}
{{- if hasKey $v "data" }}
{{ $v.name }}: |-
{{- $v.data | nindent 4 }}
{{- else }}
{{ $v.name }}: |-
{{- $.Files.Get $v.file | nindent 4 }}
{{- end }}
{{- end }}
---
{{- end }}
{{- end }}
---
{{- range $chain := .Values.chains }}
{{- if ne $chain.type "virtual" }}
{{ $defaultFile := $.Files.Get "defaults.yaml" | fromYaml }}
Expand Down Expand Up @@ -39,3 +58,12 @@ data:
{{- $.Files.Get $path | nindent 4}}
{{- end }}
---
# Configmap with setup-scripts that are not chain specific
apiVersion: v1
kind: ConfigMap
metadata:
name: setup-scripts
data:
transfer-tokens.sh: |-
{{- $.Files.Get "scripts/transfer-tokens.sh" | nindent 4 }}
---
29 changes: 7 additions & 22 deletions charts/devnet/templates/chains/cosmos/genesis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,12 @@ spec:
# Build genesis
{{- if $upgrade.enabled }}
UPGRADE_NAME=genesis CODE_TAG={{ $chain.upgrade.genesis }} bash -e /scripts/build_chain.sh
UPGRADE_NAME=genesis CODE_TAG={{ $chain.upgrade.genesis }} bash -e /scripts/build-chain.sh
{{- range $upgrade := $chain.upgrade.upgrades }}
UPGRADE_NAME={{ $upgrade.name }} CODE_TAG={{ $upgrade.version }} bash -e /scripts/build_chain.sh
UPGRADE_NAME={{ $upgrade.name }} CODE_TAG={{ $upgrade.version }} bash -e /scripts/build-chain.sh
{{- end }}
{{- else if $build.enabled }}
UPGRADE_NAME=genesis CODE_TAG={{ $chain.build.source }} bash -e /scripts/build_chain.sh
UPGRADE_NAME=genesis CODE_TAG={{ $chain.build.source }} bash -e /scripts/build-chain.sh
{{- end }}
env:
- name: CODE_REF
Expand Down Expand Up @@ -111,11 +111,12 @@ spec:
fi
echo "Running setup and config files..."
bash -e /scripts/setup_genesis.sh
bash -e /scripts/create-genesis.sh
bash -e /scripts/update-genesis.sh
{{- if hasKey $chain "genesis" }}
jq -s '.[0] * .[1]' $CHAIN_DIR/config/genesis.json /patch/genesis.json > $CHAIN_DIR/config/genesis.json.tmp && mv $CHAIN_DIR/config/genesis.json.tmp $CHAIN_DIR/config/genesis.json
{{- end }}
bash -e /scripts/setup_config.sh
bash -e /scripts/update-config.sh
resources: {{- include "devnet.node.resources" ( dict "node" $chain "context" $ ) | trim | nindent 12 }}
volumeMounts:
- mountPath: {{ $chain.home }}
Expand Down Expand Up @@ -156,22 +157,6 @@ spec:
name: addresses
- mountPath: /scripts
name: scripts
{{- if $.Values.collector.enabled }}
lifecycle:
preStop:
exec:
command:
- bash
- "-c"
- "-e"
- |
VAL_INDEX=${HOSTNAME##*-}
VAL_NAME=$(jq -r ".genesis[$VAL_INDEX].name" /configs/keys.json)
echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME"
COLLECTOR_HOST=http://$COLLECTOR_SERVICE.$NAMESPACE.svc.cluster.local:$COLLECTOR_PORT
VAL_NAME=$VAL_NAME COLLECTOR_HOST=$COLLECTOR_HOST bash -e /scripts/register_snapshots.sh
{{- end }}
- name: exposer
image: {{ $.Values.exposer.image }}
imagePullPolicy: Always
Expand Down Expand Up @@ -259,7 +244,7 @@ spec:
name: keys
- name: scripts
configMap:
name: setup-scripts
name: setup-scripts-{{ $chain.name }}
{{- if hasKey $chain "genesis" }}
- name: patch
configMap:
Expand Down
29 changes: 7 additions & 22 deletions charts/devnet/templates/chains/cosmos/validator.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ spec:
# Build genesis
{{- if $upgrade.enabled }}
UPGRADE_NAME=genesis CODE_TAG={{ $chain.upgrade.genesis }} bash -e /scripts/build_chain.sh
UPGRADE_NAME=genesis CODE_TAG={{ $chain.upgrade.genesis }} bash -e /scripts/build-chain.sh
{{- range $upgrade := $chain.upgrade.upgrades }}
UPGRADE_NAME={{ $upgrade.name }} CODE_TAG={{ $upgrade.version }} bash -e /scripts/build_chain.sh
UPGRADE_NAME={{ $upgrade.name }} CODE_TAG={{ $upgrade.version }} bash -e /scripts/build-chain.sh
{{- end }}
{{- else if $build.enabled }}
UPGRADE_NAME=genesis CODE_TAG={{ $chain.build.source }} bash -e /scripts/build_chain.sh
UPGRADE_NAME=genesis CODE_TAG={{ $chain.build.source }} bash -e /scripts/build-chain.sh
{{- end }}
env:
- name: CODE_REF
Expand Down Expand Up @@ -131,7 +131,7 @@ spec:
cat $CHAIN_DIR/config/genesis.json
echo "Setup config files"
bash -e /scripts/setup_config.sh
bash -e /scripts/update-config.sh
curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id
NODE_ID=$(curl -s http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:$GENESIS_PORT/node_id | jq -r ".node_id")
Expand Down Expand Up @@ -191,26 +191,11 @@ spec:
VAL_ADDR=$($CHAIN_BIN keys show $VAL_NAME -a --keyring-backend="test")
echo "Transfer tokens to address $VAL_ADDR before trying to create validator. Best effort"
bash -e /scripts/transfer_tokens.sh $VAL_ADDR $DENOM http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit || true
bash -e /scripts/transfer-tokens.sh $VAL_ADDR $DENOM http://$GENESIS_HOST.$NAMESPACE.svc.cluster.local:8000/credit || true
$CHAIN_BIN keys list | jq
VAL_NAME=$VAL_NAME bash -e /scripts/create_validator.sh
{{- if $.Values.collector.enabled }}
preStop:
exec:
command:
- bash
- "-c"
- "-e"
- |
VAL_INDEX=${HOSTNAME##*-}
VAL_NAME=$(jq -r ".validators[$VAL_INDEX].name" /configs/keys.json)
echo "Validator Index: $VAL_INDEX, Key name: $VAL_NAME"
COLLECTOR_HOST=http://$COLLECTOR_SERVICE.$NAMESPACE.svc.cluster.local:$COLLECTOR_PORT
VAL_NAME=$VAL_NAME COLLECTOR_HOST=$COLLECTOR_HOST bash -e /scripts/register_snapshots.sh
{{- end }}
VAL_NAME=$VAL_NAME bash -e /scripts/create-validator.sh
resources: {{- include "devnet.node.resources" ( dict "node" $chain "context" $ ) | trim | nindent 12 }}
volumeMounts:
- mountPath: {{ $chain.home }}
Expand Down Expand Up @@ -251,7 +236,7 @@ spec:
name: keys
- name: scripts
configMap:
name: setup-scripts
name: setup-scripts-{{ $chain.name }}
---
{{- end }}
{{- end }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ spec:
DENOM="{{ $fullchain.denom }}"
RLY_ADDR=$(rly address "{{ $fullchain.name }}" | awk 'END{print}')
echo "Transfer tokens to address $RLY_ADDR on {{ $fullchain.name }} chain with denom $DENOM"
bash -e /scripts/transfer_tokens.sh $RLY_ADDR $DENOM http://{{ $fullchain.name }}-genesis.$NAMESPACE.svc.cluster.local:8000/credit
bash -e /scripts/transfer-tokens.sh $RLY_ADDR $DENOM http://{{ $fullchain.name }}-genesis.$NAMESPACE.svc.cluster.local:8000/credit
{{- end }}
{{- end }}
{{- end }}
Expand Down
2 changes: 1 addition & 1 deletion charts/devnet/templates/relayers/hermes/statefulset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ spec:
DENOM="{{ $fullchain.denom }}"
RLY_ADDR=$(hermes --json keys list --chain {{ $chain }} | tail -1 | jq -r '.result."{{ $chain }}".account')
echo "Transfer tokens to address $RLY_ADDR"
bash -e /scripts/transfer_tokens.sh $RLY_ADDR $DENOM http://{{ $fullchain.name }}-genesis.$NAMESPACE.svc.cluster.local:8000/credit
bash -e /scripts/transfer-tokens.sh $RLY_ADDR $DENOM http://{{ $fullchain.name }}-genesis.$NAMESPACE.svc.cluster.local:8000/credit
{{- end }}
{{- end }}
{{- end }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ spec:
DENOM="{{ $fullchain.denom }}"
RLY_ADDR=$(ibc-setup keys list | grep "{{ $fullchain.name }}" | awk '{print $2}')
echo "Transfer tokens to address $RLY_ADDR"
bash -e /scripts/transfer_tokens.sh $RLY_ADDR $DENOM http://{{ $fullchain.name }}-genesis.$NAMESPACE.svc.cluster.local:8000/credit
bash -e /scripts/transfer-tokens.sh $RLY_ADDR $DENOM http://{{ $fullchain.name }}-genesis.$NAMESPACE.svc.cluster.local:8000/credit
{{- end }}
{{- end }}
{{- end }}
Expand Down
20 changes: 0 additions & 20 deletions charts/devnet/templates/tests/test-connection.yaml

This file was deleted.

31 changes: 31 additions & 0 deletions charts/devnet/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,37 @@ chains: []
# # then then `jq -s '.[0] * .[1]' genesis.json patch.json > genesis.json` is run
# genesis:
# auth: ...
# - name: osmosis-2
# type: osmosis
# numValidators: 2
# # scripts directive will replace the default scripts with the given scripts
# # please make sure the current scripts are compatible with Starship
# scripts:
# ## createGenesis script will be run before the chain is started
# ## to create the genesis.json file. Can be used to fetch the genesis file too.
# createGenesis:
# file: local/scripts/create-genesis.sh
# data: |- # data is a multiline string injected from --set-file in helm
# ## updateGenesis script will be run on the genesis.json file
# ## run after create-genesis
# updateGenesis:
# file: local/scripts/overwrite-genesis.sh
# data: |- # data is a multiline string injected from --set-file in helm
# updateConfig:
# file: local/scripts/overwrite-config.sh
# data: |- # data is a multiline string injected from --set-file in helm
# ## run as the post-start hook in k8s, to create the validator
# createValidator:
# file: local/scripts/create-validator.sh
# data: |- # data is a multiline string injected from --set-file in helm
# ## transferTokens script will be run to get tokens from the faucet
# transferTokens:
# file: local/scripts/transfer-tokens.sh
# data: |- # data is a multiline string injected from --set-file in helm
# ## buildChain script that can be used for building the chain from source
# buildChain:
# file: local/scripts/build-chain.sh
# data: |- # data is a multiline string injected from --set-file in helm

# TODO: ability to check the srcConnection and destConnection to use
relayers: []
Expand Down
Loading

0 comments on commit 71985da

Please sign in to comment.