diff --git a/.github/workflows/check-labels.yml b/.github/workflows/check-labels.yml
index 83b52e82313257affaea41eb66da44b164544116..97562f0da09569931582864bd764e6724900d619 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 50dd10a6d3c0ae9a11d548222e2f952468606e3f..a66e3a539984ac7e96728d9812b5cdb9b63e26d7 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 3ed6ba84b82f14e2b20cb4ab4553bcef4a11283d..0932d38c9adda4e170745deaecb0cb18bec67ed8 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 05b5d898d67122aec7c1ed05df20dac0cd4cb9c9..2108f94209003c55c0965eeedb09a1336e340242 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 690f7a3f1333366dea41944b5ae81bc74f12b761..54e4d2b9680e107e63559fbe578878e3ef45225b 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 9ab47dba51b1ca93829dc43a1494c78e47324559..c0d2b889381343a10f84a23d4ebf5fe6d10b4742 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 7ca4413bb0503093e1d7d34c08749d56cf832512..e4d39acabfd776b67ac37df28b0905b0517967ef 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 dce3aaf2feca59b26283c1a600440483eabfb892..59347fad6d6fc663861c3ca3ddd256239987ff55 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 b15d20c696fe83fd5c19cf834328458c8a5c6c3c..4e0809cbfdc3743e0b01f0e023ad74a88a28fed2 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 2810ea356e6e6c36568e5f5a7bf563c7580cafee..e5fcb434fd360bd229cbc9e18a5588c24afac2fb 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 f507afda23e304d341739841f0d16d5400097e58..1dc483004f24685cc0263c5741888dbf2b813be0 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 a03d407c040904a6a1a4fd7095052a039d0019e0..f2308c334e0cd17451fa7a2702e42bc9556bc4ff 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 3f2c6f64fbfe120ae15bf394982d6dbdd29405b0..c8a1df004e34146ec361ad82748a3d1a232e5b21 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 8fc8b280bba8c11e614ed0a97946d7d0e76bce44..cc96055729812a494a169bbf24d0df4a861fee97 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 9e14ebe0852c362eda9ba13fb2d76c917b9c25a2..e627575a31ad20536d6b3c07ec333fbadea3898d 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}"