-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Run bridges zombienet tests on CI #2439
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
c6f8e61
1e369ee
4c06584
58e9981
da2bd72
baf85c9
9c921c8
5e5c72b
5ccf7fe
dd7b631
9f617dc
c2327a2
97b7666
638924c
8653c05
0ebc852
81c9ec6
065a69e
4afa6a8
fcc4216
7172580
7393a97
54497f0
e0382ea
8e20872
b050f1a
3230786
d107297
3022c82
f19668c
83d2177
ab99318
c562cd9
f2cb940
8a5ace0
8a95a9e
8c4a7b2
d79a43b
1156753
cb127c9
46b13f7
1f0e267
14ac859
b0c8cf6
a984032
accd8fc
fd32ee7
8e3b76d
67d0f16
adad841
39ca333
6a93477
82f8e64
3a71ba6
c3ebf00
e02121c
960558f
92d3b7f
49d3090
88d4c00
e9b058d
1e2b3b6
ead14d2
f581afa
911de8f
34d894f
2d2a616
0a25a83
d61b5bc
228bc1b
cbe832d
7cb9189
c1743e8
1ce62ec
ab42c1d
523c0a4
96111d0
558a9ee
c12391c
db93f6b
99e0519
811afb3
43c7c04
6df5381
d57e183
3aafccb
0791aae
370b4ce
86906f2
c4ba86f
9b36e5c
327ad7c
78bbc70
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -66,6 +66,8 @@ publish-rustdoc: | |
| # note: images are used not only in zombienet but also in rococo, wococo and versi | ||
| .build-push-image: | ||
| image: $BUILDAH_IMAGE | ||
| extends: | ||
| - .zombienet-refs | ||
| variables: | ||
| DOCKERFILE: "" # docker/path-to.Dockerfile | ||
| IMAGE_NAME: "" # docker.io/paritypr/image_name | ||
|
|
@@ -77,6 +79,7 @@ publish-rustdoc: | |
| --build-arg VCS_REF="${CI_COMMIT_SHA}" | ||
| --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" | ||
| --build-arg IMAGE_NAME="${IMAGE_NAME}" | ||
| --build-arg ZOMBIENET_IMAGE="${ZOMBIENET_IMAGE}" | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I moved the image definition to extends:
- .zombienet-refsThere was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Seems a bit too specific to our use case. I would try to make this more generic. Maybe something like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I prefer to keep meaningful naming here - we could wrap everything in the |
||
| --tag "$IMAGE_NAME:${DOCKER_IMAGES_VERSION}" | ||
| --file ${DOCKERFILE} . | ||
| - echo "$PARITYPR_PASS" | | ||
|
|
@@ -163,3 +166,22 @@ build-push-image-substrate-pr: | |
| variables: | ||
| DOCKERFILE: "docker/dockerfiles/substrate_injected.Dockerfile" | ||
| IMAGE_NAME: "docker.io/paritypr/substrate" | ||
|
|
||
| # unlike other images, bridges+zombienet image is based on Zombienet image that pulls required binaries | ||
| # from other fresh images (polkadot and cumulus) | ||
| build-push-image-bridges-zombienet-tests: | ||
| stage: publish | ||
| extends: | ||
| - .kubernetes-env | ||
| - .common-refs | ||
| - .build-push-image | ||
| needs: | ||
| - job: build-linux-stable | ||
| artifacts: true | ||
| - job: build-linux-stable-cumulus | ||
| artifacts: true | ||
| - job: prepare-bridges-zombienet-artifacts | ||
| artifacts: true | ||
| variables: | ||
| DOCKERFILE: "docker/dockerfiles/bridges_zombienet_tests_injected.Dockerfile" | ||
| IMAGE_NAME: "docker.io/paritypr/bridges-zombienet-tests" | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| # This file is part of .gitlab-ci.yml | ||
| # Here are all jobs that are executed during "zombienet" stage for bridges | ||
|
|
||
| # common settings for all zombienet jobs | ||
| .zombienet-bridges-common: | ||
| before_script: | ||
| # Exit if the job is not merge queue | ||
| # - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi | ||
| - echo "Zombienet Tests Config" | ||
| - echo "${ZOMBIENET_IMAGE}" | ||
| - echo "${GH_DIR}" | ||
| - echo "${LOCAL_DIR}" | ||
| - ls "${LOCAL_DIR}" | ||
| - export DEBUG=zombie,zombie::network-node | ||
| - export ZOMBIENET_INTEGRATION_TEST_IMAGE="${BRIDGES_ZOMBIENET_TESTS_IMAGE}":${BRIDGES_ZOMBIENET_TESTS_IMAGE_TAG} | ||
| - echo "${ZOMBIENET_INTEGRATION_TEST_IMAGE}" | ||
| stage: zombienet | ||
| image: "${BRIDGES_ZOMBIENET_TESTS_IMAGE}:${BRIDGES_ZOMBIENET_TESTS_IMAGE_TAG}" | ||
| needs: | ||
| - job: build-push-image-bridges-zombienet-tests | ||
| artifacts: true | ||
| extends: | ||
| - .kubernetes-env | ||
| - .zombienet-refs | ||
| variables: | ||
| BRIDGES_ZOMBIENET_TESTS_IMAGE_TAG: ${DOCKER_IMAGES_VERSION} | ||
| BRIDGES_ZOMBIENET_TESTS_IMAGE: "docker.io/paritypr/bridges-zombienet-tests" | ||
| GH_DIR: "https://github.com/paritytech/polkadot-sdk/tree/${CI_COMMIT_SHA}/bridges/zombienet" | ||
| LOCAL_DIR: "/builds/parity/mirrors/polkadot-sdk/bridges/zombienet" | ||
| FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: 1 | ||
| RUN_IN_CONTAINER: "1" | ||
| artifacts: | ||
| name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}_zombienet_bridge_tests" | ||
| when: always | ||
| expire_in: 2 days | ||
| paths: | ||
| - ./zombienet-logs | ||
| after_script: | ||
| - mkdir -p ./zombienet-logs | ||
| # copy logs of tests runner (run-tests.sh) | ||
| - cp -r /tmp/bridges-zombienet-tests.*/tmp.*/tmp.* ./zombienet-logs/ | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nit: Would be nice if this logs could have a more suggestive name There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, that's a good idea. But now there are just three log files matching this criteria, so not a big deal imo. When I/we will be adding more tests (hope to do that soon) it'll make sense to give meaningful names to those log files. Let's do it later in a separate PR |
||
| # copy logs of all nodes | ||
| - cp /tmp/zombie*/logs/* ./zombienet-logs/ | ||
| # following lines are causing spurious test failures ("At least one of the nodes fails to start") | ||
| # retry: 2 | ||
| # tags: | ||
| # - zombienet-polkadot-integration-test | ||
|
|
||
| zombienet-bridges-0001-asset-transfer-works: | ||
| extends: | ||
| - .zombienet-bridges-common | ||
| script: | ||
| - /home/nonroot/bridges-polkadot-sdk/bridges/zombienet/run-tests.sh --docker | ||
| - echo "Done" | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,18 +1,49 @@ | ||
| #!/bin/bash | ||
| #set -eu | ||
| set -x | ||
| shopt -s nullglob | ||
|
|
||
| trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT | ||
| trap "trap - SIGINT SIGTERM EXIT && kill -- -$$" SIGINT SIGTERM EXIT | ||
|
|
||
| # whether to use paths for zombienet+bridges tests container or for local testing | ||
| ZOMBIENET_DOCKER_PATHS=0 | ||
| while [ $# -ne 0 ] | ||
| do | ||
| arg="$1" | ||
| case "$arg" in | ||
| --docker) | ||
| ZOMBIENET_DOCKER_PATHS=1 | ||
| ;; | ||
| esac | ||
| shift | ||
| done | ||
|
|
||
| # assuming that we'll be using native provide && all processes will be executing locally | ||
| # (we need absolute paths here, because they're used when scripts are called by zombienet from tmp folders) | ||
| export POLKADOT_SDK_FOLDER=`realpath $(dirname "$0")/../..` | ||
| export BRIDGE_TESTS_FOLDER=$POLKADOT_SDK_FOLDER/bridges/zombienet/tests | ||
| export POLKADOT_BINARY_PATH=$POLKADOT_SDK_FOLDER/target/release/polkadot | ||
| export POLKADOT_PARACHAIN_BINARY_PATH=$POLKADOT_SDK_FOLDER/target/release/polkadot-parachain | ||
| export POLKADOT_PARACHAIN_BINARY_PATH_FOR_ASSET_HUB_ROCOCO=$POLKADOT_PARACHAIN_BINARY_PATH | ||
| export POLKADOT_PARACHAIN_BINARY_PATH_FOR_ASSET_HUB_WESTEND=$POLKADOT_PARACHAIN_BINARY_PATH | ||
| export ZOMBIENET_BINARY_PATH=~/local_bridge_testing/bin/zombienet-linux | ||
|
|
||
| # set pathc to binaries | ||
| if [ "$ZOMBIENET_DOCKER_PATHS" -eq 1 ]; then | ||
| export POLKADOT_BINARY_PATH=/usr/local/bin/polkadot | ||
| export POLKADOT_PARACHAIN_BINARY_PATH=/usr/local/bin/polkadot-parachain | ||
| export POLKADOT_PARACHAIN_BINARY_PATH_FOR_ASSET_HUB_ROCOCO=/usr/local/bin/polkadot-parachain | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nit: These names seem a bit too verbose. I would try to reduce them a bit. For example something like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. They're already used by our scripts - I'm just setting values here :) Actually, I think we don't need this |
||
| export POLKADOT_PARACHAIN_BINARY_PATH_FOR_ASSET_HUB_WESTEND=/usr/local/bin/polkadot-parachain | ||
|
|
||
| export SUBSTRATE_RELAY_PATH=/usr/local/bin/substrate-relay | ||
| export ZOMBIENET_BINARY_PATH=/usr/local/bin/zombie | ||
| else | ||
| export POLKADOT_BINARY_PATH=$POLKADOT_SDK_FOLDER/target/release/polkadot | ||
| export POLKADOT_PARACHAIN_BINARY_PATH=$POLKADOT_SDK_FOLDER/target/release/polkadot-parachain | ||
| export POLKADOT_PARACHAIN_BINARY_PATH_FOR_ASSET_HUB_ROCOCO=$POLKADOT_PARACHAIN_BINARY_PATH | ||
| export POLKADOT_PARACHAIN_BINARY_PATH_FOR_ASSET_HUB_WESTEND=$POLKADOT_PARACHAIN_BINARY_PATH | ||
|
|
||
| export SUBSTRATE_RELAY_PATH=~/local_bridge_testing/bin/substrate-relay | ||
| export ZOMBIENET_BINARY_PATH=~/local_bridge_testing/bin/zombienet-linux | ||
| fi | ||
|
|
||
| # check if `wait` supports -p flag | ||
| if [ `printf "$BASH_VERSION\n5.1" | sort -V | head -n 1` = "5.1" ]; then IS_BASH_5_1=1; else IS_BASH_5_1=0; fi | ||
|
|
||
| # check if `wait` supports -p flag | ||
| if [ `printf "$BASH_VERSION\n5.1" | sort -V | head -n 1` = "5.1" ]; then IS_BASH_5_1=1; else IS_BASH_5_1=0; fi | ||
|
|
@@ -21,13 +52,17 @@ if [ `printf "$BASH_VERSION\n5.1" | sort -V | head -n 1` = "5.1" ]; then IS_BASH | |
| export LANE_ID="00000002" | ||
|
|
||
| # tests configuration | ||
| ALL_TESTS_FOLDER=`mktemp -d` | ||
| ALL_TESTS_FOLDER=`mktemp -d /tmp/bridges-zombienet-tests.XXXXX` | ||
|
|
||
| function start_coproc() { | ||
| local command=$1 | ||
| local name=$2 | ||
| local coproc_log=`mktemp -p $TEST_FOLDER` | ||
| coproc COPROC { | ||
| # otherwise zombienet uses some hardcoded paths | ||
| unset RUN_IN_CONTAINER | ||
| unset ZOMBIENET_IMAGE | ||
|
|
||
| $command >$coproc_log 2>&1 | ||
| } | ||
| TEST_COPROCS[$COPROC_PID, 0]=$name | ||
|
|
@@ -90,6 +125,7 @@ do | |
| echo "=== Shutting down. Log of failed process below ===" | ||
| echo "=====================================================================" | ||
| echo $coproc_stdout | ||
|
|
||
| exit 1 | ||
| fi | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| # this image is built on top of existing Zombienet image | ||
| ARG ZOMBIENET_IMAGE | ||
| # this image uses substrate-relay image built elsewhere | ||
| ARG SUBSTRATE_RELAY_IMAGE=docker.io/paritytech/substrate-relay:v2023-11-07-rococo-westend-initial-relayer | ||
|
|
||
| # metadata | ||
| ARG VCS_REF | ||
| ARG BUILD_DATE | ||
| ARG IMAGE_NAME | ||
|
|
||
| # we need `substrate-relay` binary, built elsewhere | ||
| FROM ${SUBSTRATE_RELAY_IMAGE} as relay-builder | ||
|
|
||
| # the base image is the zombienet image - we are planning to run zombienet tests using native | ||
| # provider here | ||
| FROM ${ZOMBIENET_IMAGE} | ||
|
|
||
| LABEL io.parity.image.authors="[email protected]" \ | ||
| io.parity.image.vendor="Parity Technologies" \ | ||
| io.parity.image.title="${IMAGE_NAME}" \ | ||
| io.parity.image.description="Bridges Zombienet tests." \ | ||
| io.parity.image.source="https://github.com/paritytech/polkadot-sdk/blob/${VCS_REF}/docker/dockerfiles/bridges_zombienet_tests_injected.Dockerfile" \ | ||
| io.parity.image.revision="${VCS_REF}" \ | ||
| io.parity.image.created="${BUILD_DATE}" \ | ||
| io.parity.image.documentation="https://github.com/paritytech/polkadot-sdk/bridges/zombienet" | ||
|
|
||
| # show backtraces | ||
| ENV RUST_BACKTRACE 1 | ||
| USER root | ||
|
|
||
| # for native provider to work (TODO: fix in zn docker?) | ||
| RUN apt-get update && apt-get install -y procps sudo | ||
| RUN yarn global add @polkadot/api-cli | ||
|
|
||
| # add polkadot binary to the docker image | ||
| COPY ./artifacts/polkadot /usr/local/bin/ | ||
| COPY ./artifacts/polkadot-execute-worker /usr/local/bin/ | ||
| COPY ./artifacts/polkadot-prepare-worker /usr/local/bin/ | ||
| # add polkadot-parachain binary to the docker image | ||
| COPY ./artifacts/polkadot-parachain /usr/local/bin | ||
| # copy substrate-relay to the docker image | ||
| COPY --from=relay-builder /home/user/substrate-relay /usr/local/bin/ | ||
| # we need bridges zombienet runner and tests | ||
| RUN mkdir -p /home/nonroot/bridges-polkadot-sdk | ||
| COPY ./artifacts/bridges-polkadot-sdk /home/nonroot/bridges-polkadot-sdk | ||
| # also prepare `generate_hex_encoded_call` for running | ||
| RUN set -eux; \ | ||
| cd /home/nonroot/bridges-polkadot-sdk/cumulus/scripts/generate_hex_encoded_call; \ | ||
| npm install | ||
|
|
||
| # check if executable works in this container | ||
| USER nonroot | ||
| RUN /usr/local/bin/polkadot --version | ||
| RUN /usr/local/bin/polkadot-parachain --version | ||
| RUN /usr/local/bin/substrate-relay --version | ||
|
|
||
| # https://polkadot.js.org/apps/?rpc=ws://127.0.0.1:{PORT}#/explorer | ||
| EXPOSE 9942 9910 8943 9945 9010 8945 | ||
|
|
||
| ENTRYPOINT ["/bin/bash", "-c", "/home/nonroot/bridges-polkadot-sdk/bridges/zombienet/run-tests.sh"] |
Uh oh!
There was an error while loading. Please reload this page.