Skip to content

AddCommittedToken was edited to avoid amount duplicate on Lockup #309

AddCommittedToken was edited to avoid amount duplicate on Lockup

AddCommittedToken was edited to avoid amount duplicate on Lockup #309

name: Test Software Upgrade
on:
pull_request:
push:
branches:
- main
jobs:
retrieve-latest-tag:
runs-on: elys-runner
outputs:
LATEST_TAG: ${{ steps.get-latest-tag.outputs.LATEST_TAG }}
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
id: 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" >> $GITHUB_OUTPUT
echo "Latest tag: $LATEST_TAG"
retrieve-snapshot:
runs-on: elys-runner
needs: retrieve-latest-tag
outputs:
SNAPSHOT_DOWNLOAD_URL: ${{ steps.retrieve-info-json.outputs.SNAPSHOT_DOWNLOAD_URL }}
SNAPSHOT_FILE_PATH: ${{ steps.retrieve-info-json.outputs.SNAPSHOT_FILE_PATH }}
steps:
- name: Retrieve info.json and set snapshot path
id: retrieve-info-json
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
echo "SNAPSHOT_DOWNLOAD_URL=$SNAPSHOT_DOWNLOAD_URL" >> $GITHUB_OUTPUT
# set snapshot file path
SNAPSHOT_FILE_PATH=/tmp/snapshot.tar.lz4
echo "SNAPSHOT_FILE_PATH=$SNAPSHOT_FILE_PATH" >> $GITHUB_ENV
echo "SNAPSHOT_FILE_PATH=$SNAPSHOT_FILE_PATH" >> $GITHUB_OUTPUT
- name: Cache Snapshot
uses: actions/cache@v4
id: cache-snapshot
with:
path: |
${{ env.SNAPSHOT_FILE_PATH }}
key: ${{ runner.os }}-snapshot-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
lookup-only: true
- name: Download snapshot
run: |
curl -L $SNAPSHOT_DOWNLOAD_URL -o $SNAPSHOT_FILE_PATH
if: steps.cache-snapshot.outputs.cache-hit != 'true'
retrieve-old-binary:
runs-on: elys-runner
needs: retrieve-latest-tag
outputs:
OLD_BINARY_PATH: ${{ steps.set-old-binary-path.outputs.OLD_BINARY_PATH }}
steps:
- name: Set old binary path
id: set-old-binary-path
run: |
OLD_BINARY_PATH=/tmp/elysd-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
echo "OLD_BINARY_PATH=$OLD_BINARY_PATH" >> $GITHUB_ENV
echo "OLD_BINARY_PATH=$OLD_BINARY_PATH" >> $GITHUB_OUTPUT
- name: Cache old binary
uses: actions/cache@v4
id: cache-old-binary
with:
path: |
${{ env.OLD_BINARY_PATH }}
key: ${{ runner.os }}-retrieve-old-binary-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
lookup-only: true
- name: Retrieve latest binary
run: |
DOWNLOAD_URL=https://github.com/elys-network/elys/releases/download/${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}/elysd-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}-linux-amd64
curl -L $DOWNLOAD_URL -o $OLD_BINARY_PATH && chmod +x $OLD_BINARY_PATH
# TODO: retrieve upgrade-assure and upload-snapshot binaries
if: steps.cache-old-binary.outputs.cache-hit != 'true'
build-new-binary:
runs-on: elys-runner
outputs:
NEW_BINARY_PATH: ${{ steps.set-new-binary-paths.outputs.NEW_BINARY_PATH }}
NEW_UPGRADE_ASSURE_BINARY_PATH: ${{ steps.set-new-binary-paths.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH }}
UPLOAD_SNAPSHOT_BINARY_PATH: ${{ steps.set-new-binary-paths.outputs.UPLOAD_SNAPSHOT_BINARY_PATH }}
CACHE_KEY: ${{ steps.set-new-binary-paths.outputs.CACHE_KEY }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Set new binary paths
id: set-new-binary-paths
run: |
NEW_BINARY_PATH=./build/elysd
echo "NEW_BINARY_PATH=$NEW_BINARY_PATH" >> $GITHUB_ENV
echo "NEW_BINARY_PATH=$NEW_BINARY_PATH" >> $GITHUB_OUTPUT
NEW_UPGRADE_ASSURE_BINARY_PATH=./build/new-upgrade-assure
echo "NEW_UPGRADE_ASSURE_BINARY_PATH=$NEW_UPGRADE_ASSURE_BINARY_PATH" >> $GITHUB_ENV
echo "NEW_UPGRADE_ASSURE_BINARY_PATH=$NEW_UPGRADE_ASSURE_BINARY_PATH" >> $GITHUB_OUTPUT
UPLOAD_SNAPSHOT_BINARY_PATH=./build/upload-snapshot
echo "UPLOAD_SNAPSHOT_BINARY_PATH=$UPLOAD_SNAPSHOT_BINARY_PATH" >> $GITHUB_ENV
echo "UPLOAD_SNAPSHOT_BINARY_PATH=$UPLOAD_SNAPSHOT_BINARY_PATH" >> $GITHUB_OUTPUT
CACHE_KEY=${{ runner.os }}-build-new-binary-${{ hashFiles('**/go.mod', '**/*.go') }}
echo "CACHE_KEY=$CACHE_KEY" >> $GITHUB_ENV
echo "CACHE_KEY=$CACHE_KEY" >> $GITHUB_OUTPUT
- name: Cache new binary
uses: actions/cache@v4
id: cache-new-binary
with:
path: |
${{ env.NEW_BINARY_PATH }}
${{ env.NEW_UPGRADE_ASSURE_BINARY_PATH}}
${{ env.UPLOAD_SNAPSHOT_BINARY_PATH }}
key: ${{ env.CACHE_KEY }}
lookup-only: true
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
if: steps.cache-new-binary.outputs.cache-hit != 'true'
- name: Create git tag
run: git tag v999.999.999
if: steps.cache-new-binary.outputs.cache-hit != 'true'
- name: Build new binaries
id: build-new-binaries
run: |
# build new elys binary
make build
# build new upgrade assure binary
make build-upgrade-assure
mv ./build/upgrade-assure $NEW_UPGRADE_ASSURE_BINARY_PATH
# build upload snapshot binary
make build-upload-snapshot
if: steps.cache-new-binary.outputs.cache-hit != 'true'
build-old-binary:
runs-on: elys-runner
needs: retrieve-latest-tag
outputs:
OLD_UPGRADE_ASSURE_BINARY_PATH: ${{ steps.set-old-binary-path.outputs.OLD_UPGRADE_ASSURE_BINARY_PATH }}
steps:
- name: Set old binary path
id: set-old-binary-path
run: |
OLD_UPGRADE_ASSURE_BINARY_PATH=./build/old-upgrade-assure
echo "OLD_UPGRADE_ASSURE_BINARY_PATH=$OLD_UPGRADE_ASSURE_BINARY_PATH" >> $GITHUB_ENV
echo "OLD_UPGRADE_ASSURE_BINARY_PATH=$OLD_UPGRADE_ASSURE_BINARY_PATH" >> $GITHUB_OUTPUT
- name: Cache old binaries
uses: actions/cache@v4
id: cache-old-binaries
with:
path: |
${{ env.OLD_UPGRADE_ASSURE_BINARY_PATH }}
key: ${{ runner.os }}-build-old-binary-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
lookup-only: true
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
if: steps.cache-old-binaries.outputs.cache-hit != 'true'
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
if: steps.cache-old-binaries.outputs.cache-hit != 'true'
# TODO: to remove when upgrade-assure binary is available in previous release
- name: Copy upgrade assure folder
run: |
cp -a ./cmd/upgrade-assure ./cmd/upgrade-assure-skip
if: steps.cache-old-binaries.outputs.cache-hit != 'true'
- name: Check out latest tag
run: git checkout ${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-old-binaries.outputs.cache-hit != 'true'
# TODO: to remove when upgrade-assure binary is available in previous release
- name: Copy old upgrade assure types.go file
run: |
cp -a ./scripts/upgrade-assure/types.go ./cmd/upgrade-assure-skip/types.go
if: steps.cache-old-binaries.outputs.cache-hit != 'true'
# TODO: to remove when upgrade-assure binary is available in previous release
- name: Build old binaries
id: build-old-binaries
run: |
# build old upgrade assure binary
mkdir -p build
go build -o build ./cmd/upgrade-assure-skip
mv ./build/upgrade-assure-skip $OLD_UPGRADE_ASSURE_BINARY_PATH
if: steps.cache-old-binaries.outputs.cache-hit != 'true'
chain-snapshot-and-export:
runs-on: elys-runner
needs:
[
retrieve-latest-tag,
retrieve-snapshot,
retrieve-old-binary,
build-new-binary,
build-old-binary,
]
steps:
- name: Cache Directories
uses: actions/cache@v4
id: cache-chain-snapshot-and-export
with:
path: |
/home/runner/.elys
/home/runner/.elys2
/tmp/genesis.json
key: ${{ runner.os }}-chain-snapshot-and-export-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
lookup-only: true
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
if: steps.cache-chain-snapshot-and-export.outputs.cache-hit != 'true'
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
if: steps.cache-chain-snapshot-and-export.outputs.cache-hit != 'true'
- name: Check out latest tag
run: git checkout ${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-chain-snapshot-and-export.outputs.cache-hit != 'true'
- name: Restore snapshot from cache
uses: actions/cache/restore@v4
with:
path: |
${{ needs.retrieve-snapshot.outputs.SNAPSHOT_FILE_PATH }}
key: ${{ runner.os }}-snapshot-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-chain-snapshot-and-export.outputs.cache-hit != 'true'
- name: Restore new binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }}
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH}}
${{ needs.build-new-binary.outputs.UPLOAD_SNAPSHOT_BINARY_PATH }}
key: ${{ needs.build-new-binary.outputs.CACHE_KEY }}
if: steps.cache-chain-snapshot-and-export.outputs.cache-hit != 'true'
- name: Restore old binaries from cache
uses: actions/cache@v4
with:
path: |
${{ needs.build-old-binary.outputs.OLD_UPGRADE_ASSURE_BINARY_PATH }}
key: ${{ runner.os }}-build-old-binary-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-chain-snapshot-and-export.outputs.cache-hit != 'true'
- name: Restore old binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.retrieve-old-binary.outputs.OLD_BINARY_PATH }}
key: ${{ runner.os }}-retrieve-old-binary-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-chain-snapshot-and-export.outputs.cache-hit != 'true'
- name: Chain snapshot and export
run: |
GOMEMLIMIT=32GiB \
${{ needs.build-old-binary.outputs.OLD_UPGRADE_ASSURE_BINARY_PATH }} \
${{ needs.retrieve-snapshot.outputs.SNAPSHOT_FILE_PATH }} \
${{ needs.retrieve-old-binary.outputs.OLD_BINARY_PATH }} \
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }} \
--skip-chain-init \
--skip-node-start \
--timeout-next-block 100000 \
--timeout-wait-for-node 100000
if: steps.cache-chain-snapshot-and-export.outputs.cache-hit != 'true'
chain-init:
runs-on: elys-runner
needs:
[
retrieve-latest-tag,
retrieve-snapshot,
retrieve-old-binary,
build-new-binary,
build-old-binary,
chain-snapshot-and-export,
]
steps:
- name: Cache Directories
uses: actions/cache@v4
id: cache-chain-init
with:
path: |
/home/runner/.elys
/home/runner/.elys2
key: ${{ runner.os }}-chain-init-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
lookup-only: true
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
if: steps.cache-chain-init.outputs.cache-hit != 'true'
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
if: steps.cache-chain-init.outputs.cache-hit != 'true'
- name: Check out latest tag
run: git checkout ${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-chain-init.outputs.cache-hit != 'true'
- name: Restore chain snapshot and export from cache
uses: actions/cache/restore@v4
with:
path: |
/home/runner/.elys
/home/runner/.elys2
/tmp/genesis.json
key: ${{ runner.os }}-chain-snapshot-and-export-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-chain-init.outputs.cache-hit != 'true'
- name: Restore new binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }}
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH}}
${{ needs.build-new-binary.outputs.UPLOAD_SNAPSHOT_BINARY_PATH }}
key: ${{ needs.build-new-binary.outputs.CACHE_KEY }}
if: steps.cache-chain-init.outputs.cache-hit != 'true'
- name: Restore old binaries from cache
uses: actions/cache@v4
with:
path: |
${{ needs.build-old-binary.outputs.OLD_UPGRADE_ASSURE_BINARY_PATH }}
key: ${{ runner.os }}-build-old-binary-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-chain-init.outputs.cache-hit != 'true'
- name: Restore old binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.retrieve-old-binary.outputs.OLD_BINARY_PATH }}
key: ${{ runner.os }}-retrieve-old-binary-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-chain-init.outputs.cache-hit != 'true'
- name: Chain initialization
run: |
GOMEMLIMIT=32GiB \
${{ needs.build-old-binary.outputs.OLD_UPGRADE_ASSURE_BINARY_PATH }} \
${{ needs.retrieve-snapshot.outputs.SNAPSHOT_FILE_PATH }} \
${{ needs.retrieve-old-binary.outputs.OLD_BINARY_PATH }} \
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }} \
--skip-snapshot \
--skip-node-start \
--timeout-next-block 100000 \
--timeout-wait-for-node 100000
if: steps.cache-chain-init.outputs.cache-hit != 'true'
create-second-validator:
runs-on: elys-runner
needs:
[
retrieve-latest-tag,
retrieve-snapshot,
retrieve-old-binary,
build-new-binary,
chain-init,
]
steps:
- name: Cache Directories
uses: actions/cache@v4
id: cache-create-second-validator
with:
path: |
/home/runner/.elys
/home/runner/.elys2
key: ${{ runner.os }}-create-second-validator-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
lookup-only: true
- name: Restore chain snapshot and export from cache
uses: actions/cache/restore@v4
with:
path: |
/home/runner/.elys
/home/runner/.elys2
key: ${{ runner.os }}-chain-init-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-create-second-validator.outputs.cache-hit != 'true'
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
if: steps.cache-create-second-validator.outputs.cache-hit != 'true'
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
if: steps.cache-create-second-validator.outputs.cache-hit != 'true'
- name: Restore new binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }}
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH}}
${{ needs.build-new-binary.outputs.UPLOAD_SNAPSHOT_BINARY_PATH }}
key: ${{ needs.build-new-binary.outputs.CACHE_KEY }}
if: steps.cache-create-second-validator.outputs.cache-hit != 'true'
- name: Restore old binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.retrieve-old-binary.outputs.OLD_BINARY_PATH }}
key: ${{ runner.os }}-retrieve-old-binary-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-create-second-validator.outputs.cache-hit != 'true'
- name: Create second validator
run: |
GOMEMLIMIT=16GiB \
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH }} \
${{ needs.retrieve-snapshot.outputs.SNAPSHOT_FILE_PATH }} \
${{ needs.retrieve-old-binary.outputs.OLD_BINARY_PATH }} \
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }} \
--skip-snapshot \
--skip-chain-init \
--skip-prepare-validator-data \
--skip-submit-proposal \
--skip-upgrade-to-new-binary \
--timeout-next-block 100000 \
--timeout-wait-for-node 100000
if: steps.cache-create-second-validator.outputs.cache-hit != 'true'
prepare-validator-data:
runs-on: elys-runner
needs:
[
retrieve-latest-tag,
retrieve-snapshot,
retrieve-old-binary,
build-new-binary,
create-second-validator,
]
steps:
- name: Cache Directories
uses: actions/cache@v4
id: cache-prepare-validator-data
with:
path: |
/home/runner/.elys
/home/runner/.elys2
key: ${{ runner.os }}-prepare-validator-data-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
lookup-only: true
- name: Restore create second validator from cache
uses: actions/cache/restore@v4
with:
path: |
/home/runner/.elys
/home/runner/.elys2
key: ${{ runner.os }}-create-second-validator-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-prepare-validator-data.outputs.cache-hit != 'true'
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
if: steps.cache-prepare-validator-data.outputs.cache-hit != 'true'
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
if: steps.cache-prepare-validator-data.outputs.cache-hit != 'true'
- name: Restore new binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }}
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH}}
${{ needs.build-new-binary.outputs.UPLOAD_SNAPSHOT_BINARY_PATH }}
key: ${{ needs.build-new-binary.outputs.CACHE_KEY }}
if: steps.cache-prepare-validator-data.outputs.cache-hit != 'true'
- name: Restore old binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.retrieve-old-binary.outputs.OLD_BINARY_PATH }}
key: ${{ runner.os }}-retrieve-old-binary-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-prepare-validator-data.outputs.cache-hit != 'true'
- name: Prepare validator data
run: |
GOMEMLIMIT=32GiB \
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH }} \
${{ needs.retrieve-snapshot.outputs.SNAPSHOT_FILE_PATH }} \
${{ needs.retrieve-old-binary.outputs.OLD_BINARY_PATH }} \
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }} \
--skip-snapshot \
--skip-chain-init \
--skip-create-validator \
--skip-submit-proposal \
--skip-upgrade-to-new-binary \
--timeout-next-block 100000 \
--timeout-wait-for-node 100000
if: steps.cache-prepare-validator-data.outputs.cache-hit != 'true'
submit-new-proposal:
runs-on: elys-runner
needs:
[
retrieve-latest-tag,
retrieve-snapshot,
retrieve-old-binary,
build-new-binary,
prepare-validator-data,
]
steps:
- name: Cache Directories
uses: actions/cache@v4
id: cache-submit-new-proposal
with:
path: |
/home/runner/.elys
/home/runner/.elys2
key: ${{ runner.os }}-submit-new-proposal-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
lookup-only: true
- name: Restore prepare validator data from cache
uses: actions/cache/restore@v4
with:
path: |
/home/runner/.elys
/home/runner/.elys2
key: ${{ runner.os }}-prepare-validator-data-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true'
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true'
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true'
- name: Restore new binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }}
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH}}
${{ needs.build-new-binary.outputs.UPLOAD_SNAPSHOT_BINARY_PATH }}
key: ${{ needs.build-new-binary.outputs.CACHE_KEY }}
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true'
- name: Restore old binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.retrieve-old-binary.outputs.OLD_BINARY_PATH }}
key: ${{ runner.os }}-retrieve-old-binary-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true'
- name: Submit new proposal
run: |
GOMEMLIMIT=32GiB \
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH }} \
${{ needs.retrieve-snapshot.outputs.SNAPSHOT_FILE_PATH }} \
${{ needs.retrieve-old-binary.outputs.OLD_BINARY_PATH }} \
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }} \
--skip-snapshot \
--skip-chain-init \
--skip-create-validator \
--skip-prepare-validator-data \
--skip-upgrade-to-new-binary \
--timeout-next-block 100000 \
--timeout-wait-for-node 100000
if: steps.cache-submit-new-proposal.outputs.cache-hit != 'true'
upgrade-to-new-binary:
runs-on: elys-runner
needs:
[
retrieve-latest-tag,
retrieve-snapshot,
build-new-binary,
submit-new-proposal,
]
steps:
- name: Cache Directories
uses: actions/cache@v4
id: cache-upgrade-to-new-binary
with:
path: |
/home/runner/.elys
/home/runner/.elys2
key: ${{ needs.build-new-binary.outputs.CACHE_KEY }}-upgrade-to-new-binary
lookup-only: true
- name: Restore submit new proposal from cache
uses: actions/cache/restore@v4
with:
path: |
/home/runner/.elys
/home/runner/.elys2
key: ${{ runner.os }}-submit-new-proposal-${{ needs.retrieve-latest-tag.outputs.LATEST_TAG }}
if: steps.cache-upgrade-to-new-binary.outputs.cache-hit != 'true'
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
if: steps.cache-upgrade-to-new-binary.outputs.cache-hit != 'true'
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
if: steps.cache-upgrade-to-new-binary.outputs.cache-hit != 'true'
- name: Restore new binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }}
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH}}
${{ needs.build-new-binary.outputs.UPLOAD_SNAPSHOT_BINARY_PATH }}
key: ${{ needs.build-new-binary.outputs.CACHE_KEY }}
if: steps.cache-upgrade-to-new-binary.outputs.cache-hit != 'true'
- name: Upgrade to new binary
run: |
GOMEMLIMIT=8GiB \
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH }} \
${{ needs.retrieve-snapshot.outputs.SNAPSHOT_FILE_PATH }} \
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }} \
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }} \
--skip-snapshot \
--skip-chain-init \
--skip-create-validator \
--skip-prepare-validator-data \
--skip-submit-proposal \
--timeout-next-block 100000 \
--timeout-wait-for-node 100000
if: steps.cache-upgrade-to-new-binary.outputs.cache-hit != 'true'
create-new-snapshot-file:
runs-on: elys-runner
needs: [retrieve-latest-tag, build-new-binary, upgrade-to-new-binary]
steps:
- name: Restore upgrade to new binary from cache
uses: actions/cache/restore@v4
with:
path: |
/home/runner/.elys
/home/runner/.elys2
key: ${{ needs.build-new-binary.outputs.CACHE_KEY }}-upgrade-to-new-binary
- 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: Restore new binary from cache
uses: actions/cache@v4
with:
path: |
${{ needs.build-new-binary.outputs.NEW_BINARY_PATH }}
${{ needs.build-new-binary.outputs.NEW_UPGRADE_ASSURE_BINARY_PATH}}
${{ needs.build-new-binary.outputs.UPLOAD_SNAPSHOT_BINARY_PATH }}
key: ${{ needs.build-new-binary.outputs.CACHE_KEY }}
- 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
run: |
export R2_ACCESS_KEY=${{ secrets.R2_ACCESS_KEY }}
export R2_SECRET_KEY=${{ secrets.R2_SECRET_KEY }}
export R2_ENDPOINT=${{ secrets.R2_ENDPOINT }}
export R2_BUCKET_NAME=${{ secrets.R2_BUCKET_NAME }}
${{ needs.build-new-binary.outputs.UPLOAD_SNAPSHOT_BINARY_PATH }} $NEW_SNAPSHOT_PATH
- name: Info about the snapshot
run: |
echo "Snapshot URL: https://snapshots.elys.network/$NEW_SNAPSHOT_FILENAME"