12345name: try-runtime67on:8 workflow_call:9 workflow_dispatch:101112jobs:13 prepare-execution-marix:1415 name: Prepare execution matrix1617 runs-on: [ self-hosted-ci ]18 outputs:19 matrix: ${{ steps.create_matrix.outputs.matrix }}2021 steps:2223 - name: Clean Workspace24 uses: AutoModality/action-clean@v1.1.02526 27 - uses: actions/checkout@v4.1.728 with:29 ref: ${{ github.head_ref }} 3031 - name: Read .env file32 uses: xom9ikk/dotenv@v2.3.03334 - name: Create Execution matrix35 uses: CertainLach/create-matrix-action@v436 id: create_matrix37 with:38 matrix: |39 network {opal}, replica_from_address {${{ env.OPAL_REPLICA_FROM }}}40 network {quartz}, replica_from_address {${{ env.QUARTZ_REPLICA_FROM }}}41 network {unique}, replica_from_address {${{ env.UNIQUE_REPLICA_FROM }}}4243 try-runtime-build:44 needs: prepare-execution-marix4546 47 runs-on: [ self-hosted-ci ]48 continue-on-error: true 4950 name: ${{ matrix.network }}-try-runtime-build51 strategy:52 matrix:53 include: ${{fromJson(needs.prepare-execution-marix.outputs.matrix)}}5455 steps:5657 - name: Clean Workspace58 uses: AutoModality/action-clean@v1.1.05960 61 - uses: actions/checkout@v4.1.762 with:63 ref: ${{ github.head_ref }} 6465 66 - name: Prepare SHA67 uses: ./.github/actions/prepare6869 - name: Read .env file70 uses: xom9ikk/dotenv@v2.3.07172 - name: Log in to Docker Hub73 uses: docker/login-action@v3.2.074 with:75 username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}76 password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}7778 79 - name: Generate ENV related extend Dockerfile file80 uses: cuchi/jinja2-action@v1.2.081 with:82 template: .docker/Dockerfile-try-runtime.j283 output_file: .docker/Dockerfile-try-runtime.${{ matrix.network }}.yml84 variables: |85 NETWORK=${{ matrix.network }}86 REPLICA_FROM=${{ matrix.replica_from_address }}8788 - name: Show build Dockerfile89 run: cat .docker/Dockerfile-try-runtime.${{ matrix.network }}.yml9091 - name: Run find-and-replace to remove slashes from branch name92 uses: mad9000/actions-find-and-replace-string@593 id: branchname94 with:95 source: ${{ github.head_ref }}96 find: '/'97 replace: '-'9899 - name: Set build SHA100 shell: bash101 run: |102 echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV103104 - name: Build the stack105 run: cd .docker/ && docker build --no-cache --file ./Dockerfile-try-runtime.${{ matrix.network }}.yml --tag uniquenetwork/ci-tryruntime-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-$BUILD_SHA ../106107 - name: Push docker image version108 run: docker push uniquenetwork/ci-tryruntime-local:${{ matrix.network }}-${{ steps.branchname.outputs.value }}-$BUILD_SHA109110 - name: Remove builder cache111 if: always() 112 run: |113 docker builder prune -f114 docker system prune -f115116117 try-runtime-tests:118 needs: [prepare-execution-marix, try-runtime-build]119 120 runs-on: [medium]121122 timeout-minutes: 600123124 name: ${{ matrix.network }}-try-runtime-tests125126 continue-on-error: true 127128 strategy:129 matrix:130 include: ${{fromJson(needs.prepare-execution-marix.outputs.matrix)}}131132 steps:133 - name: Skip if pull request is in Draft134 if: github.event.pull_request.draft == true135 run: exit 1136137 - name: Clean Workspace138 uses: AutoModality/action-clean@v1.1.0139140 141 - uses: actions/checkout@v4.1.7142 with:143 ref: ${{ github.head_ref }} 144145 - name: Prepare146 uses: ./.github/actions/prepare147148 - name: Set build SHA149 shell: bash150 run: |151 echo "BUILD_SHA=${LAST_COMMIT_SHA:0:8}" >> $GITHUB_ENV152153 - name: Run find-and-replace to remove slashes from branch name154 uses: mad9000/actions-find-and-replace-string@5155 id: branchname156 with:157 source: ${{ github.head_ref }}158 find: '/'159 replace: '-'160161 - name: Read .env file162 uses: xom9ikk/dotenv@v2.3.0163164 - name: Generate ENV related extend file for docker-compose165 uses: cuchi/jinja2-action@v1.2.0166 with:167 template: .docker/docker-compose.try-runtime.j2168 output_file: .docker/docker-compose.try-runtime.${{ matrix.network }}.yml169 variables: |170 NETWORK=${{ matrix.network }}171 BUILD_TAG=${{ steps.branchname.outputs.value }}-$BUILD_SHA172173 - name: Show build configuration174 run: cat .docker/docker-compose.try-runtime.${{ matrix.network }}.yml175176 - uses: actions/setup-node@v4.0.2177 with:178 node-version: 20179180 - name: Log in to Docker Hub181 uses: docker/login-action@v3.2.0182 with:183 username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}184 password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}185186 - name: Build the stack187 run: docker compose -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" up -d --remove-orphans --force-recreate --timeout 300188189 - name: Check if docker logs consist logs related to Runtime Upgrade testing.190 if: success()191 run: |192 counter=300193 counter_life=0194 function check_container_status {195 docker inspect -f {{.State.Running}} try-runtime196 }197 function do_docker_logs {198 docker logs --details try-runtime 2>&1 | grep -i 'TryRuntime_on_runtime_upgrade executed without errors. Consumed'199 }200 function is_started {201 if [ "$(check_container_status)" == "true" ]; then202 echo "Container: try-runtime RUNNING";203 echo "Check Docker logs"204 DOCKER_LOGS=$(do_docker_logs)205 if [[ -n ${DOCKER_LOGS} ]]; then206 echo "TryRuntime_on_runtime_upgrade executed without errors."207 return 0208 else209 echo "Message not found in logs output, repeating..."210 return 1211 fi212 else213 (( counter_life++ ))214 echo "Container try-runtime not RUNNING" $counter_life "time"215 return 1216 fi217 }218219 while ! is_started; do220 echo "Waiting for special message in log files "221 sleep 30s222 counter=$(( $counter - 1 ))223 echo "Counter: $counter"224 if [ "$counter" -gt "0" ] && [ "$counter_life" -lt "3" ]; then225 continue226 else227 echo "Counter reached zero, yet upgrade is not finished correctly or Container try-runtime is not RUNNING"228 exit 1229 fi230 done231 echo "Halting script"232 exit 0233 shell: bash234235 - name: Collect Docker Logs236 if: success() || failure()237 uses: jwalton/gh-docker-logs@v2.2.1238 with:239 dest: './try-runtime-logs.${{ matrix.network }}'240241 - name: Show docker logs242 if: success() || failure()243 run: cat './try-runtime-logs.${{ matrix.network }}/try-runtime.log'244245 - name: Stop running containers246 if: always() 247 run: docker compose -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" down248249 - name: Remove builder cache250 if: always() 251 run: |252 docker builder prune -f -a253 docker system prune -f254 docker image prune -f -a