Skip to content

Zombienet

Zombienet #513

Workflow file for this run

name: Zombienet
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
push:
paths:
- 'tests/**'
- '.github/workflows/main.yaml'
jobs:
check:
outputs:
new-release: ${{ steps.check.outputs.new-release }}
polkadot-sdk-release-tag: ${{ steps.polkadot-sdk-release-tag.outputs.tag }}
wasm-injector-release-tag: ${{ steps.wasm-injector-release-tag.outputs.tag }}
moonbeam-release-tag: ${{ steps.moonbeam-release-tag.outputs.tag }}
acala-release-tag: ${{ steps.acala-release-tag.outputs.tag }}
kagome-release-tag: ${{ steps.kagome-release-tag.outputs.tag }}
runs-on: ubuntu-latest
steps:
- name: Checkout to working branch
uses: actions/checkout@v3
with:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Calculate hash of the tests folder and write to dependencies.txt
run: |
echo "Calculating hash for the tests folder..."
TESTS_HASH=$(find tests -type f -print0 | sort -z | xargs -0 shasum | shasum | awk '{ print $1 }')
echo "hash=$TESTS_HASH" >> "$GITHUB_OUTPUT"
id: test-folder-hash
- name: Checkout to feat/cicd
uses: actions/checkout@v3
with:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
ref: feat/cicd
- uses: oprypin/find-latest-tag@v1
with:
repository: LimeChain/wasm-injector # The repository to scan.
releases-only: true # We know that all relevant tags have a GitHub release for them.
id: wasm-injector-release-tag # The step ID to refer to later.
- run: echo "Wasm injector is at version ${{ steps.wasm-injector-release-tag.outputs.tag }}"
- uses: oprypin/find-latest-tag@v1
with:
repository: qdrvm/kagome # The repository to scan.
releases-only: true # We know that all relevant tags have a GitHub release for them.
id: kagome-release-tag # The step ID to refer to later.
- run: echo "Kagome is at version ${{ steps.kagome-release-tag.outputs.tag }}"
- uses: oprypin/find-latest-tag@v1
with:
repository: paritytech/polkadot-sdk # The repository to scan.
releases-only: true # We know that all relevant tags have a GitHub release for them.
id: polkadot-sdk-release-tag # The step ID to refer to later.
- run: echo "Polkadot is at version ${{ steps.polkadot-sdk-release-tag.outputs.tag }}"
- uses: oprypin/find-latest-tag@v1
with:
repository: moonbeam-foundation/moonbeam # The repository to scan.
releases-only: true # We know that all relevant tags have a GitHub release for them.
id: moonbeam-release-tag # The step ID to refer to later.
- run: echo "Moonbeam is at version ${{ steps.moonbeam-release-tag.outputs.tag }}"
- uses: oprypin/find-latest-tag@v1
with:
repository: AcalaNetwork/Acala # The repository to scan.
releases-only: true # We know that all relevant tags have a GitHub release for them.
id: acala-release-tag # The step ID to refer to later.
- run: echo "Acala is at version ${{ steps.acala-release-tag.outputs.tag }}"
- name: Write tags to dependencies file
run: |
echo "Tests folder hash: ${{ steps.test-folder-hash.outputs.hash }}" > dependencies.txt
echo "Kagome tag: ${{ steps.kagome-release-tag.outputs.tag }}" >> dependencies.txt
echo "Polkadot SDK tag: ${{ steps.polkadot-sdk-release-tag.outputs.tag }}" >> dependencies.txt
echo "Wasm injector tag: ${{ steps.wasm-injector-release-tag.outputs.tag }}" >> dependencies.txt
echo "Moonbeam tag: ${{ steps.moonbeam-release-tag.outputs.tag }}" >> dependencies.txt
echo "Acala tag: ${{ steps.acala-release-tag.outputs.tag }}" >> dependencies.txt
# `git diff --quiet HEAD --` will exit with code 1 if there are changes and exit with code 0 if there aren't any changes to the code
- name: Check if dependencies have changed
id: check
run: |
if git diff --quiet HEAD --; then
echo "dependencies file has NOT changed."
echo "new-release=false" >> "$GITHUB_OUTPUT"
else
echo "dependencies file has changed!"
echo "new-release=true" >> "$GITHUB_OUTPUT"
fi
- name: Commit latest dependencies
if: ${{ steps.check.outputs.new-release == 'true' }}
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add dependencies.txt
git commit -m "Update dependencies file"
git pull --rebase origin feat/cicd
git push origin feat/cicd
run-tests:
runs-on: ubuntu-latest
needs: check
if: needs.check.outputs.new-release == 'true' || github.event_name == 'push' || github.event_name == 'workflow_dispatch'
steps:
- name: Checkout
uses: actions/checkout@v3
with:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Fetch Github Release Asset from wasm-injector
uses: dsaltares/fetch-gh-release-asset@master
with:
repo: "LimeChain/wasm-injector"
file: "wasm-injector-ubuntu-22"
target: "wasm-injector-ubuntu-22"
version: "tags/${{ needs.check.outputs.wasm-injector-release-tag }}"
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Rename wasm-injector
run: mv wasm-injector-ubuntu-22 wasm-injector
- name: Fetch polkadot Github Release Asset from polkadot-sdk
uses: dsaltares/fetch-gh-release-asset@master
with:
repo: "paritytech/polkadot-sdk"
file: "polkadot"
target: "polkadot"
version: "tags/${{ needs.check.outputs.polkadot-sdk-release-tag }}"
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Fetch polkadot-prepare-worker Github Release Asset from polkadot-sdk
uses: dsaltares/fetch-gh-release-asset@master
with:
repo: "paritytech/polkadot-sdk"
file: "polkadot-prepare-worker"
target: "polkadot-prepare-worker"
version: "tags/${{ needs.check.outputs.polkadot-sdk-release-tag }}"
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Fetch polkadot-execute-worker Github Release Asset from polkadot-sdk
uses: dsaltares/fetch-gh-release-asset@master
with:
repo: "paritytech/polkadot-sdk"
file: "polkadot-execute-worker"
target: "polkadot-execute-worker"
version: "tags/${{ needs.check.outputs.polkadot-sdk-release-tag }}"
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Fetch Github Release Asset from polkadot-parachain
uses: dsaltares/fetch-gh-release-asset@master
with:
repo: "paritytech/polkadot-sdk"
file: "polkadot-parachain"
target: "polkadot-parachain"
version: "tags/${{ needs.check.outputs.polkadot-sdk-release-tag }}"
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Fetch Github Release Asset from zombienet
uses: dsaltares/fetch-gh-release-asset@master
with:
repo: "paritytech/zombienet"
file: "zombienet-linux-x64"
target: "zombienet"
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Fetch Moonbeam
run: |
docker run --user root -v $GITHUB_WORKSPACE:/hostdir --rm --entrypoint sh moonbeamfoundation/moonbeam:${{ needs.check.outputs.moonbeam-release-tag }} -c "cp /moonbeam/moonbeam /hostdir/moonbeam && chmod +x /hostdir/moonbeam"
- name: Fetch Kagome
run: |
docker run -v $GITHUB_WORKSPACE:/kagome --rm qdrvm/kagome:${{ needs.check.outputs.kagome-release-tag }} sh -c "cp /usr/local/bin/kagome . && chmod +x kagome"
- name: Fetch Acala
run: |
docker run --user root -v $GITHUB_WORKSPACE:/hostdir --rm --entrypoint sh acala/acala-node:${{ needs.check.outputs.acala-release-tag }} -c "cp /usr/local/bin/acala hostdir/acala && chmod +x /hostdir/acala"
- run : sudo apt-get update
- run: sudo apt-get install -y --no-install-recommends software-properties-common curl gpg gpg-agent wget
- run: curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- run: echo "deb http://deb.debian.org/debian/ experimental main" | sudo tee -a /etc/apt/sources.list.d/docker.list > /dev/null
- run: wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
- run: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9
- run: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6ED0E7B82643E131
- run: sudo add-apt-repository -y "deb http://deb.debian.org/debian/ testing main"
- run: sudo apt-get update
- run: sudo apt-get install --no-install-recommends -y libstdc++6 libc6 libnsl2 || true
- run: |
echo "$GITHUB_WORKSPACE" >> $GITHUB_PATH
sudo chmod +x moonbeam
chmod +x polkadot
chmod +x polkadot-parachain
chmod +x polkadot-execute-worker
chmod +x polkadot-prepare-worker
chmod +x zombienet
chmod +x wasm-injector
- name: Create wasm folder
run: mkdir wasm
- name: Export Rococo genesis wasm
run: polkadot-parachain export-genesis-wasm --chain=staging > ./wasm/rococo.wasm.hex # This loads the chain_spec::rococo_parachain::staging_rococo_parachain_local_config()
- name: Inject Rococo wasm
run: |
wasm-injector inject noops --size 60 validate_block ./wasm/rococo.wasm.hex ./wasm/code-size-rococo.wasm.hex --hexified --compressed
wasm-injector inject stack-overflow validate_block ./wasm/rococo.wasm.hex ./wasm/stack-overflow-rococo.wasm.hex --hexified --compressed
wasm-injector inject heap-overflow validate_block ./wasm/rococo.wasm.hex ./wasm/heap-overflow-rococo.wasm.hex --hexified --compressed
wasm-injector inject infinite-loop validate_block ./wasm/rococo.wasm.hex ./wasm/infinite-loop-rococo.wasm.hex --hexified --compressed
- name: Export Acala genesis wasm
run: acala export-genesis-wasm --chain=acala-local > ./wasm/acala.wasm.hex
- name: Inject Acala wasm
run: |
wasm-injector inject noops --size 60 validate_block ./wasm/acala.wasm.hex ./wasm/code-size-acala.wasm.hex --hexified --compressed
wasm-injector inject stack-overflow validate_block ./wasm/acala.wasm.hex ./wasm/stack-overflow-acala.wasm.hex --hexified --compressed
wasm-injector inject heap-overflow validate_block ./wasm/acala.wasm.hex ./wasm/heap-overflow-acala.wasm.hex --hexified --compressed
wasm-injector inject infinite-loop validate_block ./wasm/acala.wasm.hex ./wasm/infinite-loop-acala.wasm.hex --hexified --compressed
- name: Export Moonbeam wasm
run: moonbeam export-genesis-wasm --chain=moonbase-local > ./wasm/moonbase.wasm.hex
- name: Inject Moonbeam wasm
run: |
wasm-injector inject noops --size 60 validate_block ./wasm/moonbase.wasm.hex ./wasm/code-size-moonbase.wasm.hex --hexified --compressed
wasm-injector inject stack-overflow validate_block ./wasm/moonbase.wasm.hex ./wasm/stack-overflow-moonbase.wasm.hex --hexified --compressed
wasm-injector inject heap-overflow validate_block ./wasm/moonbase.wasm.hex ./wasm/heap-overflow-moonbase.wasm.hex --hexified --compressed
wasm-injector inject infinite-loop validate_block ./wasm/moonbase.wasm.hex ./wasm/infinite-loop-moonbase.wasm.hex --hexified --compressed
- name: Set up Julia
uses: julia-actions/setup-julia@v1
with:
version: '1.9.1'
- name: Run Kagome Tests with Rococo runtime
if: success() || failure()
run: julia scripts/runTests.jl cumulus kagome
- name: Run Polkadot Tests with Rococo runtime
if: success() || failure()
run: julia scripts/runTests.jl cumulus polkadot
- name: Clean up logs
if: success() || failure()
run: rm -rf /tmp/zombie-*
- name: Run Kagome Tests with Moonbeam runtime
if: success() || failure()
run: julia scripts/runTests.jl moonbeam kagome
- name: Run Polkadot Tests with Moonbeam runtime
if: success() || failure()
run: julia scripts/runTests.jl moonbeam polkadot
- name: Clean up logs
if: success() || failure()
run: rm -rf /tmp/zombie-*
- name: Run Kagome tests with Acala runtime
if: success() || failure()
run: julia scripts/runTests.jl acala kagome
- name: Run Polkadot test with Acala runtime
if: success() || failure()
run: julia scripts/runTests.jl acala polkadot