From 5b0622bc4d0cf5f0f57904874ea90eb08de79c52 Mon Sep 17 00:00:00 2001
From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com>
Date: Wed, 15 Nov 2023 14:28:32 +0100
Subject: [PATCH] [CI] Prepare CI for Merge Queues (#2308)

PR prepares CI to the GitHub Merge Queues. All github actions that were
running in PR adjusted so they can run in the merge queues. Zombienet
jobs will do nothing during PRs but they will run during merge queues.

Jobs that will be skipped during PR:
 - all zombienet jobs
 - all publish docker jobs

Jobs that will be skipped during merge queue:
 - check-labels
 - check-prdoc
 - pr-custom-review
 - review trigger

cc https://github.com/paritytech/ci_cd/issues/862
---
 .github/workflows/check-labels.yml       |  4 ++++
 .github/workflows/check-licenses.yml     |  1 +
 .github/workflows/check-links.yml        |  1 +
 .github/workflows/check-markdown.yml     |  5 +++--
 .github/workflows/check-prdoc.yml        |  4 ++++
 .github/workflows/check-publish.yml      |  1 +
 .github/workflows/fmt-check.yml          |  1 +
 .github/workflows/gitspiegel-trigger.yml |  1 +
 .github/workflows/pr-custom-review.yml   |  4 ++++
 .github/workflows/review-trigger.yml     |  6 +++++-
 .gitlab-ci.yml                           |  8 +++++++-
 .gitlab/pipeline/publish.yml             |  4 ++--
 .gitlab/pipeline/zombienet/cumulus.yml   |  2 ++
 .gitlab/pipeline/zombienet/polkadot.yml  | 18 +++++++++++++-----
 .gitlab/pipeline/zombienet/substrate.yml |  2 ++
 15 files changed, 51 insertions(+), 11 deletions(-)

diff --git a/.github/workflows/check-labels.yml b/.github/workflows/check-labels.yml
index 83b52e82313..97562f0da09 100644
--- a/.github/workflows/check-labels.yml
+++ b/.github/workflows/check-labels.yml
@@ -3,11 +3,15 @@ name: Check labels
 on:
   pull_request:
     types: [labeled, opened, synchronize, unlabeled]
+  merge_group:
 
 jobs:
   check-labels:
     runs-on: ubuntu-latest
     steps:
+      - name: Skip merge queue
+        if: ${{ contains(github.ref, 'gh-readonly-queue') }}
+        run: exit 0
       - name: Pull image
         env:
           IMAGE: paritytech/ruled_labels:0.4.0
diff --git a/.github/workflows/check-licenses.yml b/.github/workflows/check-licenses.yml
index 50dd10a6d3c..a66e3a53998 100644
--- a/.github/workflows/check-licenses.yml
+++ b/.github/workflows/check-licenses.yml
@@ -2,6 +2,7 @@ name: Check licenses
 
 on:
   pull_request:
+  merge_group:
 
 permissions:
   packages: read
diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml
index 3ed6ba84b82..0932d38c9ad 100644
--- a/.github/workflows/check-links.yml
+++ b/.github/workflows/check-links.yml
@@ -8,6 +8,7 @@ on:
       - ".github/workflows/check-links.yml"
       - ".config/lychee.toml"
     types: [opened, synchronize, reopened, ready_for_review]
+  merge_group:
 
 permissions:
   packages: read
diff --git a/.github/workflows/check-markdown.yml b/.github/workflows/check-markdown.yml
index 05b5d898d67..2108f942090 100644
--- a/.github/workflows/check-markdown.yml
+++ b/.github/workflows/check-markdown.yml
@@ -3,6 +3,7 @@ name: Check Markdown
 on:
   pull_request:
     types: [opened, synchronize, reopened, ready_for_review]
+  merge_group:
 
 permissions:
   packages: read
@@ -23,8 +24,8 @@ jobs:
 
       - name: Install tooling
         run: |
-            npm install -g markdownlint-cli
-            markdownlint --version
+          npm install -g markdownlint-cli
+          markdownlint --version
 
       - name: Check Markdown
         env:
diff --git a/.github/workflows/check-prdoc.yml b/.github/workflows/check-prdoc.yml
index 690f7a3f133..54e4d2b9680 100644
--- a/.github/workflows/check-prdoc.yml
+++ b/.github/workflows/check-prdoc.yml
@@ -3,6 +3,7 @@ name: Check PRdoc
 on:
   pull_request:
     types: [labeled, opened, synchronize, unlabeled]
+  merge_group:
 
 env:
   IMAGE: paritytech/prdoc:v0.0.5
@@ -17,6 +18,9 @@ jobs:
   check-prdoc:
     runs-on: ubuntu-latest
     steps:
+      - name: Skip merge queue
+        if: ${{ contains(github.ref, 'gh-readonly-queue') }}
+        run: exit 0
       - name: Pull image
         run: |
           echo "Pulling $IMAGE"
diff --git a/.github/workflows/check-publish.yml b/.github/workflows/check-publish.yml
index 9ab47dba51b..c0d2b889381 100644
--- a/.github/workflows/check-publish.yml
+++ b/.github/workflows/check-publish.yml
@@ -6,6 +6,7 @@ on:
       - master
   pull_request:
     types: [opened, synchronize, reopened, ready_for_review]
+  merge_group:
 
 jobs:
   check-publish:
diff --git a/.github/workflows/fmt-check.yml b/.github/workflows/fmt-check.yml
index 7ca4413bb05..e4d39acabfd 100644
--- a/.github/workflows/fmt-check.yml
+++ b/.github/workflows/fmt-check.yml
@@ -6,6 +6,7 @@ on:
       - master
   pull_request:
     types: [opened, synchronize, reopened, ready_for_review]
+  merge_group:
 
 jobs:
   quick_check:
diff --git a/.github/workflows/gitspiegel-trigger.yml b/.github/workflows/gitspiegel-trigger.yml
index dce3aaf2fec..59347fad6d6 100644
--- a/.github/workflows/gitspiegel-trigger.yml
+++ b/.github/workflows/gitspiegel-trigger.yml
@@ -13,6 +13,7 @@ on:
       - unlocked
       - ready_for_review
       - reopened
+  merge_group:
 
 jobs:
   sync:
diff --git a/.github/workflows/pr-custom-review.yml b/.github/workflows/pr-custom-review.yml
index b15d20c696f..4e0809cbfdc 100644
--- a/.github/workflows/pr-custom-review.yml
+++ b/.github/workflows/pr-custom-review.yml
@@ -14,11 +14,15 @@ on:
       - ready_for_review
       - converted_to_draft
   pull_request_review:
+  merge_group:
 
 jobs:
   pr-custom-review:
     runs-on: ubuntu-latest
     steps:
+      - name: Skip merge queue
+        if: ${{ contains(github.ref, 'gh-readonly-queue') }}
+        run: exit 0
       - name: Skip if pull request is in Draft
         # `if: github.event.pull_request.draft == true` should be kept here, at
         # the step level, rather than at the job level. The latter is not
diff --git a/.github/workflows/review-trigger.yml b/.github/workflows/review-trigger.yml
index 2810ea356e6..e5fcb434fd3 100644
--- a/.github/workflows/review-trigger.yml
+++ b/.github/workflows/review-trigger.yml
@@ -1,6 +1,6 @@
 name: Review-Trigger
 
-on: 
+on:
   pull_request_target:
     types:
       - opened
@@ -10,6 +10,7 @@ on:
       - review_request_removed
       - ready_for_review
   pull_request_review:
+  merge_group:
 
 jobs:
   trigger-review-bot:
@@ -18,6 +19,9 @@ jobs:
     runs-on: ubuntu-latest
     name: trigger review bot
     steps:
+      - name: Skip merge queue
+        if: ${{ contains(github.ref, 'gh-readonly-queue') }}
+        run: exit 0
       - name: Get PR number
         env:
           PR_NUMBER: ${{ github.event.pull_request.number }}
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f507afda23e..1dc483004f2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -31,7 +31,7 @@ variables:
   NEXTEST_FAILURE_OUTPUT: immediate-final
   NEXTEST_SUCCESS_OUTPUT: final
   ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.79"
-  DOCKER_IMAGES_VERSION: "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}"
+  DOCKER_IMAGES_VERSION: "${CI_COMMIT_SHA}"
 
 default:
   retry:
@@ -136,11 +136,13 @@ default:
     - if: $CI_PIPELINE_SOURCE == "schedule"
     - if: $CI_COMMIT_REF_NAME == "master"
     - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
+    - if: $CI_COMMIT_REF_NAME =~ /^gh-readonly-queue.*$/ # merge queues
     - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
 
 .test-pr-refs:
   rules:
     - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
+    - if: $CI_COMMIT_REF_NAME =~ /^gh-readonly-queue.*$/ # merge queues
 
 # handle the specific case where benches could store incorrect bench data because of the downstream staging runs
 # exclude cargo-check-benches from such runs
@@ -152,6 +154,7 @@ default:
     - if: $CI_PIPELINE_SOURCE == "schedule"
     - if: $CI_COMMIT_REF_NAME == "master"
     - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
+    - if: $CI_COMMIT_REF_NAME =~ /^gh-readonly-queue.*$/ # merge queues
     - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
 
 .test-refs-no-trigger:
@@ -162,6 +165,7 @@ default:
     - if: $CI_PIPELINE_SOURCE == "schedule"
     - if: $CI_COMMIT_REF_NAME == "master"
     - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
+    - if: $CI_COMMIT_REF_NAME =~ /^gh-readonly-queue.*$/ # merge queues
     - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
     - if: $CI_COMMIT_REF_NAME =~ /^ci-release-.*$/
 
@@ -172,6 +176,7 @@ default:
     - if: $CI_PIPELINE_SOURCE == "web"
     - if: $CI_PIPELINE_SOURCE == "schedule"
     - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
+    - if: $CI_COMMIT_REF_NAME =~ /^gh-readonly-queue.*$/ # merge queues
 
 .publish-refs:
   rules:
@@ -192,6 +197,7 @@ default:
     - if: $CI_COMMIT_REF_NAME == "master"
     - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
     - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
+    - if: $CI_COMMIT_REF_NAME =~ /^gh-readonly-queue.*$/ # merge queues
 
 .zombienet-refs:
   extends: .build-refs
diff --git a/.gitlab/pipeline/publish.yml b/.gitlab/pipeline/publish.yml
index a03d407c040..f2308c334e0 100644
--- a/.gitlab/pipeline/publish.yml
+++ b/.gitlab/pipeline/publish.yml
@@ -71,8 +71,8 @@ publish-rustdoc:
     DOCKERFILE: "" # docker/path-to.Dockerfile
     IMAGE_NAME: "" # docker.io/paritypr/image_name
   script:
-    # - test "$PARITYPR_USER" -a "$PARITYPR_PASS" ||
-    #   ( echo "no docker credentials provided"; exit 1 )
+    # Exit if the job is not running in a merge queue
+    - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi
     - $BUILDAH_COMMAND build
       --format=docker
       --build-arg VCS_REF="${CI_COMMIT_SHA}"
diff --git a/.gitlab/pipeline/zombienet/cumulus.yml b/.gitlab/pipeline/zombienet/cumulus.yml
index 3f2c6f64fbf..c8a1df004e3 100644
--- a/.gitlab/pipeline/zombienet/cumulus.yml
+++ b/.gitlab/pipeline/zombienet/cumulus.yml
@@ -3,6 +3,8 @@
 
 .zombienet-before-script:
   before_script:
+    # Exit if the job is not merge queue
+    - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi
     - echo "Zombie-net Tests Config"
     - echo "${ZOMBIENET_IMAGE}"
     - echo "${POLKADOT_IMAGE}"
diff --git a/.gitlab/pipeline/zombienet/polkadot.yml b/.gitlab/pipeline/zombienet/polkadot.yml
index 8fc8b280bba..cc960557298 100644
--- a/.gitlab/pipeline/zombienet/polkadot.yml
+++ b/.gitlab/pipeline/zombienet/polkadot.yml
@@ -4,6 +4,8 @@
 # common settings for all zombienet jobs
 .zombienet-polkadot-common:
   before_script:
+    # Exit if the job is not merge queue
+    - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi
     - export BUILD_RELEASE_VERSION="$(cat ./artifacts/BUILD_RELEASE_VERSION)" # from build-linux-stable job
     - export DEBUG=zombie,zombie::network-node
     - export ZOMBIENET_INTEGRATION_TEST_IMAGE="${POLKADOT_IMAGE}":${PIPELINE_IMAGE_TAG}
@@ -12,12 +14,12 @@
     - export MALUS_IMAGE="${MALUS_IMAGE}":${PIPELINE_IMAGE_TAG}
     - IMAGE_AVAILABLE=$(curl -o /dev/null -w "%{http_code}" -I -L -s https://registry.hub.docker.com/v2/repositories/parity/polkadot/tags/${BUILD_RELEASE_VERSION})
     - if [ $IMAGE_AVAILABLE -eq 200 ]; then
-        export ZOMBIENET_INTEGRATION_TEST_SECONDARY_IMAGE="docker.io/parity/polkadot:${BUILD_RELEASE_VERSION}";
+      export ZOMBIENET_INTEGRATION_TEST_SECONDARY_IMAGE="docker.io/parity/polkadot:${BUILD_RELEASE_VERSION}";
       else
-        echo "Getting the image to use as SECONDARY, using ${BUILD_RELEASE_VERSION} as base";
-        VERSIONS=$(curl -L -s 'https://registry.hub.docker.com/v2/repositories/parity/polkadot/tags/' | jq -r '.results[].name'| grep -E "v[0-9]" |grep -vE "[0-9]-");
-        VERSION_TO_USE=$(echo "${BUILD_RELEASE_VERSION}\n$VERSIONS"|sort -r|grep -A1 "${BUILD_RELEASE_VERSION}"|tail -1);
-        export ZOMBIENET_INTEGRATION_TEST_SECONDARY_IMAGE="docker.io/parity/polkadot:${VERSION_TO_USE}";
+      echo "Getting the image to use as SECONDARY, using ${BUILD_RELEASE_VERSION} as base";
+      VERSIONS=$(curl -L -s 'https://registry.hub.docker.com/v2/repositories/parity/polkadot/tags/' | jq -r '.results[].name'| grep -E "v[0-9]" |grep -vE "[0-9]-");
+      VERSION_TO_USE=$(echo "${BUILD_RELEASE_VERSION}\n$VERSIONS"|sort -r|grep -A1 "${BUILD_RELEASE_VERSION}"|tail -1);
+      export ZOMBIENET_INTEGRATION_TEST_SECONDARY_IMAGE="docker.io/parity/polkadot:${VERSION_TO_USE}";
       fi
     - echo "Zombienet Tests Config"
     - echo "gh-dir ${GH_DIR}"
@@ -117,6 +119,8 @@ zombienet-polkadot-smoke-0001-parachains-smoke-test:
   extends:
     - .zombienet-polkadot-common
   before_script:
+    # Exit if the job is not merge queue
+    - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi
     - export ZOMBIENET_INTEGRATION_TEST_IMAGE="${POLKADOT_IMAGE}":${PIPELINE_IMAGE_TAG}
     - export COL_IMAGE="${COLANDER_IMAGE}":${PIPELINE_IMAGE_TAG}
     - echo "Zombienet Tests Config"
@@ -134,6 +138,8 @@ zombienet-polkadot-smoke-0002-parachains-parachains-upgrade-smoke:
   extends:
     - .zombienet-polkadot-common
   before_script:
+    # Exit if the job is not merge queue
+    - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi
     - export ZOMBIENET_INTEGRATION_TEST_IMAGE="${POLKADOT_IMAGE}":${PIPELINE_IMAGE_TAG}
     - export CUMULUS_IMAGE="docker.io/paritypr/polkadot-parachain-debug:${DOCKER_IMAGES_VERSION}"
     - echo "Zombienet Tests Config"
@@ -176,6 +182,8 @@ zombienet-polkadot-misc-0002-upgrade-node:
     - job: build-linux-stable
       artifacts: true
   before_script:
+    # Exit if the job is not merge queue
+    - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi
     - export ZOMBIENET_INTEGRATION_TEST_IMAGE="docker.io/parity/polkadot:latest"
     - echo "Overrided poladot image ${ZOMBIENET_INTEGRATION_TEST_IMAGE}"
     - export COL_IMAGE="${COLANDER_IMAGE}":${PIPELINE_IMAGE_TAG}
diff --git a/.gitlab/pipeline/zombienet/substrate.yml b/.gitlab/pipeline/zombienet/substrate.yml
index 9e14ebe0852..e627575a31a 100644
--- a/.gitlab/pipeline/zombienet/substrate.yml
+++ b/.gitlab/pipeline/zombienet/substrate.yml
@@ -4,6 +4,8 @@
 # common settings for all zombienet jobs
 .zombienet-substrate-common:
   before_script:
+    # Exit if the job is not merge queue
+    - if [[ $CI_COMMIT_REF_NAME != *"gh-readonly-queue"* ]]; then echo "I will run only in a merge queue"; exit 0; fi
     - echo "Zombienet Tests Config"
     - echo "${ZOMBIENET_IMAGE}"
     - echo "${GH_DIR}"
-- 
GitLab