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
--- /dev/null
+++ b/.baedeker/node-only.jsonnet
@@ -0,0 +1,43 @@
+local
+m = import 'baedeker-library/mixin/spec.libsonnet',
+;
+
+local relay = {
+	name: 'relay',
+	bin: 'bin/polkadot',
+	validatorIdAssignment: 'staking',
+	spec: {Genesis:{
+		chain: 'rococo-local',
+		modify:: m.genericRelay($),
+	}},
+	nodes: {
+		[name]: {
+			bin: $.bin,
+			wantedKeys: 'relay',
+		},
+		for name in ['alice', 'bob', 'charlie', 'dave', 'eve']
+	},
+};
+
+local unique = {
+	name: 'unique',
+	bin: 'bin/unique',
+	paraId: 1001,
+	spec: {Genesis:{
+		modify:: m.genericPara($),
+	}},
+	nodes: {
+		[name]: {
+			bin: $.bin,
+			wantedKeys: 'para',
+		},
+		for name in ['alice', 'bob']
+	},
+};
+
+relay + {
+	parachains: {
+		[para.name]: para,
+		for para in [unique]
+	},
+}
modified.baedeker/xcm-opal.jsonnetdiffbeforeafterboth
--- a/.baedeker/xcm-opal.jsonnet
+++ b/.baedeker/xcm-opal.jsonnet
@@ -2,12 +2,14 @@
 m = import 'baedeker-library/mixin/spec.libsonnet',
 ;
 
+function(relay_spec)
+
 local relay = {
 	name: 'relay',
 	bin: 'bin/polkadot',
 	validatorIdAssignment: 'staking',
 	spec: {Genesis:{
-		chain: 'westend-local',
+		chain: relay_spec,
 		modify:: m.genericRelay($, hrmp = [
 			[$.parachains.opal.paraId, $.parachains.westmint.paraId, 8, 512],
 			[$.parachains.westmint.paraId, $.parachains.opal.paraId, 8, 512],
modified.baedeker/xcm-quartz.jsonnetdiffbeforeafterboth
--- a/.baedeker/xcm-quartz.jsonnet
+++ b/.baedeker/xcm-quartz.jsonnet
@@ -2,12 +2,14 @@
 m = import 'baedeker-library/mixin/spec.libsonnet',
 ;
 
+function(relay_spec)
+
 local relay = {
 	name: 'relay',
 	bin: 'bin/polkadot',
 	validatorIdAssignment: 'staking',
 	spec: {Genesis:{
-		chain: 'westend-local',
+		chain: relay_spec,
 		modify:: m.genericRelay($, hrmp = std.join([], [
 			[[$.parachains[a].paraId, $.parachains[b].paraId, 8, 512], [$.parachains[b].paraId, $.parachains[a].paraId, 8, 512]],
 			for [a, b] in [
@@ -113,7 +115,6 @@
 		[name]: {
 			bin: $.bin,
 			wantedKeys: 'para',
-			legacyRpc: true,
 		},
 		for name in ['alice', 'bob']
 	},
modified.baedeker/xcm-unique.jsonnetdiffbeforeafterboth
--- a/.baedeker/xcm-unique.jsonnet
+++ b/.baedeker/xcm-unique.jsonnet
@@ -2,12 +2,14 @@
 m = import 'baedeker-library/mixin/spec.libsonnet',
 ;
 
+function(relay_spec)
+
 local relay = {
 	name: 'relay',
 	bin: 'bin/polkadot',
 	validatorIdAssignment: 'staking',
 	spec: {Genesis:{
-		chain: 'westend-local',
+		chain: relay_spec,
 		modify:: m.genericRelay($, hrmp = std.join([], [
 			[[$.parachains[a].paraId, $.parachains[b].paraId, 8, 512], [$.parachains[b].paraId, $.parachains[a].paraId, 8, 512]],
 			for [a, b] in [
deleted.docker/Dockerfile-parachain-node-only.j2diffbeforeafterboth
--- a/.docker/Dockerfile-parachain-node-only.j2
+++ /dev/null
@@ -1,67 +0,0 @@
-# ===== Rust builder =====
-FROM uniquenetwork/services:latest as rust-builder
-ENV CARGO_HOME="/cargo-home"
-ENV PATH="/cargo-home/bin:$PATH"
-ENV TZ=UTC
-
-RUN rustup toolchain uninstall $(rustup toolchain list) && \
-    rustup toolchain install {{ RUST_TOOLCHAIN }} && \
-    rustup default {{ RUST_TOOLCHAIN }} && \
-    rustup target list --installed && \
-    rustup show
-RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }}
-
-RUN mkdir /unique_parachain
-WORKDIR /unique_parachain
-
-
-# ===== BUILD current version ======
-FROM rust-builder as builder-unique-current
-
-ARG PROFILE=release
-
-WORKDIR /unique_parachain
-
-RUN git clone -b {{ MAINNET_BRANCH }} https://github.com/UniqueNetwork/unique-chain.git . && \
-    cargo build --features={{ NETWORK }}-runtime --$PROFILE
-
-# ===== BUILD target version ======
-FROM rust-builder as builder-unique-target
-
-ARG PROFILE=release
-
-COPY . /unique_parachain
-WORKDIR /unique_parachain
-
-RUN cargo build --features={{ NETWORK }}-runtime --$PROFILE
-
-# ===== RUN ======
-
-FROM ubuntu:22.04
-
-RUN apt-get -y update && \
-    apt-get -y install curl git && \
-    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \
-    export NVM_DIR="$HOME/.nvm" && \
-    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
-    nvm install v16.16.0 && \
-    nvm use v16.16.0
-
-RUN git clone https://github.com/uniquenetwork/polkadot-launch -b {{ POLKADOT_LAUNCH_BRANCH }}
-
-COPY --from=builder-unique-current /unique_parachain/target/release/unique-collator /unique-chain/current/release/
-
-COPY --from=builder-unique-target /unique_parachain/target/release/unique-collator /unique-chain/target/release/
-COPY --from=builder-unique-target /unique_parachain/target/release/wbuild/{{ WASM_NAME }}-runtime/{{ WASM_NAME }}_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/{{ WASM_NAME }}-runtime/{{ WASM_NAME }}_runtime.compact.compressed.wasm
-COPY --from=builder-unique-target /unique_parachain/.docker/forkless-config/launch-config-node-only.json /polkadot-launch/launch-config.json
-
-COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/
-COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm /polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm
-COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/wbuild/rococo-runtime/rococo_runtime.compact.compressed.wasm /polkadot/target/release/wbuild/rococo-runtime/rococo_runtime.compact.compressed.wasm
-
-CMD export NVM_DIR="$HOME/.nvm" && \
-    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
-    cd /polkadot-launch && \
-    npm install --global yarn && \
-    yarn install && \
-    yarn start launch-config.json --test-upgrade-parachains -w -n
added.docker/Dockerfile-unique-releasediffbeforeafterboth
--- /dev/null
+++ b/.docker/Dockerfile-unique-release
@@ -0,0 +1,49 @@
+# ===== Rust builder =====
+FROM ubuntu:22.04 as rust-builder
+LABEL maintainer="Unique.Network"
+
+ENV CARGO_HOME="/cargo-home"
+ENV PATH="/cargo-home/bin:$PATH"
+ENV TZ=UTC
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
+
+RUN apt-get update && \
+    apt-get install -y curl cmake pkg-config libssl-dev git clang llvm libudev-dev protobuf-compiler && \
+    apt-get clean && \
+    rm -r /var/lib/apt/lists/*
+
+RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none
+
+ARG RUST_TOOLCHAIN
+RUN echo "Using Rust '$RUST_TOOLCHAIN'" && \
+    rustup toolchain install $RUST_TOOLCHAIN && \
+    rustup target add wasm32-unknown-unknown --toolchain ${RUST_TOOLCHAIN} && \
+    rustup default $RUST_TOOLCHAIN && \
+    rustup target list --installed && \
+    rustup show
+
+RUN mkdir /unique_parachain
+WORKDIR /unique_parachain
+
+# ===== BUILD POLKADOT =====
+FROM rust-builder as builder-polkadot-bin
+
+WORKDIR /unique_parachain
+
+ARG UNIQUE_VERSION
+RUN git clone -b "$UNIQUE_VERSION" --depth 1 https://github.com/uniquenetwork/unique-chain.git
+
+ARG RUNTIME_FEATURES
+RUN --mount=type=cache,target=/cargo-home/registry \
+    --mount=type=cache,target=/cargo-home/git \
+    --mount=type=cache,target=/unique_parachain/polkadot/target \
+    cd unique-chain && \
+    CARGO_INCREMENTAL=0 cargo build --release --features="$RUNTIME_FEATURES" --locked && \
+    mv ./target/release/unique-collator /unique_parachain/unique-chain/
+
+# ===== BIN ======
+
+FROM ubuntu:22.04 as builder-polkadot
+
+COPY --from=builder-polkadot-bin /unique_parachain/unique-chain/unique-collator /bin/unique-collator
+ENTRYPOINT ["/bin/unique-collator"]
deleted.docker/docker-compose.node-only.j2diffbeforeafterboth
--- a/.docker/docker-compose.node-only.j2
+++ /dev/null
@@ -1,16 +0,0 @@
-version: "3.5"
-
-services:
-  node-only:
-    image: uniquenetwork/ci-node-only-local:{{ NETWORK }}-{{ BUILD_TAG }}
-    container_name: node-only
-    expose:
-      - 9944
-      - 9945
-      - 9933
-      - 9844
-    ports:
-      - 127.0.0.1:9944:9944
-      - 127.0.0.1:9945:9945
-      - 127.0.0.1:9933:9933
-      - 127.0.0.1:9844:9844
added.github/actions/buildContainer/action.ymldiffbeforeafterboth
--- /dev/null
+++ b/.github/actions/buildContainer/action.yml
@@ -0,0 +1,59 @@
+name: Build or pull container
+description: ''
+inputs:
+  container:
+    description: Which name to fetch/push
+    required: true
+  tag:
+    description: Which tag to fetch/push
+    required: true
+  context:
+    description: Container context
+    required: true
+    default: "."
+  dockerfile:
+    description: Path to dockerfile (relative to context)
+    required: true
+  args:
+    description: Docker build extra args
+    default: ''
+  dockerhub_username:
+    description: Secret
+  dockerhub_token:
+    description: Secret
+outputs:
+  name:
+    description: Full container name
+    value: ${{ steps.ensure.outputs.name }}
+runs:
+  using: "composite"
+  steps:
+    - name: Ensure have ${{ inputs.container }}:${{ inputs.tag }}
+      id: ensure
+      run: |
+        echo "Wanted container: ${{ inputs.container }}:${{ inputs.tag }}"
+
+        TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ inputs.dockerhub_username }}'", "password": "'${{ inputs.dockerhub_token }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)
+
+        # Get TAGS from DOCKERHUB
+        TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/${{ inputs.container }}/tags/?page_size=100 | jq -r '."results"[]["name"]' || echo "")
+
+        echo "Available tags:"
+        echo "$TAGS"
+
+        # Check correct version POLKADOT and build it if it doesn't exist in POLKADOT TAGS
+        if [[ ${TAGS[*]} =~ (^|[[:space:]])"${{ inputs.tag }}"($|[[:space:]]) ]]; then
+          echo "Repository has needed version, pulling";
+          docker pull ${{ inputs.container }}:${{ inputs.tag }}
+        else
+          echo "Repository had no needed version, so build it";
+          cd "${{ inputs.context }}" && docker build --file "${{ inputs.dockerfile }}" \
+            $BUILD_ARGS --tag ${{ inputs.container }}:${{ inputs.tag }} \
+            .
+          echo "Push built version to the repository";
+          docker push ${{ inputs.container }}:${{ inputs.tag }} || true
+        fi
+        echo "name=${{ inputs.container }}:${{ inputs.tag }}" >> $GITHUB_OUTPUT
+      env:
+        BUILD_ARGS: ${{ inputs.args }}
+      shell: bash
modified.github/actions/prepare/action.ymldiffbeforeafterboth
--- a/.github/actions/prepare/action.yml
+++ b/.github/actions/prepare/action.yml
@@ -14,7 +14,16 @@
       shell: bash  
       run: |  
         echo "LAST_COMMIT_SHA=${GITHUB_SHA}" >> ${GITHUB_ENV}
-    - name: Set build SHA
+    - name: Run find-and-replace to remove slashes from branch name
+      uses: mad9000/actions-find-and-replace-string@4
+      id: ref_slug
+      with:
+        source: ${{ github.head_ref }}
+        find: '/'
+        replace: '-'
+    - name: Set BUILD_SHA, REF_SLUG
       shell: bash
       run: |
         echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV
+        echo "REF_SLUG=${{ steps.ref_slug.outputs.value }}" >> $GITHUB_ENV
+
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
--- a/.github/workflows/xcm.yml
+++ b/.github/workflows/xcm.yml
@@ -284,25 +284,16 @@
             fi
         shell: bash
 
-
-      - name: Run find-and-replace to remove slashes from branch name
-        uses: mad9000/actions-find-and-replace-string@4
-        id: branchname
-        with:
-          source: ${{ github.head_ref }}
-          find: '/'
-          replace: '-'
-
       - name: Build unique-chain
         run: |
           docker build --file .docker/Dockerfile-unique \
             --build-arg RUNTIME_FEATURES=${{ matrix.runtime_features }} \
             --build-arg RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} \
-            --tag uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-${{ env.BUILD_SHA }} \
+            --tag uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }} \
             .
 
       - name: Push docker image version
-        run: docker push uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-${{ env.BUILD_SHA }}
+        run: docker push uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}
 
       - uses: actions/setup-node@v3.5.1
         with:
@@ -320,10 +311,12 @@
         with:
           jpath: |
             .baedeker/vendor
+          tla-str: |
+            relay_spec=westend-local
           inputs: |
             .baedeker/xcm-${{ matrix.network }}.jsonnet
             snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadot':{dockerImage:'uniquenetwork/builder-polkadot:${{ matrix.relay_branch }}'}})
-            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-${{ env.BUILD_SHA }}'}})
+            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'uniquenetwork/ci-xcm-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}'}})
             snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/acala':{dockerImage:'uniquenetwork/builder-acala:${{ matrix.acala_version }}'}})
             snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/moonbeam':{dockerImage:'uniquenetwork/builder-moonbeam:${{ matrix.moonbeam_version }}'}})
             snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/cumulus':{dockerImage:'uniquenetwork/builder-cumulus:${{ matrix.cumulus_version }}'}})
modifiedtests/scripts/wait_for_first_block.shdiffbeforeafterboth
--- a/tests/scripts/wait_for_first_block.sh
+++ b/tests/scripts/wait_for_first_block.sh
@@ -4,24 +4,40 @@
 
 . $DIR/functions.sh
 
-function is_started {
+last_block_id=0
+block_id=0
+function get_block {
 	block_id_hex=$(do_rpc chain_getHeader | jq -r .result.number)
 	block_id=$((${block_id_hex}))
 	echo Id = $block_id
-	if (( $block_id > 1 )); then
+}
+
+function had_new_block {
+	last_block_id=$block_id
+	get_block
+	if (( last_block_id != 0 && block_id > last_block_id )); then
 		return 0
 	fi
 	return 1
 }
 
-while ! is_started; do
-	echo "Waiting for first block..."
+function reset_check {
+	last_block_id=0
+	block_id=0
+}
+
+while ! had_new_block; do
+	echo "Waiting for next block..."
 	sleep 12
 done
+reset_check
+
 echo "Chain is running, but lets wait for another block after a minute, to avoid startup flakiness."
-sleep 120
-while ! is_started; do
-	echo "Waiting for second block..."
+sleep 60
+
+while ! had_new_block; do
+	echo "Waiting for another block..."
 	sleep 12
 done
+
 echo "Chain is running!"
modifiedtests/src/util/globalSetup.tsdiffbeforeafterboth
--- a/tests/src/util/globalSetup.ts
+++ b/tests/src/util/globalSetup.ts
@@ -112,4 +112,8 @@
     });
 };
 
-globalSetup().catch(() => process.exit(1));
+globalSetup().catch(e => {
+  console.error('Setup error');
+  console.error(e);
+  process.exit(1)
+});
modifiedtests/src/xcm/xcmQuartz.test.tsdiffbeforeafterboth
--- a/tests/src/xcm/xcmQuartz.test.ts
+++ b/tests/src/xcm/xcmQuartz.test.ts
@@ -481,7 +481,7 @@
 
     await usingKaruraPlaygrounds(karuraUrl, async (helper) => {
       const destination = {
-        V1: {
+        V2: {
           parents: 1,
           interior: {
             X1: {
@@ -591,7 +591,7 @@
   itSub('Should connect to Karura and send QTZ back', async ({helper}) => {
     await usingKaruraPlaygrounds(karuraUrl, async (helper) => {
       const destination = {
-        V1: {
+        V2: {
           parents: 1,
           interior: {
             X2: [
@@ -653,7 +653,7 @@
     const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice);
 
     const quartzMultilocation = {
-      V1: {
+      V2: {
         parents: 1,
         interior: {
           X1: {Parachain: QUARTZ_CHAIN},
@@ -716,7 +716,7 @@
     const [targetAccount] = await helper.arrange.createAccounts([0n], alice);
 
     const quartzMultilocation = {
-      V1: {
+      V2: {
         parents: 1,
         interior: {
           X1: {
@@ -797,7 +797,6 @@
   let quartzParachainMultilocation: any;
   let quartzAccountMultilocation: any;
   let quartzCombinedMultilocation: any;
-  let quartzCombinedMultilocationKarura: any; // TODO remove it when Karura goes V2
 
   let messageSent: any;
 
@@ -835,15 +834,6 @@
 
       quartzCombinedMultilocation = {
         V2: {
-          parents: 1,
-          interior: {
-            X2: [quartzParachainJunction, quartzAccountJunction],
-          },
-        },
-      };
-
-      quartzCombinedMultilocationKarura = {
-        V1: {
           parents: 1,
           interior: {
             X2: [quartzParachainJunction, quartzAccountJunction],
@@ -871,7 +861,7 @@
       const id = {
         Token: 'KAR',
       };
-      const destination = quartzCombinedMultilocationKarura;
+      const destination = quartzCombinedMultilocation;
       await helper.xTokens.transfer(alice, id, testAmount, destination, 'Unlimited');
 
       messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);