Skip to content

⚖️ Register Validator: Cumulo #282

⚖️ Register Validator: Cumulo

⚖️ Register Validator: Cumulo #282

name: Register validator
on:
issues:
types: [ labeled, unlabeled ]
concurrency:
group: register-validator-${{ github.event.issue.number }}
cancel-in-progress: true
jobs:
resolve-context:
if: |
!github.event.issue.pull_request &&
contains(github.event.issue.labels.*.name, 'register-validator') &&
!contains(github.event.issue.labels.*.name, 'invalid')
runs-on: ubuntu-22.04
outputs:
network: ${{ fromJson(steps.parse-issue.outputs.jsonString).network }}
gentx: ${{ steps.extract-gentx.outputs.gentx }}
delegator_addr: ${{ fromJson(steps.parse-issue.outputs.jsonString).delegator_addr }}
moniker: ${{ steps.extract-gentx.outputs.moniker }}
register-config: ${{ steps.register-config.outputs.config }}
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Parse issue form content
id: parse-issue
uses: stefanbuck/github-issue-parser@v3
with:
issue-body: ${{ github.event.issue.body }}
template-path: .github/ISSUE_TEMPLATE/register-validator.yml
- name: Extract gentx
id: extract-gentx
env:
# GENTX_MD needs some sorcery as it is not well extracted from the form issue.
GENTX_MD: ${{ fromJson(steps.parse-issue.outputs.jsonString).gentx }}
run: |
set -eo pipefail
gentx=$(echo "$GENTX_MD" | tail -n +2 | sed '$d' | jq -c '.')
moniker=$(echo "$gentx" | jq -r '.body.messages[0].description.moniker')
echo "moniker=${moniker}" >> $GITHUB_OUTPUT
echo "gentx=${gentx}" >> $GITHUB_OUTPUT
- name: Get network register config
id: register-config
run: |
set -eo pipefail
config=$(cat chains/${{ fromJson(steps.parse-issue.outputs.jsonString).network }}/register-config.json | jq -c '.')
echo "config=${config}" >> $GITHUB_OUTPUT
check:
needs:
- resolve-context
runs-on: ubuntu-22.04
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Setup jq
run: |
sudo apt install -y jq
- name: Check gentx
id: check-gentx
env:
GENTX: ${{ needs.resolve-context.outputs.gentx }}
run: |
set -e
echo "🧐 Checking gentx"
startTime=$(date --date="${{ fromJson(needs.resolve-context.outputs.register-config).start-date }}" +%s)
endTime=$(date --date="${{ fromJson(needs.resolve-context.outputs.register-config).end-date }}" +%s)
now=$(date +%s)
if [[ $now < $startTime ]]; then
echo error='Register process is not open yet for this network.' >> $GITHUB_OUTPUT
exit 1
elif [[ $now > $endTime ]]; then
echo error='Register process is closed for this network.' >> $GITHUB_OUTPUT
exit 1
fi
delegationAmount=$(echo "$GENTX" | jq -r '.body.messages[0].value.amount')
delegationDenom=$(echo "$GENTX" | jq -r '.body.messages[0].value.denom')
if [ "${{ fromJson(needs.resolve-context.outputs.register-config).delegation.amount }}" != "$delegationAmount" ]; then
echo error='Invalid delegation amount.' >> $GITHUB_OUTPUT
exit 1
elif [ "${{ fromJson(needs.resolve-context.outputs.register-config).delegation.denom }}" != "$delegationDenom" ]; then
echo error='Invalid delegation denom.' >> $GITHUB_OUTPUT
exit 1
fi
echo "👍 gentx seems right."
- name: Mark issue invalid
if: ${{ failure() }}
uses: andymckay/labeler@master
with:
repo-token: ${{ secrets.OKP4_TOKEN }}
add-labels: "invalid"
- name: Add failure comment
if: ${{ failure() }}
uses: peter-evans/create-or-update-comment@v3
with:
token: ${{ secrets.OKP4_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
😢 I couldn't process your request: `${{ steps.check-gentx.outputs.error }}`
process:
needs:
- resolve-context
- check
runs-on: ubuntu-22.04
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Process gentx
id: add-gentx
env:
GENTX: ${{ needs.resolve-context.outputs.gentx }}
DELEGATOR_ADDR: ${{ needs.resolve-context.outputs.delegator_addr }}
NODE_HOME: /tmp/node
run: |
mkdir -p chains/${{ needs.resolve-context.outputs.network }}/gentx
echo "$GENTX" > chains/${{ needs.resolve-context.outputs.network }}/gentx/gentx-${{ github.event.issue.number }}.json
mkdir -p $NODE_HOME
docker run --rm --user $(id -u):$(id -g) -v $NODE_HOME:$NODE_HOME okp4/okp4d:`cat ./chains/${{ needs.resolve-context.outputs.network }}/version.txt` init --home $NODE_HOME whatever
cp chains/${{ needs.resolve-context.outputs.network }}/genesis.json $NODE_HOME/config/genesis.json
delegator_balance="`expr ${{ fromJson(needs.resolve-context.outputs.register-config).delegation.amount }} + 200000`${{ fromJson(needs.resolve-context.outputs.register-config).delegation.denom }}"
docker run --rm --user $(id -u):$(id -g) -v $NODE_HOME:$NODE_HOME okp4/okp4d:`cat ./chains/${{ needs.resolve-context.outputs.network }}/version.txt` genesis add-genesis-account --home $NODE_HOME $DELEGATOR_ADDR $delegator_balance
docker run --rm --user $(id -u):$(id -g) -v $NODE_HOME:$NODE_HOME -v $PWD/chains/${{ needs.resolve-context.outputs.network }}/gentx:/gentx okp4/okp4d:`cat ./chains/${{ needs.resolve-context.outputs.network }}/version.txt` genesis collect-gentxs --home $NODE_HOME --gentx-dir /gentx
cp $NODE_HOME/config/genesis.json chains/${{ needs.resolve-context.outputs.network }}/genesis.json
- name: Prepare commit message
id: commit-message
run: |
type=feat
scope="${{ needs.resolve-context.outputs.network }}"
description="register validator gentx ${{ needs.resolve-context.outputs.moniker }}"
body="Closes #${{ github.event.issue.number }}"
line1="$type($scope): $description"
line1=$(echo "$line1" | awk -v len=90 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }' )
message="$line1\n\n$body"
message="${message//'%'/'%25'}"
message="${message//$'\n'/'%0A'}"
message="${message//$'\r'/'%0D'}"
echo "message=${message}" >> $GITHUB_OUTPUT
- name: Create Pull Request
id: open-pr
uses: peter-evans/create-pull-request@v5
with:
commit-message: |
${{ steps.commit-message.outputs.message }}
committer: ${{ secrets.OKP4_BOT_GIT_COMMITTER_NAME }} <${{ secrets.OKP4_BOT_GIT_COMMITTER_EMAIL }}>
author: ${{ secrets.OKP4_BOT_GIT_AUTHOR_NAME }} <${{ secrets.OKP4_BOT_GIT_AUTHOR_EMAIL }}>
token: ${{ secrets.OKP4_TOKEN }}
branch: feat/${{ github.event.issue.number }}-register-${{ needs.resolve-context.outputs.network }}
title: '⚖️ Register `${{ needs.resolve-context.outputs.moniker }}` Validator'
body: |
Register [new validator](${{ github.event.issue.html_url }}) gentx on the ${{ needs.resolve-context.outputs.network }} network.
labels: "register-validator,chain: ⛓️ ${{ needs.resolve-context.outputs.network }}"
assignees: amimart,ccamel
reviewers: amimart,ccamel,tpelliet
- name: Link PR
uses: peter-evans/create-or-update-comment@v3
with:
token: ${{ secrets.OKP4_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
😉 Here is the corresponding PR: ${{ steps.open-pr.outputs.pull-request-url }}
- name: Mark issue invalid
if: ${{ failure() }}
uses: andymckay/labeler@master
with:
repo-token: ${{ secrets.OKP4_TOKEN }}
add-labels: "invalid"
- name: Add failure comment
if: ${{ failure() }}
uses: peter-evans/create-or-update-comment@v3
with:
token: ${{ secrets.OKP4_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: 😢 I couldn't process your request...