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

difftreelog

Merge pull request #1069 from UniqueNetwork/fix/ci-polkadot-1.9

Yaroslav Bolyukin2024-05-31parents: #470ffd5 #4dba154.patch.diff
in: master

29 files changed

modified.docker/Dockerfile-acala.j2diffbeforeafterboth
--- a/.docker/Dockerfile-acala.j2
+++ b/.docker/Dockerfile-acala.j2
@@ -17,6 +17,7 @@
 RUN rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 
modified.docker/Dockerfile-astar.j2diffbeforeafterboth
--- a/.docker/Dockerfile-astar.j2
+++ b/.docker/Dockerfile-astar.j2
@@ -17,6 +17,7 @@
 RUN rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 
modified.docker/Dockerfile-chain-devdiffbeforeafterboth
--- a/.docker/Dockerfile-chain-dev
+++ b/.docker/Dockerfile-chain-dev
@@ -14,6 +14,7 @@
 RUN rustup toolchain uninstall $(rustup toolchain list) && \
     rustup toolchain install $RUST_TOOLCHAIN && \
     rustup default $RUST_TOOLCHAIN && \
+    rustup component add --toolchain $RUST_TOOLCHAIN rust-src && \
     rustup target add wasm32-unknown-unknown --toolchain $RUST_TOOLCHAIN
 
 RUN mkdir /dev_chain
modified.docker/Dockerfile-chain-dev-unitdiffbeforeafterboth
--- a/.docker/Dockerfile-chain-dev-unit
+++ b/.docker/Dockerfile-chain-dev-unit
@@ -10,6 +10,7 @@
 RUN rustup toolchain uninstall $(rustup toolchain list) && \
     rustup toolchain install $RUST_TOOLCHAIN && \
     rustup default $RUST_TOOLCHAIN && \
+    rustup component add --toolchain $RUST_TOOLCHAIN rust-src && \
     rustup target add wasm32-unknown-unknown --toolchain $RUST_TOOLCHAIN
 
 RUN mkdir /dev_chain
modified.docker/Dockerfile-collators.j2diffbeforeafterboth
--- a/.docker/Dockerfile-collators.j2
+++ b/.docker/Dockerfile-collators.j2
@@ -9,6 +9,7 @@
 RUN rustup toolchain uninstall $(rustup toolchain list) && \
     rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }}
modified.docker/Dockerfile-cumulus.j2diffbeforeafterboth
--- a/.docker/Dockerfile-cumulus.j2
+++ b/.docker/Dockerfile-cumulus.j2
@@ -17,6 +17,7 @@
 RUN rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 
modified.docker/Dockerfile-hydradx.j2diffbeforeafterboth
--- a/.docker/Dockerfile-hydradx.j2
+++ b/.docker/Dockerfile-hydradx.j2
@@ -17,6 +17,7 @@
 RUN rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 
modified.docker/Dockerfile-moonbeam.j2diffbeforeafterboth
--- a/.docker/Dockerfile-moonbeam.j2
+++ b/.docker/Dockerfile-moonbeam.j2
@@ -17,6 +17,7 @@
 RUN rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 
modified.docker/Dockerfile-parachaindiffbeforeafterboth
--- a/.docker/Dockerfile-parachain
+++ b/.docker/Dockerfile-parachain
@@ -12,6 +12,7 @@
 RUN rustup toolchain uninstall $(rustup toolchain list) && \
     rustup toolchain install $RUST_TOOLCHAIN && \
     rustup default $RUST_TOOLCHAIN && \
+    rustup component add --toolchain $RUST_TOOLCHAIN rust-src && \
     rustup target list --installed && \
     rustup show
 RUN rustup target add wasm32-unknown-unknown --toolchain $RUST_TOOLCHAIN
@@ -42,12 +43,12 @@
 ARG POLKADOT_LAUNCH_BRANCH=
 
 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 ${POLKADOT_LAUNCH_BRANCH}
 
modified.docker/Dockerfile-parachain-upgrade-data.j2diffbeforeafterboth
--- a/.docker/Dockerfile-parachain-upgrade-data.j2
+++ b/.docker/Dockerfile-parachain-upgrade-data.j2
@@ -10,6 +10,7 @@
 RUN rustup toolchain uninstall $(rustup toolchain list) && \
     rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }}
modified.docker/Dockerfile-parachain-upgrade.j2diffbeforeafterboth
--- a/.docker/Dockerfile-parachain-upgrade.j2
+++ b/.docker/Dockerfile-parachain-upgrade.j2
@@ -10,6 +10,7 @@
 RUN rustup toolchain uninstall $(rustup toolchain list) && \
     rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }}
modified.docker/Dockerfile-polkadex.j2diffbeforeafterboth
--- a/.docker/Dockerfile-polkadex.j2
+++ b/.docker/Dockerfile-polkadex.j2
@@ -17,6 +17,7 @@
 RUN rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 
modified.docker/Dockerfile-polkadot.j2diffbeforeafterboth
--- a/.docker/Dockerfile-polkadot.j2
+++ b/.docker/Dockerfile-polkadot.j2
@@ -17,6 +17,7 @@
 RUN rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 
modified.docker/Dockerfile-testnet.j2diffbeforeafterboth
--- a/.docker/Dockerfile-testnet.j2
+++ b/.docker/Dockerfile-testnet.j2
@@ -10,6 +10,7 @@
 RUN rustup toolchain uninstall $(rustup toolchain list) && \
     rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup target list --installed && \
     rustup show
 RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }}
modified.docker/Dockerfile-try-runtime.j2diffbeforeafterboth
--- a/.docker/Dockerfile-try-runtime.j2
+++ b/.docker/Dockerfile-try-runtime.j2
@@ -10,6 +10,7 @@
     rustup toolchain install {{ RUST_TOOLCHAIN }} && \
     rustup default {{ RUST_TOOLCHAIN }} && \
     rustup target list --installed && \
+    rustup component add --toolchain {{ RUST_TOOLCHAIN }} rust-src && \
     rustup show
 RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }}
 
modified.docker/Dockerfile-uniquediffbeforeafterboth
--- a/.docker/Dockerfile-unique
+++ b/.docker/Dockerfile-unique
@@ -19,6 +19,7 @@
     rustup toolchain install $RUST_TOOLCHAIN && \
     rustup target add wasm32-unknown-unknown --toolchain ${RUST_TOOLCHAIN} && \
     rustup default $RUST_TOOLCHAIN && \
+    rustup component add --toolchain $RUST_TOOLCHAIN rust-src && \
     rustup target list --installed && \
     rustup show
 
modified.docker/Dockerfile-unique-releasediffbeforeafterboth
--- a/.docker/Dockerfile-unique-release
+++ b/.docker/Dockerfile-unique-release
@@ -19,6 +19,7 @@
     rustup toolchain install $RUST_TOOLCHAIN && \
     rustup target add wasm32-unknown-unknown --toolchain ${RUST_TOOLCHAIN} && \
     rustup default $RUST_TOOLCHAIN && \
+    rustup component add --toolchain $RUST_TOOLCHAIN rust-src && \
     rustup target list --installed && \
     rustup show
 
modified.envdiffbeforeafterboth
--- a/.env
+++ b/.env
@@ -1,4 +1,4 @@
-RUST_TOOLCHAIN=nightly-2023-05-22
+RUST_TOOLCHAIN=nightly-2024-02-21
 POLKADOT_LAUNCH_BRANCH=unique-network
 RELAY_CHAIN_TYPE=westend
 CHAINQL=v0.4.1
@@ -26,8 +26,4 @@
 WESTMINT_BUILD_BRANCH=parachains-v9430
 OPAL_MAINNET_BRANCH=release-v10010063
 OPAL_REPLICA_FROM=wss://ws-opal.unique.network:443
-
-UNIQUEEAST_MAINNET_BRANCH=release-v1.0.0
-SAPPHIRE_MAINNET_BRANCH=release-v10010063
-SAPPHIRE_REPLICA_FROM=wss://ws-sapphire.unique.network:443
 
modified.github/workflows/collator-selection.ymldiffbeforeafterboth
--- a/.github/workflows/collator-selection.yml
+++ b/.github/workflows/collator-selection.yml
@@ -42,7 +42,6 @@
           matrix: |
             network {opal}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}
             network {quartz}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}
-            network {sapphire}, relay_branch {${{ env.UNIQUEEAST_MAINNET_BRANCH }}}
 
   collator-selection:
 
modified.github/workflows/forkless-update-data.ymldiffbeforeafterboth
--- a/.github/workflows/forkless-update-data.yml
+++ b/.github/workflows/forkless-update-data.yml
@@ -36,7 +36,6 @@
         with:
           matrix: |
             network {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, runtime_features {opal-runtime}, wasm_name {opal}, fork_source {${{ env.OPAL_REPLICA_FROM }}}
-            network {sapphire}, mainnet_branch {${{ env.SAPPHIRE_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEEAST_MAINNET_BRANCH }}}, runtime_features {sapphire-runtime}, wasm_name {quartz}, fork_source {${{ env.SAPPHIRE_REPLICA_FROM }}}
             network {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, runtime_features {quartz-runtime}, wasm_name {quartz}, fork_source {${{ env.QUARTZ_REPLICA_FROM }}}
             network {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, runtime_features {unique-runtime}, wasm_name {unique}, fork_source {${{ env.UNIQUE_REPLICA_FROM }}}
 
modified.github/workflows/forkless-update-nodata.ymldiffbeforeafterboth
--- a/.github/workflows/forkless-update-nodata.yml
+++ b/.github/workflows/forkless-update-nodata.yml
@@ -36,7 +36,6 @@
         with:
           matrix: |
             network {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, runtime_features {opal-runtime}, wasm_name {opal}
-            network {sapphire}, mainnet_branch {${{ env.SAPPHIRE_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEEAST_MAINNET_BRANCH }}}, runtime_features {sapphire-runtime}, wasm_name {quartz}
             network {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, runtime_features {quartz-runtime}, wasm_name {quartz}
             network {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, runtime_features {unique-runtime}, wasm_name {unique}
 
modified.github/workflows/governance.ymldiffbeforeafterboth
--- a/.github/workflows/governance.yml
+++ b/.github/workflows/governance.yml
@@ -34,7 +34,6 @@
             network {unique}, wasm_name {unique}
             network {quartz}, wasm_name {quartz}
             network {opal}, wasm_name {opal}
-            network {sapphire}, wasm_name {quartz}
 
   dev_build_int_tests:
     needs: prepare-execution-marix
modified.github/workflows/node-only-update.ymldiffbeforeafterboth
after · .github/workflows/node-only-update.yml
1# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586837028/Nodes+only+update2# Node only update with restart polkadot-launch process.34name: nodes-only update56# Triger: only call from main workflow(re-usable workflows)7on:8  workflow_call:91011# A workflow run is made up of one or more jobs that can run sequentially or in parallel12jobs:1314  prepare-execution-matrix:1516    name: execution matrix1718    runs-on: self-hosted-ci19    outputs:20      matrix: ${{ steps.create_matrix.outputs.matrix }}2122    steps:2324      - name: Clean Workspace25        uses: AutoModality/action-clean@v1.1.02627      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it28      - uses: actions/checkout@v3.1.029        with:30          ref: ${{ github.head_ref }}  #Checking out head commit3132      - name: Read .env file33        uses: xom9ikk/dotenv@v23435      - name: Create Execution matrix36        uses: CertainLach/create-matrix-action@v437        id: create_matrix38        with:39          matrix: |40            network {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, runtime_features {opal-runtime}41            network {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, runtime_features {quartz-runtime}42            network {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, runtime_features {unique-runtime}4344  node-only-update:4546    needs: prepare-execution-matrix47    # The type of runner that the job will run on48    runs-on: [self-hosted-ci]4950    timeout-minutes: 2880           # 48 hours for execution jobs.5152    name: ${{ matrix.network }}5354    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.5556    strategy:57      matrix:58        include: ${{fromJson(needs.prepare-execution-matrix.outputs.matrix)}}5960    steps:6162      - name: Skip if pull request is in Draft63        if: github.event.pull_request.draft == true64        run: exit 16566      - name: Clean Workspace67        uses: AutoModality/action-clean@v1.1.06869      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it70      - uses: actions/checkout@v3.1.071        with:72          ref: ${{ github.head_ref }}  #Checking out head commit7374      # Prepare SHA  75      - name: Prepare SHA76        uses: ./.github/actions/prepare7778      - name: Read .env file79        uses: xom9ikk/dotenv@v28081      - name: Log in to Docker Hub82        uses: docker/login-action@v2.1.083        with:84          username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}85          password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}8687      - name: Generate ENV related extend Dockerfile file for POLKADOT88        uses: cuchi/jinja2-action@v1.2.089        with:90          template: .docker/Dockerfile-polkadot.j291          output_file: .docker/Dockerfile-polkadot.${{ matrix.relay_branch }}.yml92          variables: |93            RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}94            POLKADOT_BUILD_BRANCH=${{ matrix.relay_branch }}95            96      - name: Prepare polkadot97        uses: ./.github/actions/buildContainer98        id: polkadot99        with:100          container: uniquenetwork/builder-polkadot101          tag: ${{ matrix.relay_branch }}102          context: .docker103          dockerfile: Dockerfile-polkadot.${{ matrix.relay_branch }}.yml104          dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}105          dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}106107      - name: Prepare mainnet108        uses: ./.github/actions/buildContainer109        id: mainnet110        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 }}119          dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}120          dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}121122      - name: Prepare latest123        uses: ./.github/actions/buildContainer124        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-unique130          args: |131            --build-arg RUNTIME_FEATURES=${{ matrix.runtime_features }}132            --build-arg RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}133          dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}134          dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}135136      - name: Checkout at '${{ matrix.mainnet_branch }}' branch137        uses: actions/checkout@master138        with:139          #ref: ${{ github.head_ref }}140          ref: ${{ matrix.mainnet_branch }}  #Checking out head commit141          path: ${{ matrix.mainnet_branch }}142143      - uses: actions/setup-node@v3.5.1144        with:145          node-version: 18.17.1 # Update node version to 20 after mainnet will have changes for it146147      - 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=${{ env.RELAY_CHAIN_TYPE }}-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 }}'}})165166      - name: Run Parallel tests before Node Parachain upgrade167        working-directory: ${{ matrix.mainnet_branch }}/tests168        if: success()169        run: |170          yarn171          yarn add mochawesome172          # TODO: Update to new script structure after mainnet will have it173          ./scripts/wait_for_first_block.sh174          echo "Ready to start tests"175          NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}176        env:177          RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}178179      - name: Run Sequential tests before Node Parachain upgrade180        if: success() || failure()181        working-directory: ${{ matrix.mainnet_branch }}/tests182        run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}183        env:184          RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}185186      - name: "Reconcile: only one old node"187        if: success() || failure()188        uses: UniqueNetwork/baedeker-action/reconcile@built189        with:190          baedeker: ${{ steps.bdk.outputs.baedeker }}191          # 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 mainnet192          inputs: |193            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.latest.outputs.name }}'}}, leave = 1, for_chain = false)194            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}}, for_chain = false)195            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}})196197      - name: Ensure network is alive198        if: success()199        run: |200          ./js-packages/scripts/wait_for_first_block.sh201        env:202          RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}203204      - name: "Reconcile: all nodes are updated"205        if: success() || failure()206        uses: UniqueNetwork/baedeker-action/reconcile@built207        with:208          baedeker: ${{ steps.bdk.outputs.baedeker }}209          # 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 mainnet210          inputs: |211            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.latest.outputs.name }}'}}, for_chain = false)212            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}})213214      - name: Run Parallel tests after Node Parachain upgrade215        working-directory: ${{ matrix.mainnet_branch }}/tests216        if: success() || failure()    # run this step even if previous step failed217        run: |218          yarn install219          yarn add mochawesome220          # TODO: Update to new script structure after mainnet will have it221          ./scripts/wait_for_first_block.sh222          echo "Ready to start tests"223          NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}224        env:225          RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}226227      - name: Run Sequential tests after Node Parachain upgrade228        if: success() || failure()229        working-directory: ${{ matrix.mainnet_branch }}/tests230        run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}231        env:232          RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}233234      - name: Remove builder cache235        if: always()                   # run this step always236        run: |237          docker system prune -f
modified.github/workflows/polkadot-types.ymldiffbeforeafterboth
--- a/.github/workflows/polkadot-types.yml
+++ b/.github/workflows/polkadot-types.yml
@@ -29,8 +29,6 @@
     strategy:
       matrix:
         include:
-          - network: "sapphire"
-            usage: ""
           - network: "opal"
             usage: ""
           - network: "quartz"
modified.github/workflows/try-runtime.ymldiffbeforeafterboth
--- a/.github/workflows/try-runtime.yml
+++ b/.github/workflows/try-runtime.yml
@@ -34,7 +34,6 @@
         with:
           matrix: |
             network {opal}, wasm_name {opal}, replica_from_address {${{ env.OPAL_REPLICA_FROM }}}
-            network {sapphire}, wasm_name {quartz}, replica_from_address {${{ env.SAPPHIRE_REPLICA_FROM }}}
             network {quartz}, wasm_name {quartz}, replica_from_address {${{ env.QUARTZ_REPLICA_FROM }}}
             network {unique}, wasm_name {unique}, replica_from_address {${{ env.UNIQUE_REPLICA_FROM }}}
 
modified.github/workflows/yarn-dev.ymldiffbeforeafterboth
--- a/.github/workflows/yarn-dev.yml
+++ b/.github/workflows/yarn-dev.yml
@@ -24,7 +24,6 @@
       matrix:
         include:
           - network: "opal"
-          - network: "sapphire"
           - network: "quartz"
           - network: "unique"
 
modifiedREADME.mddiffbeforeafterboth
--- a/README.md
+++ b/README.md
@@ -52,17 +52,17 @@
 
 2. Remove all installed toolchains with `rustup toolchain list` and `rustup toolchain uninstall <toolchain>`.
 
-3. Install toolchain nightly-2023-05-22 and make it default:
+3. Install toolchain nightly-2024-02-21 and make it default:
 
 ```bash
-rustup toolchain install nightly-2023-05-22
-rustup default nightly-2023-05-22
+rustup toolchain install nightly-2024-02-21
+rustup default nightly-2024-02-21
 ```
 
 4. Add wasm target for nightly toolchain:
 
 ```bash
-rustup target add wasm32-unknown-unknown --toolchain nightly-2023-05-22
+rustup target add wasm32-unknown-unknown --toolchain nightly-2024-02-21
 ```
 
 5. Build:
modifiedjs-packages/scripts/generate_types/wait_for_first_block.shdiffbeforeafterboth
--- a/js-packages/scripts/generate_types/wait_for_first_block.sh
+++ b/js-packages/scripts/generate_types/wait_for_first_block.sh
@@ -6,38 +6,42 @@
 
 last_block_id=0
 block_id=0
+counter=0
 function get_block {
-	block_id_hex=$(do_rpc chain_getHeader | jq -r .result.number)
-	block_id=$((block_id_hex))
-	echo Id = $block_id
+    block_id_hex=$(do_rpc chain_getHeader | jq -r .result.number)
+    block_id=$((block_id_hex))
+    echo Id = $block_id
 }
 
 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
+    last_block_id=$block_id
+    get_block
+    if (( last_block_id != 0 && block_id > last_block_id )); then
+        return 0
+    fi
+    return 1
 }
 
 function reset_check {
-	last_block_id=0
-	block_id=0
+    last_block_id=0
+    block_id=0
+    counter=0
 }
 
-while ! had_new_block; do
-	echo "Waiting for next block..."
-	sleep 12
+while [ ! had_new_block ] && [ $counter -lt 100 ]; do
+    echo "Waiting for next block..."
+    counter=$((counter+1))
+    sleep 12
 done
+
 reset_check
 
 echo "Chain is running, but lets wait for another block after a minute, to avoid startup flakiness."
 sleep 60
 
 while ! had_new_block; do
-	echo "Waiting for another block..."
-	sleep 12
+    echo "Waiting for another block..."
+    sleep 12
 done
 
 echo "Chain is running!"
modifiedruntime/common/tests/xcm.rsdiffbeforeafterboth
--- a/runtime/common/tests/xcm.rs
+++ b/runtime/common/tests/xcm.rs
@@ -22,7 +22,12 @@
 };
 
 use super::{last_events, new_test_ext, AccountId};
-use crate::{PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin};
+use crate::{
+	runtime_common::config::xcm::XcmExecutorConfig, PolkadotXcm, Runtime, RuntimeCall,
+	RuntimeEvent, RuntimeOrigin,
+};
+
+type XcmExecutor = staging_xcm_executor::XcmExecutor<XcmExecutorConfig<Runtime>>;
 
 const ALICE: AccountId = AccountId::new([0u8; 32]);
 const BOB: AccountId = AccountId::new([1u8; 32]);
@@ -32,35 +37,37 @@
 #[test]
 pub fn xcm_transact_is_forbidden() {
 	new_test_ext(vec![(ALICE, INITIAL_BALANCE)]).execute_with(|| {
-		PolkadotXcm::execute(
-			RuntimeOrigin::signed(ALICE),
-			Box::new(VersionedXcm::from(Xcm(vec![Transact {
-				origin_kind: OriginKind::Native,
-				require_weight_at_most: Weight::from_parts(1000, 1000),
-				call: RuntimeCall::Balances(
-					pallet_balances::Call::<Runtime>::transfer_keep_alive {
-						dest: BOB.into(),
-						value: INITIAL_BALANCE / 2,
-					},
-				)
-				.encode()
-				.into(),
-			}]))),
-			Weight::from_parts(1001000, 2000),
-		)
-		.expect(
-			"XCM execute must succeed, the error should be in the `PolkadotXcm::Attempted` event",
-		);
+		let max_weight = Weight::from_parts(1001000, 2000);
 
-		let xcm_event = &last_events(1)[0];
-		match xcm_event {
-			RuntimeEvent::PolkadotXcm(pallet_xcm::Event::<Runtime>::Attempted {
-				outcome: Outcome::Incomplete(_weight, Error::NoPermission),
-			}) => { /* Pass */ }
-			_ => panic!(
-				"Expected PolkadotXcm.Attempted(Incomplete(_weight, NoPermission)),\
-				found: {xcm_event:#?}"
-			),
+		let origin: Location = AccountId32 {
+			network: None,
+			id: *ALICE.as_ref(),
 		}
+		.into();
+		let message = Xcm(vec![Transact {
+			origin_kind: OriginKind::Native,
+			require_weight_at_most: Weight::from_parts(1000, 1000),
+			call: RuntimeCall::Balances(pallet_balances::Call::<Runtime>::transfer_keep_alive {
+				dest: BOB.into(),
+				value: INITIAL_BALANCE / 2,
+			})
+			.encode()
+			.into(),
+		}]);
+		let mut hash = message.using_encoded(sp_io::hashing::blake2_256);
+		let weight_limit = max_weight;
+		let weight_credit = max_weight;
+
+		let error = XcmExecutor::prepare_and_execute(
+			origin,
+			message,
+			&mut hash,
+			weight_limit,
+			weight_credit,
+		)
+		.ensure_complete()
+		.expect_err("XCM Transact shouldn't succeed");
+
+		assert_eq!(error, Error::NoPermission);
 	});
 }