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

difftreelog

Merge branch 'develop' into tests/parallel-ci

Yaroslav Bolyukin2022-10-18parents: #d934a63 #1d7b069.patch.diff
in: master

15 files changed

modified.docker/Dockerfile-try-runtimediffbeforeafterboth
--- a/.docker/Dockerfile-try-runtime
+++ b/.docker/Dockerfile-try-runtime
@@ -46,5 +46,4 @@
     echo "Fork from: $REPLICA_FROM\n" && \
     cargo build --features=$FEATURE --release
     
-
-CMD cargo run --features=try-runtime,$FEATURE --release -- try-runtime on-runtime-upgrade live --uri $REPLICA_FROM
+CMD cargo run --features=try-runtime,$FEATURE --release -- try-runtime --no-spec-name-check on-runtime-upgrade live --uri $REPLICA_FROM
modified.github/workflows/market-test_v2.ymldiffbeforeafterboth
--- a/.github/workflows/market-test_v2.yml
+++ b/.github/workflows/market-test_v2.yml
@@ -91,12 +91,20 @@
           rm -rf .env
           cp .env.docker .env
 
+# Temporary disable node readyness check. Have to dig into the script logic.
+#      - name: Wait for chain up and running
+#        working-directory: tests
+#        run: |
+#          yarn install
+#          node scripts/readyness.js
+#          echo "Ready to start tests"
+#        env:
+#          RPC_URL: http://127.0.0.1:9933/
+
       - name: Wait for chain up and running
-        working-directory: tests
         run: |
-          yarn install
-          node scripts/readyness.js
-          echo "Ready to start tests"
+          sleep 1200s
+          echo "Ready to start Market e2e tests"
 
       - name: Show content of .env file and Generate accounts
         working-directory: qa-tests
@@ -184,7 +192,6 @@
       - name: Clean Workspace
         if: always()
         uses: AutoModality/action-clean@v1.1.0
-
 
 
 
modified.github/workflows/node-only-update_v2.ymldiffbeforeafterboth
before · .github/workflows/node-only-update_v2.yml
1name: nodes-only update23# Controls when the action will run.4on:5  workflow_call:6#Define Workflow variables7env:8  REPO_URL: ${{ github.server_url }}/${{ github.repository }}910# A workflow run is made up of one or more jobs that can run sequentially or in parallel11jobs:1213  nodes-execution-matrix:1415    name: execution matrix1617    runs-on: self-hosted-ci18    outputs:19      matrix: ${{ steps.create_matrix.outputs.matrix }}2021    steps:2223      - name: Clean Workspace24        uses: AutoModality/action-clean@v1.1.02526      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it27      - uses: actions/checkout@v328        with:29          ref: ${{ github.head_ref }}  #Checking out head commit3031      - name: Read .env file32        uses: xom9ikk/dotenv@v1.0.23334      - name: Create Execution matrix35        uses: CertainLach/create-matrix-action@v336        id: create_matrix37        with:38          matrix: |39            network {opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.OPAL_MAINNET_TAG }}}40            network {quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}}41            network {unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}}42434445  nodes-only-update:46    needs: nodes-execution-matrix47    # The type of runner that the job will run on48    runs-on: [self-hosted-ci,large]49505152    timeout-minutes: 2880           # 48 hours for execution jobs.5354    name: ${{ matrix.network }}5556    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.nodes-execution-matrix.outputs.matrix)}}6162    steps:6364      - name: Clean Workspace65        uses: AutoModality/action-clean@v1.1.06667      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it68      - uses: actions/checkout@v369        with:70          ref: ${{ github.head_ref }}  #Checking out head commit7172      - name: Read .env file73        uses: xom9ikk/dotenv@v1.0.27475      - name: Generate ENV related extend file for docker-compose76        uses: cuchi/jinja2-action@v1.2.077        with:78          template: .docker/docker-compose.tmp-node.j279          output_file: .docker/docker-compose.node.${{ matrix.network }}.yml80          variables: |81            REPO_URL=${{ github.server_url }}/${{ github.repository }}.git82            RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}83            POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }}84            POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }}85            MAINNET_TAG=${{ matrix.mainnet_tag }}86            MAINNET_BRANCH=${{ matrix.mainnet_branch }}87            FEATURE=${{ matrix.features }}88            RUNTIME=${{ matrix.runtime }}89            BRANCH=${{ github.head_ref }}9091      - name: Show build configuration92        run: cat .docker/docker-compose.node.${{ matrix.network }}.yml9394      - name: Generate launch-config-forkless-nodata.json95        uses: cuchi/jinja2-action@v1.2.096        with:97          template: .docker/forkless-config/launch-config-forkless-nodata.j298          output_file: .docker/launch-config-forkless-nodata.json99          variables: |100            FEATURE=${{ matrix.features }}101            RUNTIME=${{ matrix.runtime }}102103      - name: Show launch-config-forkless configuration104        run: cat .docker/launch-config-forkless-nodata.json105106      - uses: actions/setup-node@v3107        with:108          node-version: 16109110      - name: Build the stack111        run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.node.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate --timeout 300112113      #  🚀 POLKADOT LAUNCH COMPLETE 🚀114      - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade.115        if: success()116        run: |117          counter=160118          function check_container_status {119                docker inspect -f {{.State.Running}} node-parachain120          }121          function do_docker_logs {122                docker logs --details node-parachain  2>&1123          }124          function is_started {125                if [ "$(check_container_status)" == "true" ]; then126                        echo "Container: node-parachain RUNNING";127                        echo "Check Docker logs"128                        DOCKER_LOGS=$(do_docker_logs)129                        if [[ ${DOCKER_LOGS} = *"POLKADOT LAUNCH COMPLETE"* ]];then130                                echo "🚀 POLKADOT LAUNCH COMPLETE 🚀"131                                return 0132                        else133                                echo "Message not found in logs output, repeating..."134                                return 1135                        fi136                else137                        echo "Container node-parachain NOT RUNNING"138                        echo "Halting all future checks"139                        exit 1140                fi141          echo "something goes wrong"142          exit 1143          }144          while ! is_started; do145                echo "Waiting for special message in log files "146                sleep 30s147                counter=$(( $counter - 1 ))148                echo "Counter: $counter"149                if [ "$counter" -gt "0" ]; then150                         continue151                else152                         break153                fi154          done155          echo "Halting script"156          exit 0157        shell: bash158159      - name: Checkout at '${{ matrix.mainnet_branch }}' branch160        uses: actions/checkout@master161        with:162          ref: ${{ matrix.mainnet_branch }}  #Checking out head commit163          path: ${{ matrix.mainnet_branch }}164165      - name: Run tests before Node Parachain upgrade166        working-directory: ${{ matrix.mainnet_branch }}/tests167        run: |168          yarn install169          yarn add mochawesome170          echo "Ready to start tests"171          yarn polkadot-types172          NOW=$(date +%s) && yarn test --reporter mochawesome --reporter-options reportFilename=test-${NOW}173        env:174          RPC_URL: http://127.0.0.1:9933/175176      - name: Upload Test Report Before Node upgrade177        uses: phoenix-actions/test-reporting@v8178        id: test-report-before179        if: success() || failure()    # run this step even if previous step failed180        with:181          name: Tests before node upgrade ${{ matrix.network }}            # Name of the check run which will be created182          path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-*.json    # Path to test results183          reporter: mochawesome-json184          fail-on-error: 'false'185186187      # TODO uncomment thease steps after the merge188      #- name: Run Parallel tests before Node Parachain upgrade189      #  working-directory: ${{ matrix.mainnet_branch }}/tests190      #  run: |191      #    yarn install192      #    yarn add mochawesome193      #    echo "Ready to start tests"194      #    yarn polkadot-types195      #    NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}196      #  env:197      #    RPC_URL: http://127.0.0.1:9933/198199      #- name: Upload Parallel Test Report Before Node upgrade200      #  uses: phoenix-actions/test-reporting@v8201      #  id: test-parallel-report-before202      #  if: success() || failure()    # run this step even if previous step failed203      #  with:204      #    name: Tests before node upgrade ${{ matrix.network }}            # Name of the check run which will be created205      #    path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-parallel-*.json    # Path to test results206      #    reporter: mochawesome-json207      #    fail-on-error: 'false'208209      # - name: Run Sequential tests before Node Parachain upgrade210      #   if: success() || failure()211      #   working-directory: ${{ matrix.mainnet_branch }}/tests212      #   run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}213      #   env:214      #     RPC_URL: http://127.0.0.1:9933/215216      # - name: Upload Sequential Test Report Before Node upgrade217      #   uses: phoenix-actions/test-reporting@v8218      #   id: test-sequential-report-before219      #   if: success() || failure()    # run this step even if previous step failed220      #   with:221      #     name: Tests before node upgrade ${{ matrix.network }}            # Name of the check run which will be created222      #     path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-sequential-*.json    # Path to test results223      #     reporter: mochawesome-json224      #     fail-on-error: 'false'225     226      - name: Send SIGUSR1 to polkadot-launch process227        if: success() || failure()228        run: |229          #Get PID of polkadot-launch230          ContainerID=$(docker ps -aqf "name=node-parachain")231          PID=$(docker exec node-parachain pidof 'polkadot-launch')232          echo "Polkadot-launch PID: $PID"233          #Send SIGUSR1 signal to $PID234          docker exec node-parachain kill -SIGUSR1 ${PID}235          echo "SIGUSR1 sent to Polkadot-launch PID: $PID"236          docker logs ${ContainerID}237      238      - name: Get chain logs in case of docker image crashed after Polkadot Launch restart239        if: failure()                   # run this step only at failure240        run: |241          docker exec node-parachain cat /polkadot-launch/9944.log242          docker exec node-parachain cat /polkadot-launch/9945.log243          docker exec node-parachain cat /polkadot-launch/alice.log244          docker exec node-parachain cat /polkadot-launch/eve.log245          docker exec node-parachain cat /polkadot-launch/dave.log246          docker exec node-parachain cat /polkadot-launch/charlie.log  247248      #  🌗 All parachain collators restarted with the new binaries.249      - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade.250        if: success()251        run: |252          counter=160253          function check_container_status {254                docker inspect -f {{.State.Running}} node-parachain255          }256          function do_docker_logs {257                docker logs --details node-parachain  2>&1258          }259          function is_started {260                if [ "$(check_container_status)" == "true" ]; then261                        echo "Container: node-parachain RUNNING";262                        echo "Check Docker logs"263                        DOCKER_LOGS=$(do_docker_logs)264                        if [[ ${DOCKER_LOGS} = *"All parachain collators restarted with the new binaries."* ]];then265                                echo "🌗 All parachain collators restarted with the new binaries."266                                return 0267                        else268                                echo "Message not found in logs output, repeating..."269                                return 1270                        fi271                else272                        echo "Container node-parachain NOT RUNNING"273                        echo "Halting all future checks"274                        exit 1275                fi276          echo "something goes wrong"277          exit 1278          }279          while ! is_started; do280                echo "Waiting for special message in log files "281                sleep 30s282                counter=$(( $counter - 1 ))283                echo "Counter: $counter"284                if [ "$counter" -gt "0" ]; then285                         continue286                else287                         break288                fi289          done290          echo "Halting script"291          exit 0292        shell: bash293        294      ## TODO: Remove next two blocks before switch to Parrallel & Sequental tests. Uncoment commented blocks.295      - name: Run tests after Node Parachain upgrade296        working-directory: ${{ matrix.mainnet_branch }}/tests297        run: |298          yarn install299          yarn add mochawesome300          node scripts/readyness.js301          echo "Ready to start tests"302          yarn polkadot-types303          NOW=$(date +%s) && yarn test --reporter mochawesome --reporter-options reportFilename=test-${NOW}304        env:305          RPC_URL: http://127.0.0.1:9933/306307      - name: Test Report After Node upgrade308        uses: phoenix-actions/test-reporting@v8309        id: test-report-after310        if: success() || failure()    # run this step even if previous step failed311        with:312          name: Tests after node upgrade ${{ matrix.network }}            # Name of the check run which will be created313          path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-*.json    # Path to test results314          reporter: mochawesome-json315          fail-on-error: 'false'316317      # TODO uncomment thease steps after the merge318      #- name: Run Parallel tests after Node Parachain upgrade319      #  working-directory: ${{ matrix.mainnet_branch }}/tests320      #  run: |321      #    yarn install322      #    yarn add mochawesome323      #    node scripts/readyness.js324      #    echo "Ready to start tests"325      #    yarn polkadot-types326      #    NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}327      #  env:328      #    RPC_URL: http://127.0.0.1:9933/329330      #- name: Test Report Parallel After Node upgrade331      #  uses: phoenix-actions/test-reporting@v8332      #  id: test-report-parallel-after333      #  if: success() || failure()    # run this step even if previous step failed334      #  with:335      #    name: Tests after node upgrade ${{ matrix.network }}            # Name of the check run which will be created336      #    path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-parallel-*.json    # Path to test results337      #    reporter: mochawesome-json338      #    fail-on-error: 'false'339      340      #- name: Run Sequential tests after Node Parachain upgrade341      #  if: success() || failure()342      #  working-directory: ${{ matrix.mainnet_branch }}/tests343      #  run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}344      #  env:345      #    RPC_URL: http://127.0.0.1:9933/346347      #- name: Upload Sequential Test Report After Node upgrade348      #  uses: phoenix-actions/test-reporting@v8349      #  id: test-sequential-report-after350      #  if: success() || failure()    # run this step even if previous step failed351      #  with:352      #    name: Tests before node upgrade ${{ matrix.network }}            # Name of the check run which will be created353      #    path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-sequential-*.json    # Path to test results354      #    reporter: mochawesome-json355      #    fail-on-error: 'false'356357358      - name: Stop running containers359        if: always()                   # run this step always360        run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.node.${{ matrix.network }}.yml" down --volumes361362      - name: Remove builder cache363        if: always()                   # run this step always364        run: |365          docker builder prune -f -a366          docker system prune -f367          docker image prune -f -a368369      - name: Remove repo at the end370        if: always()                   # run this step always371        run: |372          ls -ls ./
after · .github/workflows/node-only-update_v2.yml
1name: nodes-only update23# Controls when the action will run.4on:5  workflow_call:6#Define Workflow variables7env:8  REPO_URL: ${{ github.server_url }}/${{ github.repository }}910# A workflow run is made up of one or more jobs that can run sequentially or in parallel11jobs:1213  nodes-execution-matrix:1415    name: execution matrix1617    runs-on: self-hosted-ci18    outputs:19      matrix: ${{ steps.create_matrix.outputs.matrix }}2021    steps:2223      - name: Clean Workspace24        uses: AutoModality/action-clean@v1.1.02526      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it27      - uses: actions/checkout@v328        with:29          ref: ${{ github.head_ref }}  #Checking out head commit3031      - name: Read .env file32        uses: xom9ikk/dotenv@v1.0.23334      - name: Create Execution matrix35        uses: CertainLach/create-matrix-action@v336        id: create_matrix37        with:38          matrix: |39            network {opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.OPAL_MAINNET_TAG }}}40            network {quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}}41            network {unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}}42434445  nodes-only-update:46    needs: nodes-execution-matrix47    # The type of runner that the job will run on48    runs-on: [self-hosted-ci,large]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.nodes-execution-matrix.outputs.matrix)}}5960    steps:6162      - name: Clean Workspace63        uses: AutoModality/action-clean@v1.1.06465      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it66      - uses: actions/checkout@v367        with:68          ref: ${{ github.head_ref }}  #Checking out head commit6970      - name: Read .env file71        uses: xom9ikk/dotenv@v1.0.27273      - name: Generate ENV related extend file for docker-compose74        uses: cuchi/jinja2-action@v1.2.075        with:76          template: .docker/docker-compose.tmp-node.j277          output_file: .docker/docker-compose.node.${{ matrix.network }}.yml78          variables: |79            REPO_URL=${{ github.server_url }}/${{ github.repository }}.git80            RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}81            POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }}82            POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }}83            MAINNET_TAG=${{ matrix.mainnet_tag }}84            MAINNET_BRANCH=${{ matrix.mainnet_branch }}85            FEATURE=${{ matrix.features }}86            RUNTIME=${{ matrix.runtime }}87            BRANCH=${{ github.head_ref }}8889      - name: Show build configuration90        run: cat .docker/docker-compose.node.${{ matrix.network }}.yml9192      - name: Generate launch-config-forkless-nodata.json93        uses: cuchi/jinja2-action@v1.2.094        with:95          template: .docker/forkless-config/launch-config-forkless-nodata.j296          output_file: .docker/launch-config-forkless-nodata.json97          variables: |98            FEATURE=${{ matrix.features }}99            RUNTIME=${{ matrix.runtime }}100101      - name: Show launch-config-forkless configuration102        run: cat .docker/launch-config-forkless-nodata.json103104      - uses: actions/setup-node@v3105        with:106          node-version: 16107108      - name: Build the stack109        run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.node.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate --timeout 300110111      #  🚀 POLKADOT LAUNCH COMPLETE 🚀112      - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade.113        if: success()114        run: |115          counter=160116          function check_container_status {117                docker inspect -f {{.State.Running}} node-parachain118          }119          function do_docker_logs {120                docker logs --details node-parachain  2>&1121          }122          function is_started {123                if [ "$(check_container_status)" == "true" ]; then124                        echo "Container: node-parachain RUNNING";125                        echo "Check Docker logs"126                        DOCKER_LOGS=$(do_docker_logs)127                        if [[ ${DOCKER_LOGS} = *"POLKADOT LAUNCH COMPLETE"* ]];then128                                echo "🚀 POLKADOT LAUNCH COMPLETE 🚀"129                                return 0130                        else131                                echo "Message not found in logs output, repeating..."132                                return 1133                        fi134                else135                        echo "Container node-parachain NOT RUNNING"136                        echo "Halting all future checks"137                        exit 1138                fi139          echo "something goes wrong"140          exit 1141          }142          while ! is_started; do143                echo "Waiting for special message in log files "144                sleep 30s145                counter=$(( $counter - 1 ))146                echo "Counter: $counter"147                if [ "$counter" -gt "0" ]; then148                         continue149                else150                         break151                fi152          done153          echo "Halting script"154          exit 0155        shell: bash156157      - name: Checkout at '${{ matrix.mainnet_branch }}' branch158        uses: actions/checkout@master159        with:160          ref: ${{ matrix.mainnet_branch }}  #Checking out head commit161          path: ${{ matrix.mainnet_branch }}162163      - name: Run tests before Node Parachain upgrade164        working-directory: ${{ matrix.mainnet_branch }}/tests165        run: |166          yarn install167          yarn add mochawesome168          echo "Ready to start tests"169          yarn polkadot-types170          NOW=$(date +%s) && yarn test --reporter mochawesome --reporter-options reportFilename=test-before-${NOW}171        env:172          RPC_URL: http://127.0.0.1:9933/173174      - name: Upload Test Report Before Node upgrade175        uses: phoenix-actions/test-reporting@v8176        id: test-report-before177        if: success() || failure()    # run this step even if previous step failed178        with:179          name: Tests before node upgrade ${{ matrix.network }}            # Name of the check run which will be created180          path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-before-*.json    # Path to test results181          reporter: mochawesome-json182          fail-on-error: 'false'183184      # TODO uncomment thease steps after the merge185      #- name: Run Parallel tests before Node Parachain upgrade186      #  working-directory: ${{ matrix.mainnet_branch }}/tests187      #  run: |188      #    yarn install189      #    yarn add mochawesome190      #    echo "Ready to start tests"191      #    yarn polkadot-types192      #    NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}193      #  env:194      #    RPC_URL: http://127.0.0.1:9933/195196      #- name: Upload Parallel Test Report Before Node upgrade197      #  uses: phoenix-actions/test-reporting@v8198      #  id: test-parallel-report-before199      #  if: success() || failure()    # run this step even if previous step failed200      #  with:201      #    name: Tests before node upgrade ${{ matrix.network }}            # Name of the check run which will be created202      #    path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-parallel-*.json    # Path to test results203      #    reporter: mochawesome-json204      #    fail-on-error: 'false'205206      # - name: Run Sequential tests before Node Parachain upgrade207      #   if: success() || failure()208      #   working-directory: ${{ matrix.mainnet_branch }}/tests209      #   run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}210      #   env:211      #     RPC_URL: http://127.0.0.1:9933/212213      # - name: Upload Sequential Test Report Before Node upgrade214      #   uses: phoenix-actions/test-reporting@v8215      #   id: test-sequential-report-before216      #   if: success() || failure()    # run this step even if previous step failed217      #   with:218      #     name: Tests before node upgrade ${{ matrix.network }}            # Name of the check run which will be created219      #     path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-sequential-*.json    # Path to test results220      #     reporter: mochawesome-json221      #     fail-on-error: 'false'222     223      - name: Send SIGUSR1 to polkadot-launch process224        if: success() || failure()225        run: |226          #Get PID of polkadot-launch227          ContainerID=$(docker ps -aqf "name=node-parachain")228          PID=$(docker exec node-parachain pidof 'polkadot-launch')229          sleep 30s230          echo -e "Show logs of node-parachain container.\n"231          docker logs ${ContainerID}232          echo -e "\n"233          echo -e "Restart polkadot-launch process: $PID\n"234          docker exec node-parachain kill -SIGUSR1 ${PID}235          echo "SIGUSR1 sent to Polkadot-launch PID: $PID"236          docker logs ${ContainerID}237      238      - name: Get chain logs in case of docker image crashed after Polkadot Launch restart239        if: failure()                   # run this step only at failure240        run: |241          docker exec node-parachain cat /polkadot-launch/9944.log242          docker exec node-parachain cat /polkadot-launch/9945.log243          docker exec node-parachain cat /polkadot-launch/alice.log244          docker exec node-parachain cat /polkadot-launch/eve.log245          docker exec node-parachain cat /polkadot-launch/dave.log246          docker exec node-parachain cat /polkadot-launch/charlie.log             247248      - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade.249        if: success()250        run: |251          counter=160252          function check_container_status {253                docker inspect -f {{.State.Running}} node-parachain254          }255          function do_docker_logs {256                docker logs --details node-parachain  2>&1257          }258          function is_started {259                if [ "$(check_container_status)" == "true" ]; then260                        echo "Container: node-parachain RUNNING";261                        echo "Check Docker logs"262                        DOCKER_LOGS=$(do_docker_logs)263                        if [[ ${DOCKER_LOGS} = *"All parachain collators restarted with the new binaries."* ]];then264                                echo "🌗 All parachain collators restarted with the new binaries."265                                return 0266                        else267                                echo "Message not found in logs output, repeating..."268                                return 1269                        fi270                else271                        echo "Container node-parachain NOT RUNNING"272                        echo "Halting all future checks"273                        exit 1274                fi275          echo "something goes wrong"276          exit 1277          }278          while ! is_started; do279                echo "Waiting for special message in log files "280                sleep 30s281                counter=$(( $counter - 1 ))282                echo "Counter: $counter"283                if [ "$counter" -gt "0" ]; then284                         continue285                else286                         break287                fi288          done289          echo "Halting script"290          exit 0291        shell: bash292        293      ## TODO: Remove next two blocks before switch to Parrallel & Sequental tests. Uncoment commented blocks.294      - name: Run tests after Node Parachain upgrade295        working-directory: ${{ matrix.mainnet_branch }}/tests296        run: |297          yarn install298          yarn add mochawesome299          echo "Ready to start tests"300          yarn polkadot-types301          NOW=$(date +%s) && yarn test --reporter mochawesome --reporter-options reportFilename=test-after-${NOW}302        env:303          RPC_URL: http://127.0.0.1:9933/304305      - name: Test Report After Node upgrade306        uses: phoenix-actions/test-reporting@v8307        id: test-report-after308        if: success() || failure()    # run this step even if previous step failed309        with:310          name: Tests after node upgrade ${{ matrix.network }}            # Name of the check run which will be created311          path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-after-*.json    # Path to test results312          reporter: mochawesome-json313          fail-on-error: 'false'314315      # TODO uncomment thease steps after the merge316      #- name: Run Parallel tests after Node Parachain upgrade317      #  working-directory: ${{ matrix.mainnet_branch }}/tests318      #  run: |319      #    yarn install320      #    yarn add mochawesome321      #    node scripts/readyness.js322      #    echo "Ready to start tests"323      #    yarn polkadot-types324      #    NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}325      #  env:326      #    RPC_URL: http://127.0.0.1:9933/327328      #- name: Test Report Parallel After Node upgrade329      #  uses: phoenix-actions/test-reporting@v8330      #  id: test-report-parallel-after331      #  if: success() || failure()    # run this step even if previous step failed332      #  with:333      #    name: Tests after node upgrade ${{ matrix.network }}            # Name of the check run which will be created334      #    path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-parallel-*.json    # Path to test results335      #    reporter: mochawesome-json336      #    fail-on-error: 'false'337      338      #- name: Run Sequential tests after Node Parachain upgrade339      #  if: success() || failure()340      #  working-directory: ${{ matrix.mainnet_branch }}/tests341      #  run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}342      #  env:343      #    RPC_URL: http://127.0.0.1:9933/344345      #- name: Upload Sequential Test Report After Node upgrade346      #  uses: phoenix-actions/test-reporting@v8347      #  id: test-sequential-report-after348      #  if: success() || failure()    # run this step even if previous step failed349      #  with:350      #    name: Tests before node upgrade ${{ matrix.network }}            # Name of the check run which will be created351      #    path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-sequential-*.json    # Path to test results352      #    reporter: mochawesome-json353      #    fail-on-error: 'false'354355356      - name: Stop running containers357        if: always()                   # run this step always358        run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.node.${{ matrix.network }}.yml" down --volumes359360      - name: Remove builder cache361        if: always()                   # run this step always362        run: |363          docker builder prune -f -a364          docker system prune -f365          docker image prune -f -a366367      - name: Remove repo at the end368        if: always()                   # run this step always369        run: |370          ls -ls ./
modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -6711,6 +6711,24 @@
 ]
 
 [[package]]
+name = "pallet-unique-scheduler-v2"
+version = "0.1.0"
+dependencies = [
+ "frame-benchmarking",
+ "frame-support",
+ "frame-system",
+ "log",
+ "pallet-preimage",
+ "parity-scale-codec 3.2.1",
+ "scale-info",
+ "sp-core",
+ "sp-io",
+ "sp-runtime",
+ "sp-std",
+ "substrate-test-utils",
+]
+
+[[package]]
 name = "pallet-utility"
 version = "4.0.0-dev"
 source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
@@ -8576,7 +8594,7 @@
 
 [[package]]
 name = "quartz-runtime"
-version = "0.9.27"
+version = "0.9.29"
 dependencies = [
  "app-promotion-rpc",
  "cumulus-pallet-aura-ext",
@@ -12568,7 +12586,7 @@
 
 [[package]]
 name = "unique-runtime"
-version = "0.9.27"
+version = "0.9.29"
 dependencies = [
  "app-promotion-rpc",
  "cumulus-pallet-aura-ext",
modifiedREADME.mddiffbeforeafterboth
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@
 ```
 git clone https://github.com/paritytech/polkadot.git
 cd polkadot
-git checkout release-v0.9.27
+git checkout release-v0.9.29
 cargo build --release
 ```
 
modifiedruntime/common/construct_runtime/mod.rsdiffbeforeafterboth
--- a/runtime/common/construct_runtime/mod.rs
+++ b/runtime/common/construct_runtime/mod.rs
@@ -57,8 +57,8 @@
                 Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,
                 Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,
 
-                #[runtimes(opal)]
-                Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
+                // #[runtimes(opal)]
+                // Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
 
                 Configuration: pallet_configuration::{Pallet, Call, Storage} = 63,
 
modifiedruntime/common/mod.rsdiffbeforeafterboth
--- a/runtime/common/mod.rs
+++ b/runtime/common/mod.rs
@@ -20,7 +20,10 @@
 pub mod ethereum;
 pub mod instance;
 pub mod runtime_apis;
+
+#[cfg(feature = "scheduler")]
 pub mod scheduler;
+
 pub mod sponsoring;
 pub mod weights;
 
modifiedruntime/opal/Cargo.tomldiffbeforeafterboth
--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -168,7 +168,7 @@
     "pallet-foreign-assets/std"
 ]
 limit-testing = ['pallet-unique/limit-testing', 'up-data-structs/limit-testing']
-opal-runtime = ['refungible', 'scheduler', 'rmrk', 'app-promotion', 'foreign-assets']
+opal-runtime = ['refungible', 'rmrk', 'app-promotion', 'foreign-assets']
 
 refungible = []
 scheduler = []
modifiedruntime/opal/src/lib.rsdiffbeforeafterboth
--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -50,7 +50,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 927030,
+	spec_version: 929030,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 2,
modifiedruntime/quartz/Cargo.tomldiffbeforeafterboth
--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -10,7 +10,7 @@
 license = 'GPLv3'
 name = 'quartz-runtime'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.27'
+version = '0.9.29'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
modifiedruntime/quartz/src/lib.rsdiffbeforeafterboth
--- a/runtime/quartz/src/lib.rs
+++ b/runtime/quartz/src/lib.rs
@@ -50,7 +50,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 927030,
+	spec_version: 929030,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 2,
modifiedruntime/unique/Cargo.tomldiffbeforeafterboth
--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -10,7 +10,7 @@
 license = 'GPLv3'
 name = 'unique-runtime'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.27'
+version = '0.9.29'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
modifiedruntime/unique/src/lib.rsdiffbeforeafterboth
--- a/runtime/unique/src/lib.rs
+++ b/runtime/unique/src/lib.rs
@@ -50,7 +50,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 927030,
+	spec_version: 929030,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 2,
modifiedtests/scripts/readyness.jsdiffbeforeafterboth
--- a/tests/scripts/readyness.js
+++ b/tests/scripts/readyness.js
@@ -25,6 +25,7 @@
     }
     catch(e) {
       await sleep(10000);
+      console.log(e);
     }
   }
 }
addedtests/src/eth/proxyContract.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/eth/proxyContract.test.ts
@@ -0,0 +1,152 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+import {IKeyringPair} from '@polkadot/types/types';
+
+import {itEth, expect, usingEthPlaygrounds, EthUniqueHelper} from './util';
+
+describe('EVM payable contracts', () => {
+  let donor: IKeyringPair;
+
+  before(async function() {
+    await usingEthPlaygrounds(async (_, privateKey) => {
+      donor = await privateKey({filename: __filename});
+    });
+  });
+
+  itEth('Update proxy contract', async({helper}) => {
+    const deployer = await helper.eth.createAccountWithBalance(donor);
+    const caller = await helper.eth.createAccountWithBalance(donor);
+    const proxyContract = await deployProxyContract(helper, deployer);
+    
+    const realContractV1 = await deployRealContractV1(helper, deployer);
+    const realContractV1proxy = new helper.web3!.eth.Contract(realContractV1.options.jsonInterface, proxyContract.options.address, {from: caller, gas: helper.eth.DEFAULT_GAS});
+    await proxyContract.methods.updateVersion(realContractV1.options.address).send();
+    
+    await realContractV1proxy.methods.flip().send();
+    await realContractV1proxy.methods.flip().send();
+    await realContractV1proxy.methods.flip().send();
+    const value1 = await realContractV1proxy.methods.getValue().call();
+    const flipCount1 = await realContractV1proxy.methods.getFlipCount().call();
+    expect(flipCount1).to.be.equal('3');
+    expect(value1).to.be.equal(true);
+
+    const realContractV2 = await deployRealContractV2(helper, deployer);
+    const realContractV2proxy = new helper.web3!.eth.Contract(realContractV2.options.jsonInterface, proxyContract.options.address, {from: caller, gas: helper.eth.DEFAULT_GAS});
+    await proxyContract.methods.updateVersion(realContractV2.options.address).send();
+
+    await realContractV2proxy.methods.flip().send();
+    await realContractV2proxy.methods.flip().send();
+    await realContractV2proxy.methods.setStep(5).send();
+    await realContractV2proxy.methods.increaseFlipCount().send();
+    const value2 = await realContractV2proxy.methods.getValue().call();
+    const flipCount2 = await realContractV2proxy.methods.getFlipCount().call();
+    expect(value2).to.be.equal(true);
+    expect(flipCount2).to.be.equal('6');
+  });
+
+  async function deployProxyContract(helper: EthUniqueHelper, deployer: string) {
+    return await helper.ethContract.deployByCode(deployer, 'ProxyContract', `
+      // SPDX-License-Identifier: UNLICENSED
+      pragma solidity ^0.8.6;
+      
+      contract ProxyContract {
+        event NewEvent(uint data);
+        receive() external payable {}
+        bytes32 private constant implementationSlot =  bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1);
+        constructor() {}
+        function updateVersion(address newContractAddress) external {
+          bytes32 slot = implementationSlot;
+          assembly {
+            sstore(slot, newContractAddress)
+          }
+        }
+        fallback() external {
+          bytes32 slot = implementationSlot;
+          assembly {
+            let ptr := mload(0x40)
+            let contractAddress := sload(slot)
+            
+            calldatacopy(ptr, 0, calldatasize())
+            
+            let result := delegatecall(gas(), contractAddress, ptr, calldatasize(), 0, 0)
+            let size := returndatasize()
+            
+            returndatacopy(ptr, 0, size)
+            
+            switch result
+            case 0 { revert(ptr, size) }
+            default { return(ptr, size) }
+          }
+        }
+      }
+      
+      interface RealContract {
+        function flip() external;
+        function getValue() external view returns (bool);
+        function getFlipCount() external view returns (uint);
+      }`);
+  }
+
+  async function deployRealContractV1(helper: EthUniqueHelper, deployer: string) {
+    return await helper.ethContract.deployByCode(deployer, 'RealContractV1', `
+      // SPDX-License-Identifier: UNLICENSED
+      pragma solidity ^0.8.6;
+  
+      contract RealContractV1 {
+        bool value = false;
+        uint flipCount = 0;
+        function flip() external {
+          value = !value;
+          flipCount++;
+        }
+        function getValue() external view returns (bool) {
+          return value;
+        }
+        function getFlipCount() external view returns (uint) {
+          return flipCount;
+        }
+      }`);
+  }
+
+  async function deployRealContractV2(helper: EthUniqueHelper, deployer: string) {
+    return await helper.ethContract.deployByCode(deployer, 'RealContractV2', `
+      // SPDX-License-Identifier: UNLICENSED
+      pragma solidity ^0.8.6;
+  
+      contract RealContractV2 {
+        bool value = false;
+        uint flipCount = 10;
+        uint step = 1;
+        function flip() external {
+          value = !value;
+          flipCount--;
+        }
+        function setStep(uint value) external {
+          step = value;
+        }
+        function increaseFlipCount() external {
+          flipCount = flipCount + step;
+        }
+        function getValue() external view returns (bool) {
+          return value;
+        }
+        function getFlipCount() external view returns (uint) {
+          return flipCount;
+        }
+      }`);
+  }
+});
\ No newline at end of file