--- a/.docker/Dockerfile-parachain-upgrade +++ b/.docker/Dockerfile-parachain-upgrade @@ -24,10 +24,8 @@ 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 @@ -42,7 +40,6 @@ RUN git clone $REPO_URL -b $MAINNET_BRANCH . && \ cargo build --features=$FEATURE --$PROFILE - # ===== BUILD target version ====== FROM rust-builder as builder-unique-target @@ -77,12 +74,12 @@ ENV RUNTIME $RUNTIME 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 + 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 feature/runtime-upgrade-testing @@ -100,7 +97,6 @@ COPY --from=builder-polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ COPY --from=builder-polkadot /unique_parachain/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm /polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm - CMD export NVM_DIR="$HOME/.nvm" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ --- a/.docker/Dockerfile-parachain-upgrade-data +++ b/.docker/Dockerfile-parachain-upgrade-data @@ -5,7 +5,6 @@ ARG RUST_TOOLCHAIN= ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN - ENV CARGO_HOME="/cargo-home" ENV PATH="/cargo-home/bin:$PATH" ENV TZ=UTC @@ -28,6 +27,19 @@ RUN mkdir /unique_parachain WORKDIR /unique_parachain +# ===== BUILD current version ====== +FROM rust-builder as builder-unique-current + +ARG PROFILE=release +ARG FEATURE= +ARG MAINNET_BRANCH= +ARG REPO_URL= + +WORKDIR /unique_parachain + +RUN git clone $REPO_URL -b $MAINNET_BRANCH . && \ + cargo build --features=$FEATURE --$PROFILE + # ===== BUILD target version ====== FROM rust-builder as builder-unique-target @@ -59,7 +71,7 @@ RUN mkdir chainql WORKDIR /chainql -RUN git clone --depth 1 https://github.com/CertainLach/chainql.git . && \ +RUN git clone -b v0.1.0 --depth 1 https://github.com/CertainLach/chainql.git . && \ cargo build --release # ===== RUN ====== @@ -70,14 +82,14 @@ ENV RUNTIME $RUNTIME 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 + 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 feature/parachain-forking +RUN git clone https://github.com/uniquenetwork/polkadot-launch.git -b feature/parachain-forking RUN export NVM_DIR="$HOME/.nvm" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ @@ -87,17 +99,18 @@ RUN echo "$RUNTIME" +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/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm -COPY --from=builder-polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ +COPY --from=builder-chainql /chainql/target/release/chainql /chainql/target/release/ -COPY --from=builder-chainql /chainql/target/release/chainql /chainql/target/release/ +COPY --from=builder-polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ +COPY --from=builder-polkadot /unique_parachain/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm /polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm ARG FORK_FROM= ENV FORK_FROM=$FORK_FROM CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" FORK_FROM && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ cd /polkadot-launch && \ - yarn start launch-config.json - - + yarn start launch-config.json --test-upgrade-parachains --- a/.docker/docker-compose.tmp-forkless-data.j2 +++ b/.docker/docker-compose.tmp-forkless-data.j2 @@ -10,6 +10,8 @@ - "FEATURE={{ FEATURE }}" - "RUNTIME={{ RUNTIME }}" - "POLKADOT_BUILD_BRANCH={{ POLKADOT_BUILD_BRANCH }}" + - "MAINNET_TAG={{ MAINNET_TAG }}" + - "MAINNET_BRANCH={{ MAINNET_BRANCH }}" - "FORK_FROM={{ FORK_FROM }}" context: ../ dockerfile: .docker/Dockerfile-parachain-upgrade-data @@ -23,7 +25,11 @@ - type: bind source: ./forkless-config/fork.jsonnet target: /polkadot-launch/fork.jsonnet - read_only: true + read_only: true + - type: bind + source: ./forkless-config/typeNames.jsonnet + target: /polkadot-launch/typeNames.jsonnet + read_only: true expose: - 9944 - 9933 @@ -33,4 +39,4 @@ logging: options: max-size: "1m" - max-file: "3" \ No newline at end of file + max-file: "3" --- a/.docker/forkless-config/launch-config-forkless-data.j2 +++ b/.docker/forkless-config/launch-config-forkless-data.j2 @@ -1,6 +1,8 @@ { "relaychain": { "bin": "/polkadot/target/release/polkadot", + "upgradeBin": "/polkadot/target/release/polkadot", + "upgradeWasm": "/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm", "chain": "westend-local", "nodes": [ { @@ -85,6 +87,8 @@ "parachains": [ { "bin": "/unique-chain/target/release/unique-collator", + "upgradeBin": "/unique-chain/target/release/unique-collator", + "upgradeWasm": "/unique-chain/target/release/wbuild/{{ FEATURE }}/{{ RUNTIME }}_runtime.compact.compressed.wasm", "id": "1000", "balance": "1000000000000000000000000", "chainRawInitializer": [ --- a/.env +++ b/.env @@ -6,3 +6,7 @@ KUSAMA_MAINNET_BRANCH=release-v0.9.26 QUARTZ_MAINNET_TAG=quartz-v924012-2 + +OPAL_FORK_FROM=wss://eu-ws-opal.unique.network:443 +QUARTZ_FORK_FROM=wss://eu-ws-quartz.unique.network:443 +UNIQUE_FORK_FROM=wss://eu-ws.unique.network:443 --- a/.github/workflows/forkless-update-data.yml +++ b/.github/workflows/forkless-update-data.yml @@ -19,37 +19,61 @@ env: REPO_URL: ${{ github.server_url }}/${{ github.repository }} -concurrency: +concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: + prepare-execution-marix: + + name: Prepare execution matrix + + runs-on: self-hosted-ci + outputs: + matrix: ${{ steps.create_matrix.outputs.matrix }} + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} #Checking out head commit + + - name: Read .env file + uses: xom9ikk/dotenv@v1.0.2 + + - name: Create Execution matrix + uses: CertainLach/create-matrix-action@v3 + id: create_matrix + with: + matrix: | + network {opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}}, fork_from_address {${{ env.OPAL_FORK_FROM }}} + network {quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}}, fork_from_address {${{ env.QUARTZ_FORK_FROM }}} + network {unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}}, fork_from_address {${{ env.UNIQUE_FORK_FROM }}} + + + forkless-update-data: + needs: prepare-execution-marix # The type of runner that the job will run on runs-on: [self-hosted-ci,large] timeout-minutes: 1380 + + name: ${{ matrix.network }} 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. strategy: matrix: - include: - - network: opal - features: opal-runtime - runtime: opal - fork_from_address: wss://eu-ws-opal.unique.network:443 - - network: quartz - features: quartz-runtime - runtime: quartz - fork_from_address: wss://eu-ws-quartz.unique.network:443 - - network: unique - features: unique-runtime - runtime: unique - fork_from_address: wss://eu-ws.unique.network:443 + include: ${{fromJson(needs.prepare-execution-marix.outputs.matrix)}} + steps: - name: Skip if pull request is in Draft @@ -91,6 +115,8 @@ RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }} + MAINNET_TAG=${{ matrix.mainnet_tag }} + MAINNET_BRANCH=${{ matrix.mainnet_branch }} FEATURE=${{ matrix.features }} RUNTIME=${{ matrix.runtime }} BRANCH=${{ github.head_ref }} @@ -118,33 +144,48 @@ - name: Check if docker logs consist logs related to Runtime Upgrade testing. if: success() run: | - counter=160 - function do_docker_logs { - docker logs --details parachain-fork 2>&1 - } - function is_started { - echo "Check Docker logs" - DOCKER_LOGS=$(do_docker_logs) - if [[ ${DOCKER_LOGS} = *"🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸"* ]];then - echo "🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸" - return 0 - exit 0 + counter=160 + function check_container_status { + docker inspect -f {{.State.Running}} node-parachain + } + function do_docker_logs { + docker logs --details node-parachain 2>&1 + } + function is_started { + if [ "$(check_container_status)" == "true" ]; then + echo "Container: node-parachain RUNNING"; + echo "Check Docker logs" + DOCKER_LOGS=$(do_docker_logs) + if [[ ${DOCKER_LOGS} = *"🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸"* ]];then + echo "🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸" + return 0 + elif [[ ${DOCKER_LOGS} = *"🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧"* ]];then + echo "🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧" + return 1 + else + echo "Message not found in logs output, repeating..." + return 1 + fi + else + echo "Container node-parachain not RUNNING" + echo "Halting all future checks" + exit 1 fi - echo "Function is_started: Return 1" - return 1 - } - while ! is_started; do + exit 0 + } + while ! is_started; do echo "Waiting for special message in log files " sleep 30s counter=$(( $counter - 1 )) echo "Counter: $counter" if [ "$counter" -gt "0" ]; then - continue + continue else - break + break fi - done - exit 1 + done + echo "Halting script" + exit 0 shell: bash - name: Collect Docker Logs @@ -152,10 +193,10 @@ uses: jwalton/gh-docker-logs@v2.2.0 with: dest: './forkless-parachain-upgrade-data-logs.${{ matrix.features }}' - images: 'node-parachain' + images: 'node-parachain' - name: Show Docker logs - run: cat './forkless-parachain-upgrade-data-logs.${{ matrix.features }}/node-parachain.log' + run: cat './forkless-parachain-upgrade-data-logs.${{ matrix.features }}/node-parachain.log' - name: Stop running containers if: always() # run this step always