1name: xcm-testnet234on:5 workflow_call:67 8 workflow_dispatch:91011env:12 REPO_URL: ${{ github.server_url }}/${{ github.repository }}131415jobs:16 prepare-execution-marix:17 name: Prepare execution matrix1819 runs-on: [self-hosted-ci]20 outputs:21 matrix: ${{ steps.create_matrix.outputs.matrix }}2223 steps:24 - name: Clean Workspace25 uses: AutoModality/action-clean@v1.1.02627 28 - uses: actions/checkout@v3.1.029 with:30 ref: ${{ github.head_ref }} 3132 - name: Read .env file33 uses: xom9ikk/dotenv@v23435 - name: Create Execution matrix36 uses: CertainLach/create-matrix-action@v437 id: create_matrix38 with:39 matrix: |40 network {opal}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.WESTMINT_BUILD_BRANCH }}}, astar_version {${{ env.ASTAR_BUILD_BRANCH }}}, polkadex_version {${{ env.POLKADEX_BUILD_BRANCH }}}, runtest {testXcmOpal}, runtime_features {opal-runtime}41 network {quartz}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONRIVER_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINE_BUILD_BRANCH }}}, astar_version {${{ env.SHIDEN_BUILD_BRANCH }}}, polkadex_version {${{ env.POLKADEX_BUILD_BRANCH }}}, runtest {testFullXcmQuartz}, runtime_features {quartz-runtime}42 network {unique}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINT_BUILD_BRANCH }}}, astar_version {${{ env.ASTAR_BUILD_BRANCH }}}, polkadex_version {${{ env.POLKADEX_BUILD_BRANCH }}}, runtest {testFullXcmUnique}, runtime_features {unique-runtime}4344 xcm:45 needs: prepare-execution-marix46 47 runs-on: [XL]4849 timeout-minutes: 6005051 name: ${{ matrix.network }}5253 continue-on-error: true 5455 strategy:56 matrix:57 include: ${{fromJson(needs.prepare-execution-marix.outputs.matrix)}}5859 steps:60 - name: Skip if pull request is in Draft61 if: github.event.pull_request.draft == true62 run: exit 16364 - name: Clean Workspace65 uses: AutoModality/action-clean@v1.1.06667 68 - uses: actions/checkout@v3.1.069 with:70 ref: ${{ github.head_ref }} 7172 73 - name: Prepare SHA74 uses: ./.github/actions/prepare7576 - name: Read .env file77 uses: xom9ikk/dotenv@v27879 - name: Log in to Docker Hub80 uses: docker/login-action@v2.1.081 with:82 username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}83 password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}8485 86 - name: Generate ENV related extend Dockerfile file for POLKADOT87 uses: cuchi/jinja2-action@v1.2.088 with:89 template: .docker/Dockerfile-polkadot.j290 output_file: .docker/Dockerfile-polkadot.${{ matrix.relay_branch }}.yml91 variables: |92 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}93 POLKADOT_BUILD_BRANCH=${{ matrix.relay_branch }}9495 - name: Check if the dockerhub repository contains the needed version POLKADOT96 run: |97 # aquire token98 TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)99 export TOKEN=$TOKEN100101 # Get TAGS from DOCKERHUB POLKADOT repository102 POLKADOT_TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/uniquenetwork/builder-polkadot/tags/?page_size=100 | jq -r '."results"[]["name"]')103 # Show TAGS104 echo "POLKADOT TAGS:"105 echo $POLKADOT_TAGS106 # Check correct version POLKADOT and build it if it doesn't exist in POLKADOT TAGS107 if [[ ${POLKADOT_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.relay_branch }}"($|[[:space:]]) ]]; then108 echo "Repository has needed POLKADOT version";109 docker pull uniquenetwork/builder-polkadot:${{ matrix.relay_branch }}110 else111 echo "Repository has not needed POLKADOT version, so build it";112 cd .docker/ && docker build --file ./Dockerfile-polkadot.${{ matrix.relay_branch }}.yml --tag uniquenetwork/builder-polkadot:${{ matrix.relay_branch }} .113 echo "Push needed POLKADOT version to the repository";114 docker push uniquenetwork/builder-polkadot:${{ matrix.relay_branch }}115 fi116 shell: bash117118 119 - name: Generate ENV related extend Dockerfile file for ACALA120 uses: cuchi/jinja2-action@v1.2.0121 with:122 template: .docker/Dockerfile-acala.j2123 output_file: .docker/Dockerfile-acala.${{ matrix.acala_version }}.yml124 variables: |125 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}126 ACALA_BUILD_BRANCH=${{ matrix.acala_version }}127128 - name: Check if the dockerhub repository contains the needed ACALA version129 run: |130 # aquire token131 TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)132 export TOKEN=$TOKEN133134 # Get TAGS from DOCKERHUB repository135 ACALA_TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/uniquenetwork/builder-acala/tags/?page_size=100 | jq -r '."results"[]["name"]')136 # Show TAGS137 echo "ACALA TAGS:"138 echo $ACALA_TAGS139 # Check correct version ACALA and build it if it doesn't exist in ACALA TAGS140 if [[ ${ACALA_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.acala_version }}"($|[[:space:]]) ]]; then141 echo "Repository has needed ACALA version";142 docker pull uniquenetwork/builder-acala:${{ matrix.acala_version }}143 else144 echo "Repository has not needed ACALA version, so build it";145 cd .docker/ && docker build --file ./Dockerfile-acala.${{ matrix.acala_version }}.yml --tag uniquenetwork/builder-acala:${{ matrix.acala_version }} .146 echo "Push needed ACALA version to the repository";147 docker push uniquenetwork/builder-acala:${{ matrix.acala_version }}148 fi149 shell: bash150151 152 - name: Generate ENV related extend Dockerfile file for MOONBEAM153 uses: cuchi/jinja2-action@v1.2.0154 with:155 template: .docker/Dockerfile-moonbeam.j2156 output_file: .docker/Dockerfile-moonbeam.${{ matrix.moonbeam_version }}.yml157 variables: |158 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}159 MOONBEAM_BUILD_BRANCH=${{ matrix.moonbeam_version }}160161 - name: Check if the dockerhub repository contains the needed MOONBEAM version162 run: |163 # aquire token164 TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)165 export TOKEN=$TOKEN166167 # Get TAGS from DOCKERHUB repository168 MOONBEAM_TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/uniquenetwork/builder-moonbeam/tags/?page_size=100 | jq -r '."results"[]["name"]')169 # Show TAGS170 echo "MOONBEAM TAGS:"171 echo $MOONBEAM_TAGS172 # Check correct version MOONBEAM and build it if it doesn't exist in MOONBEAM TAGS173 if [[ ${MOONBEAM_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.moonbeam_version }}"($|[[:space:]]) ]]; then174 echo "Repository has needed MOONBEAM version";175 docker pull uniquenetwork/builder-moonbeam:${{ matrix.moonbeam_version }}176 else177 echo "Repository has not needed MOONBEAM version, so build it";178 cd .docker/ && docker build --file ./Dockerfile-moonbeam.${{ matrix.moonbeam_version }}.yml --tag uniquenetwork/builder-moonbeam:${{ matrix.moonbeam_version }} .179 echo "Push needed MOONBEAM version to the repository";180 docker push uniquenetwork/builder-moonbeam:${{ matrix.moonbeam_version }}181 fi182 shell: bash183184 185 - name: Generate ENV related extend Dockerfile file for CUMULUS186 uses: cuchi/jinja2-action@v1.2.0187 with:188 template: .docker/Dockerfile-cumulus.j2189 output_file: .docker/Dockerfile-cumulus.${{ matrix.cumulus_version }}.yml190 variables: |191 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}192 CUMULUS_BUILD_BRANCH=${{ matrix.cumulus_version }}193194 - name: Check if the dockerhub repository contains the needed CUMULUS version195 run: |196 # aquire token197 TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)198 export TOKEN=$TOKEN199200 # Get TAGS from DOCKERHUB repository201 CUMULUS_TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/uniquenetwork/builder-cumulus/tags/?page_size=100 | jq -r '."results"[]["name"]')202 # Show TAGS203 echo "CUMULUS TAGS:"204 echo $CUMULUS_TAGS205 # Check correct version CUMULUS and build it if it doesn't exist in CUMULUS TAGS206 if [[ ${CUMULUS_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.cumulus_version }}"($|[[:space:]]) ]]; then207 echo "Repository has needed CUMULUS version";208 docker pull uniquenetwork/builder-cumulus:${{ matrix.cumulus_version }}209 else210 echo "Repository has not needed CUMULUS version, so build it";211 cd .docker/ && docker build --file ./Dockerfile-cumulus.${{ matrix.cumulus_version }}.yml --tag uniquenetwork/builder-cumulus:${{ matrix.cumulus_version }} .212 echo "Push needed CUMULUS version to the repository";213 docker push uniquenetwork/builder-cumulus:${{ matrix.cumulus_version }}214 fi215 shell: bash216217 218 - name: Generate ENV related extend Dockerfile file for ASTAR219 uses: cuchi/jinja2-action@v1.2.0220 with:221 template: .docker/Dockerfile-astar.j2222 output_file: .docker/Dockerfile-astar.${{ matrix.astar_version }}.yml223 variables: |224 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}225 ASTAR_BUILD_BRANCH=${{ matrix.astar_version }}226227 - name: Check if the dockerhub repository contains the needed ASTAR version228 run: |229 # aquire token230 TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)231 export TOKEN=$TOKEN232233 # Get TAGS from DOCKERHUB repository234 ASTAR_TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/uniquenetwork/builder-astar/tags/?page_size=100 | jq -r '."results"[]["name"]')235 # Show TAGS236 echo "ASTAR TAGS:"237 echo $ASTAR_TAGS238 # Check correct version ASTAR and build it if it doesn't exist in ASTAR TAGS239 if [[ ${ASTAR_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.astar_version }}"($|[[:space:]]) ]]; then240 echo "Repository has needed ASTAR version";241 docker pull uniquenetwork/builder-astar:${{ matrix.astar_version }}242 else243 echo "Repository has not needed ASTAR version, so build it";244 cd .docker/ && docker build --file ./Dockerfile-astar.${{ matrix.astar_version }}.yml --tag uniquenetwork/builder-astar:${{ matrix.astar_version }} .245 echo "Push needed ASTAR version to the repository";246 docker push uniquenetwork/builder-astar:${{ matrix.astar_version }}247 fi248 shell: bash249250 251 - name: Generate ENV related extend Dockerfile file for POLKADEX252 uses: cuchi/jinja2-action@v1.2.0253 with:254 template: .docker/Dockerfile-polkadex.j2255 output_file: .docker/Dockerfile-polkadex.${{ matrix.polkadex_version }}.yml256 variables: |257 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}258 POLKADEX_BUILD_BRANCH=${{ matrix.polkadex_version }}259260 - name: Check if the dockerhub repository contains the needed POLKADEX version261 run: |262 # aquire token263 TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)264 export TOKEN=$TOKEN265266 # Get TAGS from DOCKERHUB repository267 POLKADEX_TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/uniquenetwork/builder-polkadex/tags/?page_size=100 | jq -r '."results"[]["name"]')268 # Show TAGS269 echo "POLKADEX TAGS:"270 echo $POLKADEX_TAGS271 # Check correct version POLKADEX and build it if it doesn't exist in POLKADEX TAGS272 if [[ ${POLKADEX_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.polkadex_version }}"($|[[:space:]]) ]]; then273 echo "Repository has needed POLKADEX version";274 docker pull uniquenetwork/builder-polkadex:${{ matrix.polkadex_version }}275 else276 echo "Repository has not needed POLKADEX version, so build it";277 cd .docker/ && docker build --file ./Dockerfile-polkadex.${{ matrix.polkadex_version }}.yml --tag uniquenetwork/builder-polkadex:${{ matrix.polkadex_version }} .278 echo "Push needed POLKADEX version to the repository";279 docker push uniquenetwork/builder-polkadex:${{ matrix.polkadex_version }}280 fi281 shell: bash282283 - name: Build unique-chain284 run: |285 docker build --file .docker/Dockerfile-unique \286 --build-arg RUNTIME_FEATURES=${{ matrix.runtime_features }} \287 --build-arg RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} \288 --tag uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }} \289 .290291 - name: Push docker image version292 run: docker push uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}293294 - uses: actions/setup-node@v3.5.1295 with:296 node-version: 18297298 - name: Install baedeker299 uses: UniqueNetwork/baedeker-action/setup@built300301 - name: Setup library302 run: mkdir -p .baedeker/vendor/ && git clone https://github.com/UniqueNetwork/baedeker-library .baedeker/vendor/baedeker-library303304 - name: Start network305 uses: UniqueNetwork/baedeker-action@built306 id: bdk307 with:308 jpath: |309 .baedeker/vendor310 tla-str: |311 relay_spec=${{ env.RELAY_CHAIN_TYPE }}-local312 inputs: |313 .baedeker/xcm-${{ matrix.network }}.jsonnet314 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadot':{dockerImage:'uniquenetwork/builder-polkadot:${{ matrix.relay_branch }}'}})315 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}'}})316 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/acala':{dockerImage:'uniquenetwork/builder-acala:${{ matrix.acala_version }}'}})317 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/moonbeam':{dockerImage:'uniquenetwork/builder-moonbeam:${{ matrix.moonbeam_version }}'}})318 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/cumulus':{dockerImage:'uniquenetwork/builder-cumulus:${{ matrix.cumulus_version }}'}})319 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/astar':{dockerImage:'uniquenetwork/builder-astar:${{ matrix.astar_version }}'}})320 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadex':{dockerImage:'uniquenetwork/builder-polkadex:${{ matrix.polkadex_version }}'}})321322 - name: Upload network config323 uses: actions/upload-artifact@v3324 with:325 name: ${{ matrix.network }}-network-config326 path: ${{ steps.bdk.outputs.composeProject }}327 retention-days: 2328329 - name: Run XCM tests330 working-directory: tests331 run: |332 yarn install333 yarn add mochawesome334 # Wanted by both wait_for_first_block335 export RPC_URL="${RELAY_OPAL_HTTP_URL:-${RELAY_QUARTZ_HTTP_URL:-${RELAY_UNIQUE_HTTP_URL:-}}}"336 ./scripts/wait_for_first_block.sh337 echo "Ready to start tests"338 NOW=$(date +%s) && yarn ${{ matrix.runtest }} --reporter mochawesome --reporter-options reportFilename=test-${NOW}339340 - name: XCM Test Report341 uses: phoenix-actions/test-reporting@v10342 id: test-report343 if: success() || failure()344 with:345 name: XCM Tests ${{ matrix.network }}346 path: tests/mochawesome-report/test-*.json347 reporter: mochawesome-json348 fail-on-error: 'false'349350 - name: Clean Workspace351 if: always()352 uses: AutoModality/action-clean@v1.1.0353354 - name: Remove builder cache355 if: always()356 run: |357 docker system prune -a -f