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.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]
+ },
+}
.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],
.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']
},
.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 [
.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
.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"]
.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
.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
.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
+
.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.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 }}'}})
tests/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!"
tests/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)
+});
tests/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);