Zombienet #513
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: 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 |