git.delta.rocks / unique-network / refs/commits / ec8104e0af89

difftreelog

Merge pull request #983 from UniqueNetwork/ci/baedeker-node-only

Yaroslav Bolyukin2023-09-05parents: #98753ec #1a650ec.patch.diff
in: master
Move node-only CI to baedeker

14 files changed

added.baedeker/node-only.jsonnetdiffbeforeafterboth

no changes

modified.baedeker/xcm-opal.jsonnetdiffbeforeafterboth
2m = import 'baedeker-library/mixin/spec.libsonnet',2m = import 'baedeker-library/mixin/spec.libsonnet',
3;3;
44
5function(relay_spec)
6
5local 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],
modified.baedeker/xcm-quartz.jsonnetdiffbeforeafterboth
2m = import 'baedeker-library/mixin/spec.libsonnet',2m = import 'baedeker-library/mixin/spec.libsonnet',
3;3;
44
5function(relay_spec)
6
5local 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 },
modified.baedeker/xcm-unique.jsonnetdiffbeforeafterboth
2m = import 'baedeker-library/mixin/spec.libsonnet',2m = import 'baedeker-library/mixin/spec.libsonnet',
3;3;
44
5function(relay_spec)
6
5local 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 [
deleted.docker/Dockerfile-parachain-node-only.j2diffbeforeafterboth

no changes

added.docker/Dockerfile-unique-releasediffbeforeafterboth

no changes

deleted.docker/docker-compose.node-only.j2diffbeforeafterboth

no changes

added.github/actions/buildContainer/action.ymldiffbeforeafterboth

no changes

modified.github/actions/prepare/action.ymldiffbeforeafterboth
14 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 name
18 uses: mad9000/actions-find-and-replace-string@4
19 id: ref_slug
20 with:
21 source: ${{ github.head_ref }}
22 find: '/'
23 replace: '-'
17 - name: Set build SHA24 - name: Set BUILD_SHA, REF_SLUG
18 shell: bash25 shell: bash
19 run: |26 run: |
20 echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV27 echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV
28 echo "REF_SLUG=${{ steps.ref_slug.outputs.value }}" >> $GITHUB_ENV
2129
30
modified.github/workflows/node-only-update.ymldiffbeforeafterboth
36 uses: CertainLach/create-matrix-action@v436 uses: CertainLach/create-matrix-action@v4
37 id: create_matrix37 id: create_matrix
38 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}
44
4544
46 node-only-update-build:45 node-only-update-build:
4746
48 needs: prepare-execution-matrix
49 # The type of runner that the job will run on
50 runs-on: [self-hosted-ci]
51
52 timeout-minutes: 2880 # 48 hours for execution jobs.
53
54 name: ${{ matrix.network }}-build
55
56 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.
57
58 strategy:
59 matrix:
60 include: ${{fromJson(needs.prepare-execution-matrix.outputs.matrix)}}
61
62 steps:
63
64 - name: Skip if pull request is in Draft
65 if: github.event.pull_request.draft == true
66 run: exit 1
67
68 - name: Clean Workspace
69 uses: AutoModality/action-clean@v1.1.0
70
71 # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
72 - uses: actions/checkout@v3.1.0
73 with:
74 ref: ${{ github.head_ref }} #Checking out head commit
75
76 # Prepare SHA
77 - name: Prepare SHA
78 uses: ./.github/actions/prepare
79
80 - name: Read .env file
81 uses: xom9ikk/dotenv@v2
82
83 # Build main image for NODE-ONLY-UPDATE
84 - name: Generate ENV related extend Dockerfile file
85 uses: cuchi/jinja2-action@v1.2.0
86 with:
87 template: .docker/Dockerfile-parachain-node-only.j2
88 output_file: .docker/Dockerfile-parachain-node-only.${{ matrix.network }}.yml
89 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 }}
96
97 - name: Show build configuration
98 run: cat .docker/Dockerfile-parachain-node-only.${{ matrix.network }}.yml
99
100 - name: Generate launch-config.json
101 uses: cuchi/jinja2-action@v1.2.0
102 with:
103 template: .docker/forkless-config/launch-config-forkless-nodata.j2
104 output_file: .docker/forkless-config/launch-config-node-only.json
105 variables: |
106 WASM_NAME=${{ matrix.wasm_name }}
107 RELAY_CHAIN_TYPE=${{ env.RELAY_CHAIN_TYPE }}
108
109 - name: Show launch-config-forkless configuration
110 run: cat .docker/forkless-config/launch-config-node-only.json
111
112 - name: Run find-and-replace to remove slashes from branch name
113 uses: mad9000/actions-find-and-replace-string@4
114 id: branchname
115 with:
116 source: ${{ github.head_ref }}
117 find: '/'
118 replace: '-'
119
120 - name: Set build SHA
121 shell: bash
122 run: |
123 echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV
124
125 - name: Build the stack
126 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 ../
127
128 - name: Log in to Docker Hub
129 uses: docker/login-action@v2.1.0
130 with:
131 username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}
132 password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}
133
134 - name: Push docker image version
135 run: docker push uniquenetwork/ci-node-only-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-$BUILD_SHA
136
137 - name: Remove builder cache
138 if: always() # run this step always
139 run: |
140 docker builder prune -f
141 docker system prune -f
142
143
144 node-only-update-tests:
145 needs: [prepare-execution-matrix, node-only-update-build]47 needs: prepare-execution-matrix
146 # The type of runner that the job will run on48 # The type of runner that the job will run on
147 runs-on: [self-hosted-ci, large]49 runs-on: [self-hosted-ci]
14850
149 timeout-minutes: 288051 timeout-minutes: 2880 # 48 hours for execution jobs.
15052
151 name: ${{ matrix.network }}-tests53 name: ${{ matrix.network }}-build
15254
153 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.
15456
169 with:72 with:
170 ref: ${{ github.head_ref }} #Checking out head commit73 ref: ${{ github.head_ref }} #Checking out head commit
17174
75 # Prepare SHA
172 - name: Prepare76 - name: Prepare SHA
173 uses: ./.github/actions/prepare77 uses: ./.github/actions/prepare
17478
175 - name: Set build SHA79 - name: Read .env file
176 shell: bash80 uses: xom9ikk/dotenv@v2
177 run: |
178 echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV
17981
180 - name: Run find-and-replace to remove slashes from branch name82 - name: Log in to Docker Hub
181 uses: mad9000/actions-find-and-replace-string@483 uses: docker/login-action@v2.1.0
182 id: branchname
183 with:84 with:
184 source: ${{ github.head_ref }}85 username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}
185 find: '/'86 password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}
186 replace: '-'
187
188 - name: Read .env file
189 uses: xom9ikk/dotenv@v2
19087
191 - name: Generate ENV related extend file for docker-compose88 - name: Generate ENV related extend Dockerfile file for POLKADOT
192 uses: cuchi/jinja2-action@v1.2.089 uses: cuchi/jinja2-action@v1.2.0
193 with:90 with:
194 template: .docker/docker-compose.node-only.j291 template: .docker/Dockerfile-polkadot.j2
195 output_file: .docker/docker-compose.node-only.${{ matrix.network }}.yml92 output_file: .docker/Dockerfile-polkadot.${{ matrix.relay_branch }}.yml
196 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 }}
199
200 - name: Show build configuration96 - name: Prepare polkadot
97 uses: ./.github/actions/buildContainer
98 id: polkadot
99 with:
100 container: uniquenetwork/builder-polkadot
101 tag: ${{ matrix.relay_branch }}
102 context: .docker
201 run: cat .docker/docker-compose.node-only.${{ matrix.network }}.yml103 dockerfile: Dockerfile-polkadot.${{ matrix.relay_branch }}.yml
104 dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}
105 dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}
202106
203 - name: Log in to Docker Hub107 - name: Prepare mainnet
204 uses: docker/login-action@v2.1.0108 uses: ./.github/actions/buildContainer
109 id: mainnet
205 with:110 with:
111 container: uniquenetwork/ci-node-only-${{ matrix.network }}
112 tag: ${{ matrix.mainnet_branch }}
113 context: .docker
114 dockerfile: Dockerfile-unique-release
115 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 }}
208121
209 - name: Build the stack
210 run: docker-compose -f ".docker/docker-compose.node-only.${{ matrix.network }}.yml" up -d --remove-orphans --force-recreate --timeout 300
211
212 # 🚀 POLKADOT LAUNCH COMPLETE 🚀
213 - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade.122 - name: Prepare latest
123 uses: ./.github/actions/buildContainer
214 if: success()124 id: latest
125 with:
126 container: uniquenetwork/ci-node-only-${{ matrix.network }}
127 tag: ${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}
128 context: .
129 dockerfile: .docker/Dockerfile-unique
215 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-only
219 }
220 function do_docker_logs {
221 docker logs --details node-only 2>&1
222 }
223 function is_started {
224 if [ "$(check_container_status)" == "true" ]; then
225 echo "Container: node-only RUNNING";
226 echo "Check Docker logs"
227 DOCKER_LOGS=$(do_docker_logs)
228 if [[ ${DOCKER_LOGS} = *"POLKADOT LAUNCH COMPLETE"* ]];then
229 echo "🚀 POLKADOT LAUNCH COMPLETE 🚀"
230 return 0
231 else
232 echo "Message not found in logs output, repeating..."
233 return 1
234 fi
235 else
236 echo "Container node-only NOT RUNNING"
237 echo "Halting all future checks"
238 exit 1
239 fi
240 echo "something goes wrong"
241 exit 1
242 }
243 while ! is_started; do
244 echo "Waiting for special message in log files "
245 sleep 30s
246 counter=$(( $counter - 1 ))
247 echo "Counter: $counter"
248 if [ "$counter" -gt "0" ]; then
249 continue
250 else
251 break
252 fi
253 done
254 echo "Halting script"
255 exit 0
256 shell: bash133 dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}
134 dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}
257135
258 - name: Checkout at '${{ matrix.mainnet_branch }}' branch136 - name: Checkout at '${{ matrix.mainnet_branch }}' branch
259 uses: actions/checkout@master137 uses: actions/checkout@master
260 with:138 with:
261 ref: ${{ matrix.mainnet_branch }} #Checking out head commit139 ref: ${{ github.head_ref }}
140 # ref: ${{ matrix.mainnet_branch }} #Checking out head commit
262 path: ${{ matrix.mainnet_branch }}141 path: ${{ matrix.mainnet_branch }}
263142
264 - uses: actions/setup-node@v3.5.1143 - uses: actions/setup-node@v3.5.1
265 with:144 with:
266 node-version: 16145 node-version: 16
146
147 - name: Install baedeker
148 uses: UniqueNetwork/baedeker-action/setup@built
149
150 - name: Setup library
151 run: mkdir -p .baedeker/vendor/ && git clone https://github.com/UniqueNetwork/baedeker-library .baedeker/vendor/baedeker-library
152
153 - name: Start network
154 uses: UniqueNetwork/baedeker-action@built
155 id: bdk
156 with:
157 jpath: |
158 .baedeker/vendor
159 tla-str: |
160 relay_spec=westend-local
161 inputs: |
162 .baedeker/node-only.jsonnet
163 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})
267165
268 - name: Run Parallel tests before Node Parachain upgrade166 - name: Run Parallel tests before Node Parachain upgrade
269 working-directory: ${{ matrix.mainnet_branch }}/tests167 working-directory: ${{ matrix.mainnet_branch }}/tests
270 if: success() || failure()168 if: success() || failure()
271 run: |169 run: |
272 yarn install170 yarn
273 yarn add mochawesome171 yarn add mochawesome
274 ./scripts/wait_for_first_block.sh172 ./scripts/wait_for_first_block.sh
275 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 }}
279177
280 - name: Run Sequential tests before Node Parachain upgrade178 - name: Run Sequential tests before Node Parachain upgrade
281 if: success() || failure()179 if: success() || failure()
282 working-directory: ${{ matrix.mainnet_branch }}/tests180 working-directory: ${{ matrix.mainnet_branch }}/tests
283 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 }}
286184
287 - 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@built
188 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 mainnet
289 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 30s
294 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 60s
299 echo -e "Show logs of node-only container.\n"
300 docker logs ${ContainerID}
301
302 - name: Get chain logs in case of docker image crashed after Polkadot Launch restart
303 if: failure() # run this step only at failure
304 run: |
305 docker exec node-only tail -n 1000 /polkadot-launch/9944.log
306 docker exec node-only tail -n 1000 /polkadot-launch/9945.log
307 docker exec node-only tail -n 1000 /polkadot-launch/alice.log
308195
309 - name: copy chain log files from container to the host196 - name: Ensure network is alive
310 if: success() || failure() # run this step even if previous step failed197 if: success() || failure() # run this step even if previous step failed
311 run: |198 run: |
312 mkdir -p /tmp/node-only-update199 ./tests/scripts/wait_for_first_block.sh
313 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/
316202
317 - 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@built
320 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 mainnet
322 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=160
329 function check_container_status {
330 docker inspect -f {{.State.Running}} node-only
331 }
332 function do_docker_logs {
333 docker logs --details node-only 2>&1
334 }
335 function is_started {
336 if [ "$(check_container_status)" == "true" ]; then
337 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."* ]];then
341 echo "🌗 All parachain collators restarted with the new binaries."
342 return 0
343 else
344 echo "Message not found in logs output, repeating..."
345 return 1
346 fi
347 else
348 echo "Container node-only NOT RUNNING"
349 echo "Halting all future checks"
350 exit 1
351 fi
352 echo "something goes wrong"
353 exit 1
354 }
355 while ! is_started; do
356 echo "Waiting for special message in log files "
357 sleep 30s
358 counter=$(( $counter - 1 ))
359 echo "Counter: $counter"
360 if [ "$counter" -gt "0" ]; then
361 continue
362 else
363 break
364 fi
365 done
366 echo "Halting script"
367 exit 0
368 shell: bash
369212
370 - name: Run Parallel tests after Node Parachain upgrade213 - name: Run Parallel tests after Node Parachain upgrade
371 working-directory: ${{ matrix.mainnet_branch }}/tests214 working-directory: ${{ matrix.mainnet_branch }}/tests
377 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 }}
381224
382 - name: Run Sequential tests after Node Parachain upgrade225 - name: Run Sequential tests after Node Parachain upgrade
383 if: success() || failure()226 if: success() || failure()
384 working-directory: ${{ matrix.mainnet_branch }}/tests227 working-directory: ${{ matrix.mainnet_branch }}/tests
385 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 }}
388
389 - name: Stop running containers
390 if: always() # run this step always
391 run: docker-compose -f ".docker/docker-compose.node-only.${{ matrix.network }}.yml" down
392231
393 - name: Remove builder cache232 - name: Remove builder cache
394 if: always() # run this step always233 if: always() # run this step always
395 run: |234 run: |
396 docker builder prune -f -a235 docker system prune -f
397 docker system prune -f
398 docker image prune -f -a
399
400 - name: Remove repo at the end
401 if: always() # run this step always
402 run: |
403 ls -ls ./
404236
modified.github/workflows/xcm.ymldiffbeforeafterboth
285 shell: bash285 shell: bash
286
287
288 - name: Run find-and-replace to remove slashes from branch name
289 uses: mad9000/actions-find-and-replace-string@4
290 id: branchname
291 with:
292 source: ${{ github.head_ref }}
293 find: '/'
294 replace: '-'
295286
296 - name: Build unique-chain287 - name: Build unique-chain
297 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 .
303294
304 - name: Push docker image version295 - name: Push docker image version
305 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 }}
306297
307 - uses: actions/setup-node@v3.5.1298 - uses: actions/setup-node@v3.5.1
308 with:299 with:
320 with:311 with:
321 jpath: |312 jpath: |
322 .baedeker/vendor313 .baedeker/vendor
314 tla-str: |
315 relay_spec=westend-local
323 inputs: |316 inputs: |
324 .baedeker/xcm-${{ matrix.network }}.jsonnet317 .baedeker/xcm-${{ matrix.network }}.jsonnet
325 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 }}'}})
332325
333 - name: Upload network config326 - name: Upload network config
334 uses: actions/upload-artifact@v3327 uses: actions/upload-artifact@v3
modifiedtests/scripts/wait_for_first_block.shdiffbeforeafterboth
44
5. $DIR/functions.sh5. $DIR/functions.sh
66
7last_block_id=0
8block_id=0
7function 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_id
13}
14
15function had_new_block {
16 last_block_id=$block_id
17 get_block
11 if (( $block_id > 1 )); then18 if (( last_block_id != 0 && block_id > last_block_id )); then
12 return 019 return 0
13 fi20 fi
14 return 121 return 1
15}22}
23
24function reset_check {
25 last_block_id=0
26 block_id=0
27}
1628
17while ! is_started; do29while ! had_new_block; do
18 echo "Waiting for first block..."30 echo "Waiting for next block..."
19 sleep 1231 sleep 12
20done32done
33reset_check
34
21echo "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 60
37
23while ! is_started; do38while ! had_new_block; do
24 echo "Waiting for second block..."39 echo "Waiting for another block..."
25 sleep 1240 sleep 12
26done41done
42
modifiedtests/src/util/globalSetup.tsdiffbeforeafterboth
112 });112 });
113};113};
114114
115globalSetup().catch(() => process.exit(1));115globalSetup().catch(e => {
116 console.error('Setup error');
117 console.error(e);
118 process.exit(1)
119});
116120
modifiedtests/src/xcm/xcmQuartz.test.tsdiffbeforeafterboth
481481
482 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);
654654
655 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);
717717
718 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 V2
801800
802 let messageSent: any;801 let messageSent: any;
803802
842 },841 },
843 };842 };
844
845 quartzCombinedMultilocationKarura = {
846 V1: {
847 parents: 1,
848 interior: {
849 X2: [quartzParachainJunction, quartzAccountJunction],
850 },
851 },
852 };
853843
854 // 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');
876866
877 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);867 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);