Skip to content

[CI] add zombienet setup and run most integration tests from the encointer-node #530

[CI] add zombienet setup and run most integration tests from the encointer-node

[CI] add zombienet setup and run most integration tests from the encointer-node #530

Workflow file for this run

name: CI
on:
push:
branches:
- master
- cl/test
tags:
- '[0-9]+.[0-9]+.[0-9]+*'
pull_request:
branches: [ master ]
workflow_dispatch:
inputs:
verbose:
description: "Set --verbose to get verbose build output"
required: false
default: 'true'
env:
VERBOSE: ${{ github.events.input.verbose }}
# Cancel a currently running workflow from the same PR, branch or tag when a new workflow is
# triggered (ref https://stackoverflow.com/a/72408109)
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build_primary_binaries:
name: Primary build ${{ matrix.binary }} for ${{ matrix.rust-target }} on (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-20.04 ]
rust: [ stable ]
binary: [ release ]
env:
RUST_BACKTRACE: full
RUSTV: ${{ matrix.rust }}
TARGET: ${{ matrix.rust-target }}
RUST_BIN_DIR: target/${{ matrix.rust-target }}/debug
RELEASE_NAME: debug
steps:
- uses: actions/checkout@v4
- name: Install protoc
run: sudo apt-get install protobuf-compiler
- name: Print env
run: |
echo "RUST_BIN_DIR = ${{ env.RUST_BIN_DIR }} "
# With rustup's nice new toml format, we just need to run rustup show to install the toolchain
# https://github.com/actions-rs/toolchain/issues/126#issuecomment-782989659
- name: Setup Rust toolchain
run: rustup show
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.os }}-${{ env.RUST_BIN_DIR }}-${{ matrix.binary }}
- name: Release
if: ${{ matrix.binary == 'release' }}
run: cargo build --locked --release
# Upload artifacts
- name: Upload encointer-collator
uses: actions/upload-artifact@v4
with:
name: encointer-collator-${{ github.sha }}
path: target/release/encointer-collator
cargo-toml-fmt:
runs-on: ubuntu-latest
container: "tamasfe/taplo:0.7.0-alpine"
steps:
- uses: actions/checkout@v4
- name: Run Taplo fmt
run: taplo fmt --check
- name: Fail-fast; cancel other jobs
if: failure()
uses: andymckay/cancel-action@0.2
create_artifacts:
needs: [ build_primary_binaries ]
runs-on: ubuntu-20.04
env:
CHAIN_SPEC: ${{ matrix.chain }}-${{ matrix.config }}
strategy:
fail-fast: false
matrix:
chain: [ encointer ]
config: [ rococo, westend, kusama ]
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: encointer-collator-${{ github.sha }}
- name: 'Create binaries for artifacts'
# The build-spec cmd does not create a deterministic key order in the produced json. Hence, we sort the keys
# before we use it to deterministically create the state.
run: |
chmod +x ./encointer-collator
./encointer-collator build-spec --chain ${{ env.CHAIN_SPEC }} --disable-default-bootnode --raw > ${{ env.CHAIN_SPEC }}-unsorted.json
jq --sort-keys . ${{ env.CHAIN_SPEC }}-unsorted.json > ${{ env.CHAIN_SPEC }}.json
./encointer-collator export-genesis-state --chain ${{ env.CHAIN_SPEC }}.json > ${{ env.CHAIN_SPEC }}.json.state
./encointer-collator export-genesis-state --chain ${{ env.CHAIN_SPEC }} > ${{ env.CHAIN_SPEC }}.state
- name: Compute file metadata
id: vars
run: |
sha256sum ${{ env.CHAIN_SPEC }}.state >> checksums.txt
sha256sum ${{ env.CHAIN_SPEC }}.json >> checksums.txt
sha256sum ${{ env.CHAIN_SPEC }}.json.state >> checksums.txt
- name: Upload ${{ env.CHAIN_SPEC }} Files
uses: actions/upload-artifact@v4
with:
name: ${{ env.CHAIN_SPEC }}-genesis-spec-${{ github.sha }}
path: |
checksums.txt
${{ env.CHAIN_SPEC }}.state
${{ env.CHAIN_SPEC }}.json
${{ env.CHAIN_SPEC }}.json.state
integration-test:
# name: ${{ matrix.test }}
name: integration-test
runs-on: ubuntu-20.04
# needs: build_primary_binaries
strategy:
fail-fast: false
matrix:
test:
- bootstrap_demo_community.py --signer //Bob -w collective --batch-size 7 --test
- bot-community-test -f http://host.docker.internal:5000/api -w collective --batch-size 7
env:
ZOMBIENET_VERSION: v1.3.116
ENCOINTER_CLIENT_DOCKER_TAG: 1.14.5
steps:
- uses: actions/checkout@v4
- name: Create testing directories
run: mkdir -p zombienet-tests/bin
- name: Setup zombienet binaries
run: |
mkdir -p zombienet-tests/bin
cd zombienet-tests/bin
wget -q "https://github.com/paritytech/zombienet/releases/download/${{ env.ZOMBIENET_VERSION }}/zombienet-linux-x64"
chmod +x zombienet-linux-x64
./zombienet-linux-x64 setup polkadot -y || :
./zombienet-linux-x64 version
- name: Download Encointer Collator
uses: actions/download-artifact@v4
with:
name: encointer-collator-${{ github.sha }}
# for debugging the integration tests, we can just download an image from a previous run
# name: encointer-collator-df76f5ef098cb52bc24b1e085d9db716c02e4220
# github-token: ${{ github.token }}
# run-id: 12786706739
- name: fix permissions of artifacts and move to test directory
run: |
chmod +x encointer-collator
cp encointer-collator zombienet-tests/bin
- name: Start zombienet-setup and sleep until the parachain produces blocks (approx 100 seconds)
run: |
zombienet-tests/bin/zombienet-linux-x64 spawn --provider native zombienet/github-actions-setup.toml &
echo "setup zombienet, sleep for 100 secs until parachain produces blocks"
sleep 180
- name: start dev node
run: |
docker run -p 30333:30333 -p 9944:9944 -p 9615:9615 \
encointer/encointer-client-notee:${{ env.ENCOINTER_CLIENT_DOCKER_TAG }} \
--dev \
--enable-offchain-indexing=true \
--rpc-methods=unsafe \
-lencointer=debug,parity_ws=warn \
--rpc-external &
- name: start faucet service
run: |
docker run -p 5000:5000 \
--add-host host.docker.internal:host-gateway \
encointer/encointer-client-notee:${{ env.ENCOINTER_CLIENT_DOCKER_TAG }} faucet.py \
-u ws://host.docker.internal \
--port 9944 &
- name: start phase accelerator service
# 5 idle blocks needed, which is more than the solochain because fewer extrinsics fit into a block
run: |
docker run \
--add-host host.docker.internal:host-gateway \
encointer/encointer-client-notee:${{ env.ENCOINTER_CLIENT_DOCKER_TAG }} phase.py \
-u ws://host.docker.internal \
--port 9944 --idle-blocks 5 &
- name: Test ${{ matrix.test }}
run: |
docker run \
--add-host host.docker.internal:host-gateway \
encointer/encointer-client-notee:${{ env.ENCOINTER_CLIENT_DOCKER_TAG }} ${{ matrix.test }} \
-u ws://host.docker.internal \
--port 9944 \
release:
name: Draft Release
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
needs: [ create_artifacts, build_primary_binaries ]
outputs:
release_url: ${{ steps.create-release.outputs.html_url }}
asset_upload_url: ${{ steps.create-release.outputs.upload_url }}
steps:
- uses: actions/checkout@v4
- name: Download Encointer Collator
uses: actions/download-artifact@v4
with:
name: encointer-collator-${{ github.sha }}
- name: Create required package.json
run: test -f package.json || echo '{}' >package.json
- name: Changelog
uses: scottbrenner/generate-changelog-action@master
id: Changelog
- name: Display structure of downloaded files
run: ls -R
working-directory: .
- name: Release
id: create-release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
body: |
${{ steps.Changelog.outputs.changelog }}
draft: true
files: |
encointer-collator