Skip to content

CSUB-692: try-runtime test w/o fast-runtime #203

CSUB-692: try-runtime test w/o fast-runtime

CSUB-692: try-runtime test w/o fast-runtime #203

Workflow file for this run

---
name: Runtime Upgrade
on:
pull_request:
branches: [main, testnet]
permissions: read-all
env:
RUNNER_VM_NAME: "github-runner-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT"
RESOURCE_GROUP: "github-runner-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT"
AZ_LOCATION: "westus3"
jobs:
setup:
runs-on: ubuntu-22.04
outputs:
switch_to_pos_already_called: ${{ steps.testnet-env.outputs.switch_to_pos_already_called || steps.mainnet-env.outputs.switch_to_pos_already_called }}
test_config: ${{ steps.testnet-env.outputs.test_config || steps.mainnet-env.outputs.test_config }}
target_chain: ${{ steps.testnet-env.outputs.target_chain || steps.mainnet-env.outputs.target_chain }}
boot_node: ${{ steps.testnet-env.outputs.boot_node || steps.mainnet-env.outputs.boot_node }}
rpc_url: ${{ steps.testnet-env.outputs.rpc_url || steps.mainnet-env.outputs.rpc_url }}
https_rpc_url: ${{ steps.testnet-env.https_rpc_url || steps.mainnet-env.outputs.https_rpc_url }}
release_tag: ${{ steps.testnet-env.outputs.release_tag || steps.mainnet-env.outputs.release_tag }}
artifact_name: ${{ steps.testnet-env.outputs.artifact_name || steps.mainnet-env.outputs.artifact_name }}
last_block_hash: ${{ steps.last-block-info.outputs.last_block_hash }}
last_block_number: ${{ steps.last-block-info.outputs.last_block_number }}
steps:
- uses: actions/checkout@v3
- name: Set-Up
run: |
sudo apt-get update
sudo apt install -y jq
- name: Testnet ENV
id: testnet-env
if: github.base_ref == 'testnet'
run: |
# shellcheck disable=SC2129
echo "switch_to_pos_already_called=1" >> "$GITHUB_OUTPUT"
echo "target_chain=test" >> "$GITHUB_OUTPUT"
echo "test_config=testnet.config.ts" >> "$GITHUB_OUTPUT"
echo "boot_node=/dns4/testnet-bootnode.creditcoin.network/tcp/30333/p2p/12D3KooWG3eEuYxo37LvU1g6SSESu4i9TQ8FrZmJcjvdys7eA3cH" >> "$GITHUB_OUTPUT"
echo "rpc_url=wss://rpc.testnet.creditcoin.network:443/ws" >> "$GITHUB_OUTPUT"
echo "https_rpc_url=https://rpc.testnet.creditcoin.network/rpc" >> "$GITHUB_OUTPUT"
RELEASE_TAG=$(./scripts/extract-release-tag.sh "testnet")
echo "release_tag=$RELEASE_TAG" >> "$GITHUB_OUTPUT"
echo "artifact_name=creditcoin-$RELEASE_TAG-$(uname -m)-unknown-linux-gnu.zip" >> "$GITHUB_OUTPUT"
- name: Mainnet ENV
id: mainnet-env
if: github.base_ref == 'main'
run: |
# shellcheck disable=SC2129
echo "switch_to_pos_already_called=0" >> "$GITHUB_OUTPUT"
echo "target_chain=main" >> "$GITHUB_OUTPUT"
echo "test_config=mainnet.config.ts" >> "$GITHUB_OUTPUT"
echo "boot_node=/dns4/bootnode.creditcoin.network/tcp/30333/p2p/12D3KooWAEgDL126EUFxFfdQKiUhmx3BJPdszQHu9PsYsLCuavhb" >> "$GITHUB_OUTPUT"
echo "rpc_url=wss://rpc.mainnet.creditcoin.network:443/ws" >> "$GITHUB_OUTPUT"
echo "https_rpc_url=https://rpc.mainnet.creditcoin.network/rpc" >> "$GITHUB_OUTPUT"
RELEASE_TAG=$(./scripts/extract-release-tag.sh "runtime")
echo "release_tag=$RELEASE_TAG" >> "$GITHUB_OUTPUT"
echo "artifact_name=creditcoin-$RELEASE_TAG-$(uname -m)-unknown-linux-gnu.zip" >> "$GITHUB_OUTPUT"
- name: Store last block info
id: last-block-info
run: |
# store info about the last finalized block before the fork
# WARNING: using getBlockHash() instead of getFinalizedHead() b/c PoW doesn't have finalization
LAST_BLOCK=$(curl --silent -H "Content-Type: application/json" \
-d '{"id": 1, "jsonrpc": "2.0", "method": "chain_getBlockHash", "params": [] }' \
${{ env.HTTPS_RPC_URL }} | jq -r .result)
echo "$LAST_BLOCK" > last-block.hash
echo "last_block_hash=$LAST_BLOCK" >> "$GITHUB_OUTPUT"
while true; do
curl --silent -H "Content-Type: application/json" \
-d "{\"id\": 1, \"jsonrpc\": \"2.0\", \"method\": \"chain_getBlock\", \"params\": [\"$LAST_BLOCK\"] }" \
${{ env.HTTPS_RPC_URL }} | jq -r .result > last-block.json
LAST_BLOCK_NUMBER=$(jq -r .block.header.number last-block.json)
if [ "$LAST_BLOCK_NUMBER" != "null" ]; then
break
else
echo "INFO: retry fetching block infor for $LAST_BLOCK"
sleep 60
fi
done
echo "last_block_number=$LAST_BLOCK_NUMBER" >> "$GITHUB_OUTPUT"
env:
HTTPS_RPC_URL: ${{ steps.testnet-env.outputs.https_rpc_url || steps.mainnet-env.outputs.https_rpc_url }}
- name: Upload last block info
uses: actions/upload-artifact@v3
with:
name: last-block-info
path: "last-block*"
if-no-files-found: error
build-sut:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: Set-Up
run: |
sudo apt-get update
sudo apt install -y cmake pkg-config libssl-dev git build-essential clang libclang-dev curl protobuf-compiler
sudo apt install -y unzip jq
- name: Configure rustc version
run: |
source ci/env
echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV"
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUSTC_VERSION }}
target: wasm32-unknown-unknown
profile: minimal
override: true
- uses: Swatinem/rust-cache@v2
- name: Build SUT
uses: actions-rs/cargo@v1
with:
command: build
args: --release --features try-runtime
- name: Upload creditcoin-node binary
uses: actions/upload-artifact@v3
with:
name: creditcoin-node
path: target/release/creditcoin-node
- name: Upload WASM runtime
uses: actions/upload-artifact@v3
with:
name: creditcoin_node_runtime.compact.compressed.wasm
path: target/release/wbuild/creditcoin-node-runtime/creditcoin_node_runtime.compact.compressed.wasm
fork-creditcoin:
needs:
- setup
- live-sync-creditcoin
- deploy-github-runner
runs-on:
[self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"]
steps:
- uses: actions/checkout@v3
- name: Download creditcoin-node for release ${{ needs.setup.outputs.release_tag }}
uses: i3h/download-release-asset@v1
with:
owner: gluwa
repo: creditcoin
tag: ${{ needs.setup.outputs.release_tag }}
file: ${{ needs.setup.outputs.artifact_name }}
- name: Download creditcoin-fork
uses: i3h/download-release-asset@v1
with:
owner: gluwa
repo: creditcoin-fork
tag: latest
file: creditcoin-fork
- name: Start local creditcoin-node for ${{ needs.setup.outputs.target_chain }}
run: |
# see https://opensource.com/article/18/5/how-find-ip-address-linux
IP_ADDRESS=$(curl https://ifconfig.me)
echo "INFO: IP_ADDRESS=$IP_ADDRESS"
sudo apt-get update
sudo apt install -y unzip
unzip creditcoin-*-unknown-linux-gnu.zip
chmod a+x ./creditcoin-node
./creditcoin-node --version
./creditcoin-node \
--name "test-node-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \
--chain ${{ needs.setup.outputs.target_chain }} \
--validator --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \
--bootnodes "${{ needs.setup.outputs.boot_node }}" \
--prometheus-external \
--telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \
--public-addr "/dns4/$IP_ADDRESS/tcp/50555" \
--port 50555 >creditcoin-node-used-for-fork.log 2>&1 &
- name: Wait for creditcoin-node to initialize
run: |
./integration-tests/wait-for-creditcoin.sh
- name: Create fork
run: |
chmod a+x ./creditcoin-fork
./creditcoin-fork --bin ./creditcoin-node --orig ${{ needs.setup.outputs.target_chain }} \
--base dev --name Development \
-o creditcoin-fork.json --rpc ws://127.0.0.1:9944
- name: TERM creditcoin-node
continue-on-error: true
run: |
killall -TERM creditcoin-node
sleep 120
- name: KILL creditcoin-node
continue-on-error: true
run: |
killall -KILL creditcoin-node
sleep 120
- name: Upload logs
uses: actions/upload-artifact@v3
if: always()
with:
name: logs
path: "*.log"
- name: Upload creditcoin-fork.json
uses: actions/upload-artifact@v3
with:
name: creditcoin-fork.json
path: creditcoin-fork.json
live-sync-creditcoin:
needs:
- setup
- deploy-github-runner
runs-on:
[self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"]
steps:
- uses: actions/checkout@v3
- name: Download creditcoin-node for release ${{ needs.setup.outputs.release_tag }}
uses: i3h/download-release-asset@v1
with:
owner: gluwa
repo: creditcoin
tag: ${{ needs.setup.outputs.release_tag }}
file: ${{ needs.setup.outputs.artifact_name }}
- name: Sync with ${{ needs.setup.outputs.target_chain }} past block number ${{ needs.setup.outputs.last_block_number }}
run: |
# see https://opensource.com/article/18/5/how-find-ip-address-linux
IP_ADDRESS=$(curl https://ifconfig.me)
echo "INFO: IP_ADDRESS=$IP_ADDRESS"
sudo apt-get update
sudo apt install -y unzip
unzip creditcoin-*-unknown-linux-gnu.zip
chmod a+x ./creditcoin-node
./creditcoin-node --version
./creditcoin-node \
--name "test-node-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \
--chain ${{ needs.setup.outputs.target_chain }} \
--validator --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \
--bootnodes "${{ needs.setup.outputs.boot_node }}" \
--prometheus-external --pruning archive \
--telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \
--public-addr "/dns4/$IP_ADDRESS/tcp/50555" \
--port 50555 >creditcoin-node-initial-live-sync.log 2>&1 &
- name: Wait for creditcoin-node to sync past block number ${{ needs.setup.outputs.last_block_number }}
run: |
./scripts/wait-for-sync.sh ${{ needs.setup.outputs.last_block_number }}
- name: TERM creditcoin-node
continue-on-error: true
run: |
killall -TERM creditcoin-node
sleep 120
- name: KILL creditcoin-node
continue-on-error: true
run: |
killall -KILL creditcoin-node
sleep 120
- name: Upload logs
uses: actions/upload-artifact@v3
if: always()
with:
name: logs
path: "*.log"
test-against-fork:
needs:
- setup
- build-sut
- fork-creditcoin
- deploy-github-runner
runs-on:
[self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"]
steps:
- uses: actions/checkout@v3
- name: Download creditcoin-node from current PR
uses: actions/download-artifact@v3
with:
name: creditcoin-node
path: target/release
- name: Download creditcoin-fork.json
uses: actions/download-artifact@v3
with:
name: creditcoin-fork.json
- name: Start a local creditcoin-node from the fork
run: |
chmod a+x ./target/release/creditcoin-node
./target/release/creditcoin-node --version
./target/release/creditcoin-node --chain ./creditcoin-fork.json --validator --alice --pruning archive \
--mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \
--monitor-nonce auto >creditcoin-node-with-forked-chain.log 2>&1 &
- name: Wait for blockchain to start
run: |
./integration-tests/wait-for-creditcoin.sh
- name: Store last block info from fork
id: last-block-info
run: |
# store info about the last finalized block before the fork
# WARNING: using getBlockHash() instead of getFinalizedHead() b/c PoW doesn't have finalization
LAST_BLOCK=$(curl --silent -H "Content-Type: application/json" \
-d '{"id": 1, "jsonrpc": "2.0", "method": "chain_getBlockHash", "params": [] }' \
http://127.0.0.1:9933 | jq -r .result)
echo "$LAST_BLOCK" > fork-last-block-hash.log
echo "last_block_hash=$LAST_BLOCK" >> "$GITHUB_OUTPUT"
while true; do
curl --silent -H "Content-Type: application/json" \
-d "{\"id\": 1, \"jsonrpc\": \"2.0\", \"method\": \"chain_getBlock\", \"params\": [\"$LAST_BLOCK\"] }" \
http://127.0.0.1:9933 | jq -r .result > fork-last-block-json.log
LAST_BLOCK_NUMBER=$(jq -r .block.header.number fork-last-block-json.log)
if [ "$LAST_BLOCK_NUMBER" != "null" ]; then
break
else
echo "INFO: retry fetching block infor for $LAST_BLOCK"
sleep 60
fi
done
echo "last_block_number=$LAST_BLOCK_NUMBER" >> "$GITHUB_OUTPUT"
- name: Install Docker engine
run: |
./scripts/install-docker-engine-from-upstream.sh
- name: Start local Ethereum node
run: |
sudo docker run --name hardhat-dev --rm -p 8545:8545 -d gluwa/hardhat-dev
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 16
- run: npm install -g yarn
- name: Prepare for integration tests
run: |
pushd integration-tests/
# wait for creditcoin-node to initialize
./yarn-install-and-wait-for-creditcoin.sh
git checkout yarn.lock
popd
- name: Configure rustc version
run: |
source ci/env
echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV"
sudo apt install -y gcc
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUSTC_VERSION }}
profile: minimal
override: true
- name: Install Subwasm
uses: actions-rs/cargo@v1
with:
command: install
args: --locked --git https://github.com/chevdor/subwasm --tag v0.17.1
- name: Download WASM runtime from current PR
id: download-wasm
uses: actions/download-artifact@v3
with:
name: creditcoin_node_runtime.compact.compressed.wasm
- name: Upgrade WASM
run: |
yarn --cwd ./scripts/js upgrade 'creditcoin-js'
yarn --cwd ./scripts/js runtimeUpgrade ws://127.0.0.1:9944 ../../creditcoin_node_runtime.compact.compressed.wasm //Alice 0
# TODO: wait & confirm wasm upgrade has finished, incl. migrations
- name: Execute integration tests
run: |
cp fork-last-block-json.log ./integration-tests/
yarn --cwd ./integration-tests/ test --config creditcoin-fork.config.ts
env:
# Note: this is PoW blocks on the forked chain, not Prod
LAST_POW_BLOCK_NUMBER: ${{ steps.last-block-info.outputs.last_block_number }}
LAST_POW_BLOCK_INFO_PATH: fork-last-block-json.log
SWITCH_TO_POS_ALREADY_CALLED: ${{ needs.setup.outputs.switch_to_pos_already_called }}
- name: Upload logs
uses: actions/upload-artifact@v3
if: always()
with:
name: logs
path: "*.log"
- name: Kill hardhat-dev
if: always()
run: |
sudo docker kill hardhat-dev
- name: Kill creditcoin-node
run: |
# if all went well kill the node. Otherwise GitHub Actions would exit on the
# previous step killing everything and we don't have to worry about
# dangling processes
killall -9 creditcoin-node
test-against-disconnected-live-node:
# execute only against Testnet b/c we don't have sudo key for Mainnet
if: github.base_ref == 'testnet'
needs:
- build-sut
- setup
- live-sync-creditcoin
- deploy-github-runner
runs-on:
[self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"]
steps:
- uses: actions/checkout@v3
- name: Download creditcoin-node from current PR
uses: actions/download-artifact@v3
with:
name: creditcoin-node
path: target/release
- name: Start creditcoin-node from current PR
run: |
# see https://opensource.com/article/18/5/how-find-ip-address-linux
IP_ADDRESS=$(curl https://ifconfig.me)
echo "INFO: IP_ADDRESS=$IP_ADDRESS"
chmod a+x ./target/release/creditcoin-node
./target/release/creditcoin-node --version
./target/release/creditcoin-node \
--name "test-node-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \
--chain ${{ needs.setup.outputs.target_chain }} \
--pruning archive \
--validator --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \
--bootnodes "${{ needs.setup.outputs.boot_node }}" \
--prometheus-external \
--telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \
--public-addr "/dns4/$IP_ADDRESS/tcp/50555" \
--port 50555 >creditcoin-node-disconnected-paritydb-sync.log 2>&1 &
- name: Wait for blockchain to start
run: |
./integration-tests/wait-for-creditcoin.sh
# wait again because of RocksDB -> ParityDB switch !
- name: Wait for creditcoin-node to sync past block number ${{ needs.setup.outputs.last_block_number }}
run: |
./scripts/wait-for-sync.sh ${{ needs.setup.outputs.last_block_number }}
- name: TERM creditcoin-node
continue-on-error: true
run: |
killall -TERM creditcoin-node
sleep 30
- name: KILL creditcoin-node
continue-on-error: true
run: |
killall -KILL creditcoin-node
sleep 30
- name: Start a disconnected creditcoin-node
run: |
chmod a+x ./target/release/creditcoin-node
./target/release/creditcoin-node --version
# WARNING: using different port b/c the network remembers there was a node
# at this address previously. We don't want to be connected to the chain !!!
./target/release/creditcoin-node \
--port 44444 \
--name "test-node-disconnected-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \
--chain ${{ needs.setup.outputs.target_chain }} \
--validator --alice --pruning archive \
--mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \
--prometheus-external \
--telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \
--monitor-nonce auto >creditcoin-node-disconnected-live-node.log 2>&1 &
- name: Wait for blockchain to start
run: |
./integration-tests/wait-for-creditcoin.sh
- name: Install Docker engine
run: |
./scripts/install-docker-engine-from-upstream.sh
- name: Start local Ethereum node
run: |
sudo docker run --name hardhat-dev --rm -p 8545:8545 -d gluwa/hardhat-dev
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 16
- run: npm install -g yarn
- name: Prepare for integration tests
run: |
pushd integration-tests/
# wait for creditcoin-node to initialize
./yarn-install-and-wait-for-creditcoin.sh
git checkout yarn.lock
popd
- name: Configure rustc version
run: |
source ci/env
echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV"
sudo apt install -y gcc
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUSTC_VERSION }}
profile: minimal
override: true
- name: Install Subwasm
uses: actions-rs/cargo@v1
with:
command: install
args: --locked --git https://github.com/chevdor/subwasm --tag v0.17.1
- name: Download WASM runtime
id: download-wasm
uses: actions/download-artifact@v3
with:
name: creditcoin_node_runtime.compact.compressed.wasm
- name: Upgrade WASM & switchToPos
run: |
yarn --cwd ./scripts/js upgrade 'creditcoin-js'
yarn --cwd ./scripts/js runtimeUpgrade ws://127.0.0.1:9944 ../../creditcoin_node_runtime.compact.compressed.wasm //Alice 0
sleep 10
yarn --cwd ./scripts/js switchToPos ws://127.0.0.1:9944 //Alice
- name: Download last-block.json from Setup stage
uses: actions/download-artifact@v3
with:
name: last-block-info
# TODO: wait & confirm wasm upgrade has finished, incl. migrations
- name: Execute integration tests
if: env.ETHEREUM_NODE_URL
run: |
cp last-block.json ./integration-tests/
yarn --cwd ./integration-tests/ test --config testnet.config.ts
env:
# Note: this is PoW blocks on the live chain
LAST_POW_BLOCK_NUMBER: ${{ needs.setup.outputs.last_block_number }}
LAST_POW_BLOCK_INFO_PATH: last-block.json
ETHEREUM_NODE_URL: ${{ secrets.TESTNET_ETHEREUM_NODE_URL }}
LENDER_PRIVATE_KEY: ${{ secrets.TESTNET_LENDER_PRIVATE_KEY }}
LENDER_SEED: "${{ secrets.TESTNET_LENDER_SEED }}"
BORROWER_PRIVATE_KEY: ${{ secrets.TESTNET_BORROWER_PRIVATE_KEY }}
BORROWER_SEED: "${{ secrets.TESTNET_BORROWER_SEED }}"
- name: Upload logs
uses: actions/upload-artifact@v3
if: always()
with:
name: logs
path: "*.log"
- name: Kill hardhat-dev
if: always()
run: |
sudo docker kill hardhat-dev
- name: Kill creditcoin-node
run: |
# if all went well kill the node. Otherwise GitHub Actions would exit on the
# previous step killing everything and we don't have to worry about
# dangling processes
killall -9 creditcoin-node
deploy-github-runner:
runs-on: ubuntu-22.04
outputs:
runner_vm_name: ${{ steps.get-env.outputs.runner_vm_name }}
resource_group: ${{ steps.get-env.outputs.resource_group }}
steps:
- uses: actions/checkout@v3
- name: Install azure-cli
run: |
sudo apt remove azure-cli -y && sudo apt autoremove -y
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
sudo apt install -y jq
az version
- name: Authorize hosted-runner
run: |
mkdir -p ~/.ssh/
ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> .github/authorized_keys
- name: Evaluate env vars
id: get-env
run: |
# WARNING: using env.RUNNER_VM_NAME directly in job outputs above
# doesn't evaluate the $GITHUB_RUN_ID reference
echo "runner_vm_name=${{ env.RUNNER_VM_NAME }}" >> "$GITHUB_OUTPUT"
echo "resource_group=${{ env.RESOURCE_GROUP }}" >> "$GITHUB_OUTPUT"
- name: Provision VM
if: env.LC_GITHUB_REPO_ADMIN_TOKEN
run: |
echo "INFO: From ENVs: RUNNER_VM_NAME=${{ env.RUNNER_VM_NAME }}"
echo "INFO: From Step: RUNNER_VM_NAME=${{ steps.get-env.outputs.runner_vm_name }}"
az login --service-principal --username "${{ secrets.AZURE_APP_ID }}" --password "${{ secrets.AZURE_APP_PASSWORD }}" --tenant "${{ secrets.AZURE_TENANT_ID }}"
az account set --subscription "Playground Subscription"
## az account set -s "${{ secrets.AZURE_SUBSCRIPTION_ID }}"
# create resource group
echo "INFO: ${{ steps.get-env.outputs.resource_group }}"
az group create -n "${{ steps.get-env.outputs.resource_group }}" --location "${{ env.AZ_LOCATION }}"
# RG Creditcoin-Test is in WestUS and the CPU quota is already full
# that's why specify a different region here
az deployment group create -g "${{ steps.get-env.outputs.resource_group }}" -f .github/runner.bicep \
--parameters location="${{ env.AZ_LOCATION }}" \
--parameters vmName="${{ steps.get-env.outputs.runner_vm_name }}" \
--parameters adminPasswordOrKey="$(cat .github/authorized_keys)" > output.json
# provision the GitHub Runner binary on the VM
# passing additional ENV values
SSH_USER_AT_HOSTNAME=$(jq -r '.properties.outputs.sshUserAtHostname.value' < output.json)
echo "INFO: $SSH_USER_AT_HOSTNAME"
export LC_RUNNER_VM_NAME="${{ env.RUNNER_VM_NAME }}"
until ssh -i ~/.ssh/id_rsa \
-o SendEnv=LC_GITHUB_REPO_ADMIN_TOKEN,LC_RUNNER_VM_NAME \
-o StrictHostKeyChecking=no "$SSH_USER_AT_HOSTNAME" < ./scripts/provision-github-runner.sh; do
echo "DEBUG: retrying ssh connection ..."
sleep 30
done
env:
LC_GITHUB_REPO_ADMIN_TOKEN: ${{ secrets.GH_REPO_ADMIN_TOKEN }}
LC_RUNNER_EPHEMERAL: false
test-migrations-via-try-runtime:
# see https://gist.github.com/jonico/a94d03cac7a858e0613926d9f1bc7f2b
runs-on:
[self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"]
needs:
- build-sut
- setup
- deploy-github-runner
steps:
- uses: actions/checkout@v3
- name: Download creditcoin-node binary from current PR
uses: actions/download-artifact@v3
with:
name: creditcoin-node
path: target/release
- name: Download WASM runtime
uses: actions/download-artifact@v3
with:
name: creditcoin_node_runtime.compact.compressed.wasm
path: target/release
- name: Restore executable permissions
run: |
chmod a+x ./target/release/creditcoin-node
- name: Check if runner machine meets chain's requirements
continue-on-error: true
run: |
./scripts/check-hardware.sh
- name: Start local creditcoin-node for ${{ needs.setup.outputs.target_chain }}
run: |
# see https://opensource.com/article/18/5/how-find-ip-address-linux
IP_ADDRESS=$(curl https://ifconfig.me)
echo "INFO: IP_ADDRESS=$IP_ADDRESS"
./target/release/creditcoin-node --version
./target/release/creditcoin-node \
--name "test-node-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \
--chain ${{ needs.setup.outputs.target_chain }} \
--validator --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \
--bootnodes "${{ needs.setup.outputs.boot_node }}" \
--prometheus-external \
--telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \
--public-addr "/dns4/$IP_ADDRESS/tcp/30333" >creditcoin-node-used-for-try-runtime.log 2>&1 &
- name: Wait for creditcoin-node to initialize
run: |
./integration-tests/wait-for-creditcoin.sh
- name: Try-runtime migrations
run: |
./target/release/creditcoin-node try-runtime \
--runtime ./target/release/creditcoin_node_runtime.compact.compressed.wasm \
--dev on-runtime-upgrade live --uri ws://127.0.0.1:9944 \
--at ${{ needs.setup.outputs.last_block_hash }}
- name: TERM creditcoin-node
continue-on-error: true
run: |
killall -TERM creditcoin-node
sleep 60
- name: KILL creditcoin-node
if: always()
continue-on-error: true
run: |
killall -KILL creditcoin-node
sleep 600
- name: Upload logs
uses: actions/upload-artifact@v3
if: always()
with:
name: logs
path: "*.log"
remove-github-runner:
runs-on: ubuntu-22.04
needs:
- deploy-github-runner
- test-migrations-via-try-runtime
- test-against-fork
- test-against-disconnected-live-node
if: ${{ always() && needs.deploy-github-runner.result != 'skipped' }}
steps:
- uses: actions/checkout@v3
- name: Evaluate env vars
id: get-env
run: |
# WARNING: using env.RUNNER_VM_NAME directly in job outputs above
# doesn't evaluate the $GITHUB_RUN_ID reference
echo "resource_group=${{ env.RESOURCE_GROUP }}" >> "$GITHUB_OUTPUT"
- name: Install azure-cli
run: |
sudo apt remove azure-cli -y && sudo apt autoremove -y
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
az version
- name: Remove VM
run: |
echo "INFO: RUNNER_VM_NAME=${{ env.RUNNER_VM_NAME }}"
az login --service-principal --username "${{ secrets.AZURE_APP_ID }}" --password "${{ secrets.AZURE_APP_PASSWORD }}" --tenant "${{ secrets.AZURE_TENANT_ID }}"
az account set --subscription "Playground Subscription"
az group delete --yes -n "${{ steps.get-env.outputs.resource_group }}"
- name: Upload logs
uses: actions/upload-artifact@v3
if: always()
with:
name: "Azure resources"
path: azure_resource_list.json