ci: clean up upgrade handler #550
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test Software Upgrade | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
jobs: | |
create-new-snapshot: | |
runs-on: elys-runner | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
fetch-tags: true | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: "1.21" | |
- name: Get latest tag | |
run: | | |
git fetch --tags | |
LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`) | |
echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV | |
echo "Latest tag: $LATEST_TAG" | |
- name: Retrieve latest binary | |
run: | | |
DOWNLOAD_URL=https://github.com/elys-network/elys/releases/download/${LATEST_TAG}/elysd-${LATEST_TAG}-linux-amd64 | |
OLD_BINARY_PATH=/tmp/elysd-${LATEST_TAG} | |
curl -L $DOWNLOAD_URL -o $OLD_BINARY_PATH && chmod +x $OLD_BINARY_PATH | |
echo "OLD_BINARY_PATH=$OLD_BINARY_PATH" >> $GITHUB_ENV | |
- name: Retrieve post upgrade snapshot generator binary | |
run: | | |
DOWNLOAD_URL=https://github.com/elys-network/post-upgrade-snapshot-generator/releases/download/v0.1.0/post-upgrade-snapshot-generator-v0.1.0-linux-amd64 | |
POST_UPGRADE_SNAPSHOT_GENERATOR_PATH=/tmp/post-upgrade-snapshot-generator-v0.1.0 | |
curl -L $DOWNLOAD_URL -o $POST_UPGRADE_SNAPSHOT_GENERATOR_PATH && chmod +x $POST_UPGRADE_SNAPSHOT_GENERATOR_PATH | |
echo "POST_UPGRADE_SNAPSHOT_GENERATOR_PATH=$POST_UPGRADE_SNAPSHOT_GENERATOR_PATH" >> $GITHUB_ENV | |
- name: Build new binary | |
run: | | |
# create new git tag | |
git tag -f v999.999.999 | |
# build new elys binary | |
make build | |
NEW_BINARY_PATH=./build/elysd | |
echo "NEW_BINARY_PATH=$NEW_BINARY_PATH" >> $GITHUB_ENV | |
- name: Retrieve info.json and set snapshot path | |
run: | | |
DOWNLOAD_URL=https://snapshots-testnet.stake-town.com/elys/info.json | |
curl -L $DOWNLOAD_URL -o /tmp/info.json | |
echo "Info.json downloaded to check snapshot version." | |
# retrieve blockHeight field value from info.json | |
SNAPSHOT_BLOCK_HEIGHT=$(cat /tmp/info.json | awk -F'"' '/"blockHeight":/{print $4}') | |
echo "SNAPSHOT_BLOCK_HEIGHT=$SNAPSHOT_BLOCK_HEIGHT" >> $GITHUB_ENV | |
echo "Snapshot block height: $SNAPSHOT_BLOCK_HEIGHT" | |
# set snapshot download url | |
SNAPSHOT_DOWNLOAD_URL=https://snapshots-testnet.stake-town.com/elys/elystestnet-1_latest.tar.lz4 | |
echo "SNAPSHOT_DOWNLOAD_URL=$SNAPSHOT_DOWNLOAD_URL" >> $GITHUB_ENV | |
# set snapshot file path | |
SNAPSHOT_FILE_PATH=/tmp/snapshot.tar.lz4 | |
echo "SNAPSHOT_FILE_PATH=$SNAPSHOT_FILE_PATH" >> $GITHUB_ENV | |
- name: Cache Snapshot | |
uses: elys-network/actions-cache-s3@eba1d2b54699fda7ee03d826049bc67dcf514887 | |
id: cache-snapshot | |
with: | |
path: | | |
${{ env.SNAPSHOT_FILE_PATH }} | |
key: ${{ runner.os }}-snapshot-${{ env.LATEST_TAG }} | |
lookup-only: true | |
aws-access-key-id: ${{ secrets.R2_ACCESS_KEY }} | |
aws-secret-access-key: ${{ secrets.R2_SECRET_KEY }} | |
aws-endpoint: ${{ secrets.R2_ENDPOINT }} | |
aws-s3-bucket: ${{ secrets.R2_BUCKET_NAME }} | |
aws-region: auto | |
aws-s3-bucket-endpoint: false | |
aws-s3-force-path-style: true | |
- name: Download snapshot | |
run: | | |
curl -L $SNAPSHOT_DOWNLOAD_URL -o $SNAPSHOT_FILE_PATH | |
if: steps.cache-snapshot.outputs.cache-hit != 'true' | |
- name: Check submit new proposal from cache exists | |
uses: elys-network/actions-cache-s3@eba1d2b54699fda7ee03d826049bc67dcf514887 | |
id: cache-submit-new-proposal | |
with: | |
path: | | |
/home/runner/.elys | |
/home/runner/.elys2 | |
key: ${{ runner.os }}-submit-new-proposal-${{ env.LATEST_TAG }} | |
lookup-only: true | |
aws-access-key-id: ${{ secrets.R2_ACCESS_KEY }} | |
aws-secret-access-key: ${{ secrets.R2_SECRET_KEY }} | |
aws-endpoint: ${{ secrets.R2_ENDPOINT }} | |
aws-s3-bucket: ${{ secrets.R2_BUCKET_NAME }} | |
aws-region: auto | |
aws-s3-bucket-endpoint: false | |
aws-s3-force-path-style: true | |
- name: Chain snapshot and export | |
run: | | |
${POST_UPGRADE_SNAPSHOT_GENERATOR_PATH} chain-snapshot-export \ | |
${SNAPSHOT_FILE_PATH} \ | |
${OLD_BINARY_PATH} \ | |
--timeout-next-block 100000 \ | |
--timeout-wait-for-node 100000 | |
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true' | |
- name: Chain initialization | |
run: | | |
${POST_UPGRADE_SNAPSHOT_GENERATOR_PATH} chain-init \ | |
${OLD_BINARY_PATH} \ | |
--timeout-next-block 100000 \ | |
--timeout-wait-for-node 100000 | |
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true' | |
- name: Create second validator | |
run: | | |
${POST_UPGRADE_SNAPSHOT_GENERATOR_PATH} create-second-validator \ | |
${OLD_BINARY_PATH} \ | |
--timeout-next-block 100000 \ | |
--timeout-wait-for-node 100000 | |
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true' | |
- name: Prepare validator data | |
run: | | |
${POST_UPGRADE_SNAPSHOT_GENERATOR_PATH} prepare-validator-data \ | |
--timeout-next-block 100000 \ | |
--timeout-wait-for-node 100000 | |
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true' | |
- name: Submit new proposal | |
run: | | |
${POST_UPGRADE_SNAPSHOT_GENERATOR_PATH} submit-new-proposal \ | |
${OLD_BINARY_PATH} \ | |
${NEW_BINARY_PATH} \ | |
--timeout-next-block 100000 \ | |
--timeout-wait-for-node 100000 | |
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true' | |
- name: Save submit new proposal to cache | |
uses: elys-network/actions-cache-s3/save@eba1d2b54699fda7ee03d826049bc67dcf514887 | |
with: | |
path: | | |
/home/runner/.elys | |
/home/runner/.elys2 | |
key: ${{ runner.os }}-submit-new-proposal-${{ env.LATEST_TAG }} | |
aws-access-key-id: ${{ secrets.R2_ACCESS_KEY }} | |
aws-secret-access-key: ${{ secrets.R2_SECRET_KEY }} | |
aws-endpoint: ${{ secrets.R2_ENDPOINT }} | |
aws-s3-bucket: ${{ secrets.R2_BUCKET_NAME }} | |
aws-region: auto | |
aws-s3-bucket-endpoint: false | |
aws-s3-force-path-style: true | |
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true' | |
- name: Restore submit new proposal from cache | |
uses: elys-network/actions-cache-s3/restore@eba1d2b54699fda7ee03d826049bc67dcf514887 | |
with: | |
path: | | |
/home/runner/.elys | |
/home/runner/.elys2 | |
key: ${{ runner.os }}-submit-new-proposal-${{ env.LATEST_TAG }} | |
aws-access-key-id: ${{ secrets.R2_ACCESS_KEY }} | |
aws-secret-access-key: ${{ secrets.R2_SECRET_KEY }} | |
aws-endpoint: ${{ secrets.R2_ENDPOINT }} | |
aws-s3-bucket: ${{ secrets.R2_BUCKET_NAME }} | |
aws-region: auto | |
aws-s3-bucket-endpoint: false | |
aws-s3-force-path-style: true | |
if: steps.cache-submit-new-proposal.outputs.cache-hit == 'true' | |
- name: Upgrade to new binary | |
run: | | |
${POST_UPGRADE_SNAPSHOT_GENERATOR_PATH} upgrade-to-new-binary \ | |
${NEW_BINARY_PATH} \ | |
--timeout-next-block 100000 \ | |
--timeout-wait-for-node 100000 | |
- name: Create new snapshot file | |
run: | | |
SANITIZED_HEAD_REF=${{ github.head_ref || github.ref }} | |
SANITIZED_HEAD_REF=$(echo "$SANITIZED_HEAD_REF" | sed 's|refs/heads/||; s|/|_|g') | |
NEW_SNAPSHOT_FILENAME="elys-snapshot-${SANITIZED_HEAD_REF}.tar.lz4" | |
NEW_SNAPSHOT_PATH="/tmp/${NEW_SNAPSHOT_FILENAME}" | |
echo "NEW_SNAPSHOT_FILENAME=$NEW_SNAPSHOT_FILENAME" >> $GITHUB_ENV | |
echo "NEW_SNAPSHOT_PATH=$NEW_SNAPSHOT_PATH" >> $GITHUB_ENV | |
cd /home/runner | |
tar -cf - .elys | lz4 -z - > "$NEW_SNAPSHOT_PATH" | |
- name: Upload snapshot | |
env: | |
R2_ACCESS_KEY: ${{ secrets.R2_ACCESS_KEY }} | |
R2_SECRET_KEY: ${{ secrets.R2_SECRET_KEY }} | |
R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }} | |
R2_BUCKET_NAME: ${{ secrets.R2_BUCKET_NAME }} | |
run: | | |
${POST_UPGRADE_SNAPSHOT_GENERATOR_PATH} upload-snapshot $NEW_SNAPSHOT_PATH | |
- name: Info about the snapshot | |
run: | | |
echo "Snapshot URL: https://snapshots.elys.network/$NEW_SNAPSHOT_FILENAME" |