difftreelog
Merge pull request #983 from UniqueNetwork/ci/baedeker-node-only
in: master
Move node-only CI to baedeker
14 files changed
.baedeker/node-only.jsonnetdiffbeforeafterbothno changes
.baedeker/xcm-opal.jsonnetdiffbeforeafterboth2m = import 'baedeker-library/mixin/spec.libsonnet',2m = import 'baedeker-library/mixin/spec.libsonnet',3;3;445function(relay_spec)65local relay = {7local relay = {6 name: 'relay',8 name: 'relay',7 bin: 'bin/polkadot',9 bin: 'bin/polkadot',8 validatorIdAssignment: 'staking',10 validatorIdAssignment: 'staking',9 spec: {Genesis:{11 spec: {Genesis:{10 chain: 'westend-local',12 chain: relay_spec,11 modify:: m.genericRelay($, hrmp = [13 modify:: m.genericRelay($, hrmp = [12 [$.parachains.opal.paraId, $.parachains.westmint.paraId, 8, 512],14 [$.parachains.opal.paraId, $.parachains.westmint.paraId, 8, 512],13 [$.parachains.westmint.paraId, $.parachains.opal.paraId, 8, 512],15 [$.parachains.westmint.paraId, $.parachains.opal.paraId, 8, 512],.baedeker/xcm-quartz.jsonnetdiffbeforeafterboth2m = import 'baedeker-library/mixin/spec.libsonnet',2m = import 'baedeker-library/mixin/spec.libsonnet',3;3;445function(relay_spec)65local relay = {7local relay = {6 name: 'relay',8 name: 'relay',7 bin: 'bin/polkadot',9 bin: 'bin/polkadot',8 validatorIdAssignment: 'staking',10 validatorIdAssignment: 'staking',9 spec: {Genesis:{11 spec: {Genesis:{10 chain: 'westend-local',12 chain: relay_spec,11 modify:: m.genericRelay($, hrmp = std.join([], [13 modify:: m.genericRelay($, hrmp = std.join([], [12 [[$.parachains[a].paraId, $.parachains[b].paraId, 8, 512], [$.parachains[b].paraId, $.parachains[a].paraId, 8, 512]],14 [[$.parachains[a].paraId, $.parachains[b].paraId, 8, 512], [$.parachains[b].paraId, $.parachains[a].paraId, 8, 512]],13 for [a, b] in [15 for [a, b] in [113 [name]: {115 [name]: {114 bin: $.bin,116 bin: $.bin,115 wantedKeys: 'para',117 wantedKeys: 'para',116 legacyRpc: true,117 },118 },118 for name in ['alice', 'bob']119 for name in ['alice', 'bob']119 },120 },.baedeker/xcm-unique.jsonnetdiffbeforeafterboth2m = import 'baedeker-library/mixin/spec.libsonnet',2m = import 'baedeker-library/mixin/spec.libsonnet',3;3;445function(relay_spec)65local relay = {7local relay = {6 name: 'relay',8 name: 'relay',7 bin: 'bin/polkadot',9 bin: 'bin/polkadot',8 validatorIdAssignment: 'staking',10 validatorIdAssignment: 'staking',9 spec: {Genesis:{11 spec: {Genesis:{10 chain: 'westend-local',12 chain: relay_spec,11 modify:: m.genericRelay($, hrmp = std.join([], [13 modify:: m.genericRelay($, hrmp = std.join([], [12 [[$.parachains[a].paraId, $.parachains[b].paraId, 8, 512], [$.parachains[b].paraId, $.parachains[a].paraId, 8, 512]],14 [[$.parachains[a].paraId, $.parachains[b].paraId, 8, 512], [$.parachains[b].paraId, $.parachains[a].paraId, 8, 512]],13 for [a, b] in [15 for [a, b] in [.docker/Dockerfile-parachain-node-only.j2diffbeforeafterbothno changes
.docker/Dockerfile-unique-releasediffbeforeafterbothno changes
.docker/docker-compose.node-only.j2diffbeforeafterbothno changes
.github/actions/buildContainer/action.ymldiffbeforeafterbothno changes
.github/actions/prepare/action.ymldiffbeforeafterboth14 shell: bash 14 shell: bash 15 run: | 15 run: | 16 echo "LAST_COMMIT_SHA=${GITHUB_SHA}" >> ${GITHUB_ENV}16 echo "LAST_COMMIT_SHA=${GITHUB_SHA}" >> ${GITHUB_ENV}17 - name: Run find-and-replace to remove slashes from branch name18 uses: mad9000/actions-find-and-replace-string@419 id: ref_slug20 with:21 source: ${{ github.head_ref }}22 find: '/'23 replace: '-'17 - name: Set build SHA24 - name: Set BUILD_SHA, REF_SLUG18 shell: bash25 shell: bash19 run: |26 run: |20 echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV27 echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV28 echo "REF_SLUG=${{ steps.ref_slug.outputs.value }}" >> $GITHUB_ENV212930.github/workflows/node-only-update.ymldiffbeforeafterboth36 uses: CertainLach/create-matrix-action@v436 uses: CertainLach/create-matrix-action@v437 id: create_matrix37 id: create_matrix38 with:38 with:39 matrix: |39 matrix: |40 network {opal}, wasm_name {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}40 network {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, runtime_features {opal-runtime}41 network {sapphire}, wasm_name {quartz}, mainnet_branch {${{ env.SAPPHIRE_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEEAST_MAINNET_BRANCH }}}41 network {sapphire}, mainnet_branch {${{ env.SAPPHIRE_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEEAST_MAINNET_BRANCH }}}, runtime_features {sapphire-runtime}42 network {quartz}, wasm_name {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}42 network {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, runtime_features {quartz-runtime}43 network {unique}, wasm_name {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}43 network {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, runtime_features {unique-runtime}44454446 node-only-update-build:45 node-only-update-build:474648 needs: prepare-execution-matrix49 # The type of runner that the job will run on50 runs-on: [self-hosted-ci]5152 timeout-minutes: 2880 # 48 hours for execution jobs.5354 name: ${{ matrix.network }}-build5556 continue-on-error: true #Do not stop testing of matrix runs failed. As it decided during PR review - it required 50/50& Let's check it with false.5758 strategy:59 matrix:60 include: ${{fromJson(needs.prepare-execution-matrix.outputs.matrix)}}6162 steps:6364 - name: Skip if pull request is in Draft65 if: github.event.pull_request.draft == true66 run: exit 16768 - name: Clean Workspace69 uses: AutoModality/action-clean@v1.1.07071 # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it72 - uses: actions/checkout@v3.1.073 with:74 ref: ${{ github.head_ref }} #Checking out head commit7576 # Prepare SHA 77 - name: Prepare SHA78 uses: ./.github/actions/prepare7980 - name: Read .env file81 uses: xom9ikk/dotenv@v28283 # Build main image for NODE-ONLY-UPDATE84 - name: Generate ENV related extend Dockerfile file85 uses: cuchi/jinja2-action@v1.2.086 with:87 template: .docker/Dockerfile-parachain-node-only.j288 output_file: .docker/Dockerfile-parachain-node-only.${{ matrix.network }}.yml89 variables: |90 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}91 NETWORK=${{ matrix.network }}92 MAINNET_BRANCH=${{ matrix.mainnet_branch }}93 POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }}94 WASM_NAME=${{ matrix.wasm_name }}95 POLKADOT_BUILD_BRANCH=${{ matrix.relay_branch }}9697 - name: Show build configuration98 run: cat .docker/Dockerfile-parachain-node-only.${{ matrix.network }}.yml99100 - name: Generate launch-config.json101 uses: cuchi/jinja2-action@v1.2.0102 with:103 template: .docker/forkless-config/launch-config-forkless-nodata.j2104 output_file: .docker/forkless-config/launch-config-node-only.json105 variables: |106 WASM_NAME=${{ matrix.wasm_name }}107 RELAY_CHAIN_TYPE=${{ env.RELAY_CHAIN_TYPE }}108109 - name: Show launch-config-forkless configuration110 run: cat .docker/forkless-config/launch-config-node-only.json111112 - name: Run find-and-replace to remove slashes from branch name113 uses: mad9000/actions-find-and-replace-string@4114 id: branchname115 with:116 source: ${{ github.head_ref }}117 find: '/'118 replace: '-'119120 - name: Set build SHA121 shell: bash122 run: |123 echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV124125 - name: Build the stack126 run: cd .docker/ && docker build --no-cache --file ./Dockerfile-parachain-node-only.${{ matrix.network }}.yml --tag uniquenetwork/ci-node-only-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-$BUILD_SHA ../127128 - name: Log in to Docker Hub129 uses: docker/login-action@v2.1.0130 with:131 username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}132 password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}133134 - name: Push docker image version135 run: docker push uniquenetwork/ci-node-only-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-$BUILD_SHA136137 - name: Remove builder cache138 if: always() # run this step always139 run: |140 docker builder prune -f141 docker system prune -f 142143144 node-only-update-tests:145 needs: [prepare-execution-matrix, node-only-update-build]47 needs: prepare-execution-matrix146 # The type of runner that the job will run on48 # The type of runner that the job will run on147 runs-on: [self-hosted-ci, large]49 runs-on: [self-hosted-ci]14850149 timeout-minutes: 288051 timeout-minutes: 2880 # 48 hours for execution jobs.15052151 name: ${{ matrix.network }}-tests53 name: ${{ matrix.network }}-build15254153 continue-on-error: true #Do not stop testing of matrix runs failed. As it decided during PR review - it required 50/50& Let's check it with false.55 continue-on-error: true #Do not stop testing of matrix runs failed. As it decided during PR review - it required 50/50& Let's check it with false.15456169 with:72 with:170 ref: ${{ github.head_ref }} #Checking out head commit73 ref: ${{ github.head_ref }} #Checking out head commit1717475 # Prepare SHA 172 - name: Prepare76 - name: Prepare SHA173 uses: ./.github/actions/prepare77 uses: ./.github/actions/prepare17478175 - name: Set build SHA79 - name: Read .env file176 shell: bash80 uses: xom9ikk/dotenv@v2177 run: |178 echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV17981180 - name: Run find-and-replace to remove slashes from branch name82 - name: Log in to Docker Hub181 uses: mad9000/actions-find-and-replace-string@483 uses: docker/login-action@v2.1.0182 id: branchname183 with:84 with:184 source: ${{ github.head_ref }}85 username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}185 find: '/'86 password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}186 replace: '-'187188 - name: Read .env file189 uses: xom9ikk/dotenv@v219087191 - name: Generate ENV related extend file for docker-compose88 - name: Generate ENV related extend Dockerfile file for POLKADOT192 uses: cuchi/jinja2-action@v1.2.089 uses: cuchi/jinja2-action@v1.2.0193 with:90 with:194 template: .docker/docker-compose.node-only.j291 template: .docker/Dockerfile-polkadot.j2195 output_file: .docker/docker-compose.node-only.${{ matrix.network }}.yml92 output_file: .docker/Dockerfile-polkadot.${{ matrix.relay_branch }}.yml196 variables: |93 variables: |197 NETWORK=${{ matrix.network }}94 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}198 BUILD_TAG=${{ steps.branchname.outputs.value }}-$BUILD_SHA95 POLKADOT_BUILD_BRANCH=${{ matrix.relay_branch }}199200 - name: Show build configuration96 - name: Prepare polkadot97 uses: ./.github/actions/buildContainer98 id: polkadot99 with:100 container: uniquenetwork/builder-polkadot101 tag: ${{ matrix.relay_branch }}102 context: .docker201 run: cat .docker/docker-compose.node-only.${{ matrix.network }}.yml103 dockerfile: Dockerfile-polkadot.${{ matrix.relay_branch }}.yml104 dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}105 dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}202106203 - name: Log in to Docker Hub107 - name: Prepare mainnet204 uses: docker/login-action@v2.1.0108 uses: ./.github/actions/buildContainer109 id: mainnet205 with:110 with:111 container: uniquenetwork/ci-node-only-${{ matrix.network }}112 tag: ${{ matrix.mainnet_branch }}113 context: .docker114 dockerfile: Dockerfile-unique-release115 args: |116 --build-arg RUNTIME_FEATURES=${{ matrix.runtime_features }}117 --build-arg RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}118 --build-arg UNIQUE_VERSION=${{ matrix.mainnet_branch }}206 username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}119 dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}207 password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}120 dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}208121209 - name: Build the stack210 run: docker-compose -f ".docker/docker-compose.node-only.${{ matrix.network }}.yml" up -d --remove-orphans --force-recreate --timeout 300211212 # 🚀 POLKADOT LAUNCH COMPLETE 🚀213 - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade.122 - name: Prepare latest123 uses: ./.github/actions/buildContainer214 if: success()124 id: latest125 with:126 container: uniquenetwork/ci-node-only-${{ matrix.network }}127 tag: ${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}128 context: .129 dockerfile: .docker/Dockerfile-unique215 run: |130 args: |216 counter=160131 --build-arg RUNTIME_FEATURES=${{ matrix.runtime_features }}217 function check_container_status {132 --build-arg RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}218 docker inspect -f {{.State.Running}} node-only219 }220 function do_docker_logs {221 docker logs --details node-only 2>&1222 }223 function is_started {224 if [ "$(check_container_status)" == "true" ]; then225 echo "Container: node-only RUNNING";226 echo "Check Docker logs"227 DOCKER_LOGS=$(do_docker_logs)228 if [[ ${DOCKER_LOGS} = *"POLKADOT LAUNCH COMPLETE"* ]];then229 echo "🚀 POLKADOT LAUNCH COMPLETE 🚀"230 return 0231 else232 echo "Message not found in logs output, repeating..."233 return 1234 fi235 else236 echo "Container node-only NOT RUNNING"237 echo "Halting all future checks"238 exit 1239 fi240 echo "something goes wrong"241 exit 1242 }243 while ! is_started; do244 echo "Waiting for special message in log files "245 sleep 30s246 counter=$(( $counter - 1 ))247 echo "Counter: $counter"248 if [ "$counter" -gt "0" ]; then249 continue250 else251 break252 fi253 done254 echo "Halting script"255 exit 0256 shell: bash133 dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}134 dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}257135258 - name: Checkout at '${{ matrix.mainnet_branch }}' branch136 - name: Checkout at '${{ matrix.mainnet_branch }}' branch259 uses: actions/checkout@master137 uses: actions/checkout@master260 with:138 with:261 ref: ${{ matrix.mainnet_branch }} #Checking out head commit139 ref: ${{ github.head_ref }}140 # ref: ${{ matrix.mainnet_branch }} #Checking out head commit262 path: ${{ matrix.mainnet_branch }}141 path: ${{ matrix.mainnet_branch }}263142264 - uses: actions/setup-node@v3.5.1143 - uses: actions/setup-node@v3.5.1265 with:144 with:266 node-version: 16145 node-version: 16146147 - name: Install baedeker148 uses: UniqueNetwork/baedeker-action/setup@built149150 - name: Setup library151 run: mkdir -p .baedeker/vendor/ && git clone https://github.com/UniqueNetwork/baedeker-library .baedeker/vendor/baedeker-library152153 - name: Start network154 uses: UniqueNetwork/baedeker-action@built155 id: bdk156 with:157 jpath: |158 .baedeker/vendor159 tla-str: |160 relay_spec=westend-local161 inputs: |162 .baedeker/node-only.jsonnet163 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadot':{dockerImage:'${{ steps.polkadot.outputs.name }}'}})164 ephemeral:snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}}, extra_node_mixin = {legacyRpc: true})267165268 - name: Run Parallel tests before Node Parachain upgrade166 - name: Run Parallel tests before Node Parachain upgrade269 working-directory: ${{ matrix.mainnet_branch }}/tests167 working-directory: ${{ matrix.mainnet_branch }}/tests270 if: success() || failure()168 if: success() || failure()271 run: |169 run: |272 yarn install170 yarn273 yarn add mochawesome171 yarn add mochawesome274 ./scripts/wait_for_first_block.sh172 ./scripts/wait_for_first_block.sh275 echo "Ready to start tests"173 echo "Ready to start tests"276 NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}174 NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}277 env:175 env:278 RPC_URL: http://127.0.0.1:9944/176 RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}279177280 - name: Run Sequential tests before Node Parachain upgrade178 - name: Run Sequential tests before Node Parachain upgrade281 if: success() || failure()179 if: success() || failure()282 working-directory: ${{ matrix.mainnet_branch }}/tests180 working-directory: ${{ matrix.mainnet_branch }}/tests283 run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}181 run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}284 env:182 env:285 RPC_URL: http://127.0.0.1:9944/183 RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}286184287 - name: Send SIGUSR1 to polkadot-launch process185 - name: "Reconcile: only one old node"288 if: success() || failure()186 if: success() || failure()187 uses: UniqueNetwork/baedeker-action/reconcile@built188 with:189 baedeker: ${{ steps.bdk.baedeker }}190 # Chain should always be built with the mainnet spec, this we first set binary for all nodes expect one, then set mainnet binary for the last node, and then force chainspec to be still generated from mainnet289 run: |191 inputs: |290 #Get PID of polkadot-launch192 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.latest.outputs.name }}'}}, leave = 1, for_chain = false)291 ContainerID=$(docker ps -aqf "name=node-only")193 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}}, extra_node_mixin = {legacyRpc: true}, for_chain = false)292 PID=$(docker exec node-only pidof 'polkadot-launch')194 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}})293 sleep 30s294 echo -e "\n"295 echo -e "Restart polkadot-launch process: $PID\n"296 docker exec node-only kill -SIGUSR1 ${PID}297 echo "SIGUSR1 sent to Polkadot-launch PID: $PID"298 sleep 60s299 echo -e "Show logs of node-only container.\n"300 docker logs ${ContainerID}301302 - name: Get chain logs in case of docker image crashed after Polkadot Launch restart303 if: failure() # run this step only at failure304 run: |305 docker exec node-only tail -n 1000 /polkadot-launch/9944.log306 docker exec node-only tail -n 1000 /polkadot-launch/9945.log307 docker exec node-only tail -n 1000 /polkadot-launch/alice.log308195309 - name: copy chain log files from container to the host196 - name: Ensure network is alive310 if: success() || failure() # run this step even if previous step failed197 if: success() || failure() # run this step even if previous step failed311 run: |198 run: |312 mkdir -p /tmp/node-only-update199 ./tests/scripts/wait_for_first_block.sh313 docker cp node-only:/polkadot-launch/9944.log /tmp/node-only-update/200 env:314 docker cp node-only:/polkadot-launch/9945.log /tmp/node-only-update/201 RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}315 docker cp node-only:/polkadot-launch/alice.log /tmp/node-only-update/316202317 - name: Upload chain log files203 - name: "Reconcile: all nodes are updated"318 if: success() || failure()204 if: success() || failure()319 uses: actions/upload-artifact@v3205 uses: UniqueNetwork/baedeker-action/reconcile@built320 with:206 with:321 name: node-only-update-chain-logs207 baedeker: ${{ steps.bdk.baedeker }}208 # Chain should always be built with the mainnet spec, this we first set binary for all nodes, and then force chainspec to be still generated from mainnet322 path: /tmp/node-only-update/209 inputs: |323 if-no-files-found: warn210 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.latest.outputs.name }}'}}, for_chain = false)324211 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}})325 - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade.326 if: success()327 run: |328 counter=160329 function check_container_status {330 docker inspect -f {{.State.Running}} node-only331 }332 function do_docker_logs {333 docker logs --details node-only 2>&1334 }335 function is_started {336 if [ "$(check_container_status)" == "true" ]; then337 echo "Container: node-only RUNNING";338 echo "Check Docker logs"339 DOCKER_LOGS=$(do_docker_logs)340 if [[ ${DOCKER_LOGS} = *"All parachain collators restarted with the new binaries."* ]];then341 echo "🌗 All parachain collators restarted with the new binaries."342 return 0343 else344 echo "Message not found in logs output, repeating..."345 return 1346 fi347 else348 echo "Container node-only NOT RUNNING"349 echo "Halting all future checks"350 exit 1351 fi352 echo "something goes wrong"353 exit 1354 }355 while ! is_started; do356 echo "Waiting for special message in log files "357 sleep 30s358 counter=$(( $counter - 1 ))359 echo "Counter: $counter"360 if [ "$counter" -gt "0" ]; then361 continue362 else363 break364 fi365 done366 echo "Halting script"367 exit 0368 shell: bash369212370 - name: Run Parallel tests after Node Parachain upgrade213 - name: Run Parallel tests after Node Parachain upgrade371 working-directory: ${{ matrix.mainnet_branch }}/tests214 working-directory: ${{ matrix.mainnet_branch }}/tests377 echo "Ready to start tests"220 echo "Ready to start tests"378 NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}221 NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}379 env:222 env:380 RPC_URL: http://127.0.0.1:9944/223 RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}381224382 - name: Run Sequential tests after Node Parachain upgrade225 - name: Run Sequential tests after Node Parachain upgrade383 if: success() || failure()226 if: success() || failure()384 working-directory: ${{ matrix.mainnet_branch }}/tests227 working-directory: ${{ matrix.mainnet_branch }}/tests385 run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}228 run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}386 env:229 env:387 RPC_URL: http://127.0.0.1:9944/230 RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}388389 - name: Stop running containers390 if: always() # run this step always391 run: docker-compose -f ".docker/docker-compose.node-only.${{ matrix.network }}.yml" down392231393 - name: Remove builder cache232 - name: Remove builder cache394 if: always() # run this step always233 if: always() # run this step always395 run: |234 run: |396 docker builder prune -f -a235 docker system prune -f397 docker system prune -f398 docker image prune -f -a399400 - name: Remove repo at the end401 if: always() # run this step always402 run: |403 ls -ls ./404236.github/workflows/xcm.ymldiffbeforeafterboth285 shell: bash285 shell: bash286287288 - name: Run find-and-replace to remove slashes from branch name289 uses: mad9000/actions-find-and-replace-string@4290 id: branchname291 with:292 source: ${{ github.head_ref }}293 find: '/'294 replace: '-'295286296 - name: Build unique-chain287 - name: Build unique-chain297 run: |288 run: |298 docker build --file .docker/Dockerfile-unique \289 docker build --file .docker/Dockerfile-unique \299 --build-arg RUNTIME_FEATURES=${{ matrix.runtime_features }} \290 --build-arg RUNTIME_FEATURES=${{ matrix.runtime_features }} \300 --build-arg RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} \291 --build-arg RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} \301 --tag uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-${{ env.BUILD_SHA }} \292 --tag uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }} \302 .293 .303294304 - name: Push docker image version295 - name: Push docker image version305 run: docker push uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-${{ env.BUILD_SHA }}296 run: docker push uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}306297307 - uses: actions/setup-node@v3.5.1298 - uses: actions/setup-node@v3.5.1308 with:299 with:320 with:311 with:321 jpath: |312 jpath: |322 .baedeker/vendor313 .baedeker/vendor314 tla-str: |315 relay_spec=westend-local323 inputs: |316 inputs: |324 .baedeker/xcm-${{ matrix.network }}.jsonnet317 .baedeker/xcm-${{ matrix.network }}.jsonnet325 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadot':{dockerImage:'uniquenetwork/builder-polkadot:${{ matrix.relay_branch }}'}})318 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadot':{dockerImage:'uniquenetwork/builder-polkadot:${{ matrix.relay_branch }}'}})326 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-${{ env.BUILD_SHA }}'}})319 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}'}})327 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/acala':{dockerImage:'uniquenetwork/builder-acala:${{ matrix.acala_version }}'}})320 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/acala':{dockerImage:'uniquenetwork/builder-acala:${{ matrix.acala_version }}'}})328 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/moonbeam':{dockerImage:'uniquenetwork/builder-moonbeam:${{ matrix.moonbeam_version }}'}})321 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/moonbeam':{dockerImage:'uniquenetwork/builder-moonbeam:${{ matrix.moonbeam_version }}'}})329 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/cumulus':{dockerImage:'uniquenetwork/builder-cumulus:${{ matrix.cumulus_version }}'}})322 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/cumulus':{dockerImage:'uniquenetwork/builder-cumulus:${{ matrix.cumulus_version }}'}})330 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/astar':{dockerImage:'uniquenetwork/builder-astar:${{ matrix.astar_version }}'}})323 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/astar':{dockerImage:'uniquenetwork/builder-astar:${{ matrix.astar_version }}'}})331 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadex':{dockerImage:'uniquenetwork/builder-polkadex:${{ matrix.polkadex_version }}'}})324 snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadex':{dockerImage:'uniquenetwork/builder-polkadex:${{ matrix.polkadex_version }}'}})332325333 - name: Upload network config326 - name: Upload network config334 uses: actions/upload-artifact@v3327 uses: actions/upload-artifact@v3tests/scripts/wait_for_first_block.shdiffbeforeafterboth445. $DIR/functions.sh5. $DIR/functions.sh667last_block_id=08block_id=07function is_started {9function get_block {8 block_id_hex=$(do_rpc chain_getHeader | jq -r .result.number)10 block_id_hex=$(do_rpc chain_getHeader | jq -r .result.number)9 block_id=$((${block_id_hex}))11 block_id=$((${block_id_hex}))10 echo Id = $block_id12 echo Id = $block_id13}1415function had_new_block {16 last_block_id=$block_id17 get_block11 if (( $block_id > 1 )); then18 if (( last_block_id != 0 && block_id > last_block_id )); then12 return 019 return 013 fi20 fi14 return 121 return 115}22}2324function reset_check {25 last_block_id=026 block_id=027}162817while ! is_started; do29while ! had_new_block; do18 echo "Waiting for first block..."30 echo "Waiting for next block..."19 sleep 1231 sleep 1220done32done33reset_check3421echo "Chain is running, but lets wait for another block after a minute, to avoid startup flakiness."35echo "Chain is running, but lets wait for another block after a minute, to avoid startup flakiness."22sleep 12036sleep 603723while ! is_started; do38while ! had_new_block; do24 echo "Waiting for second block..."39 echo "Waiting for another block..."25 sleep 1240 sleep 1226done41done42tests/src/util/globalSetup.tsdiffbeforeafterboth112 });112 });113};113};114114115globalSetup().catch(() => process.exit(1));115globalSetup().catch(e => {116 console.error('Setup error');117 console.error(e);118 process.exit(1)119});116120tests/src/xcm/xcmQuartz.test.tsdiffbeforeafterboth481481482 await usingKaruraPlaygrounds(karuraUrl, async (helper) => {482 await usingKaruraPlaygrounds(karuraUrl, async (helper) => {483 const destination = {483 const destination = {484 V1: {484 V2: {485 parents: 1,485 parents: 1,486 interior: {486 interior: {487 X1: {487 X1: {591 itSub('Should connect to Karura and send QTZ back', async ({helper}) => {591 itSub('Should connect to Karura and send QTZ back', async ({helper}) => {592 await usingKaruraPlaygrounds(karuraUrl, async (helper) => {592 await usingKaruraPlaygrounds(karuraUrl, async (helper) => {593 const destination = {593 const destination = {594 V1: {594 V2: {595 parents: 1,595 parents: 1,596 interior: {596 interior: {597 X2: [597 X2: [653 const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice);653 const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice);654654655 const quartzMultilocation = {655 const quartzMultilocation = {656 V1: {656 V2: {657 parents: 1,657 parents: 1,658 interior: {658 interior: {659 X1: {Parachain: QUARTZ_CHAIN},659 X1: {Parachain: QUARTZ_CHAIN},716 const [targetAccount] = await helper.arrange.createAccounts([0n], alice);716 const [targetAccount] = await helper.arrange.createAccounts([0n], alice);717717718 const quartzMultilocation = {718 const quartzMultilocation = {719 V1: {719 V2: {720 parents: 1,720 parents: 1,721 interior: {721 interior: {722 X1: {722 X1: {797 let quartzParachainMultilocation: any;797 let quartzParachainMultilocation: any;798 let quartzAccountMultilocation: any;798 let quartzAccountMultilocation: any;799 let quartzCombinedMultilocation: any;799 let quartzCombinedMultilocation: any;800 let quartzCombinedMultilocationKarura: any; // TODO remove it when Karura goes V2801800802 let messageSent: any;801 let messageSent: any;803802842 },841 },843 };842 };844845 quartzCombinedMultilocationKarura = {846 V1: {847 parents: 1,848 interior: {849 X2: [quartzParachainJunction, quartzAccountJunction],850 },851 },852 };853843854 // Set the default version to wrap the first message to other chains.844 // Set the default version to wrap the first message to other chains.855 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);845 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);871 const id = {861 const id = {872 Token: 'KAR',862 Token: 'KAR',873 };863 };874 const destination = quartzCombinedMultilocationKarura;864 const destination = quartzCombinedMultilocation;875 await helper.xTokens.transfer(alice, id, testAmount, destination, 'Unlimited');865 await helper.xTokens.transfer(alice, id, testAmount, destination, 'Unlimited');876866877 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);867 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);