You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by sc...@apache.org on 2026/09/11 22:54:18 UTC

(iceberg-rust) branch main updated: ci: enable GitHub merge queue with required CI gates (#3195)

This is an automated email from the ASF dual-hosted git repository.

CTTY pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-rust.git


The following commit(s) were added to refs/heads/main by this push:
     new 100804c71 ci: enable GitHub merge queue with required CI gates (#3195)
100804c71 is described below

commit 100804c7148b65b751d8d39ef671f7306cbaaedf
Author: Kevin Liu <ke...@users.noreply.github.com>
AuthorDate: Fri Sep 11 15:54:12 2026 -0700

    ci: enable GitHub merge queue with required CI gates (#3195)
    
    Closes #3140.
    
    Mirror apache/iceberg-python#3832: define the required checks in
    .asf.yaml, add an ASF-managed Merge Queue ruleset (one-at-a-time squash
    merges on main), enable auto-merge, and make every required workflow run
    on merge_group without pull_request path or branch filters so its check
    always reports. CI and Bindings Python CI gain an always-run aggregate
    job (ci-required, bindings-python-ci-required) so matrix job names do
    not have to be enumerated as required contexts.
    
    Co-authored-by: Claude Fable 5.1 <no...@anthropic.com>
---
 .asf.yaml                                 | 40 +++++++++++++++++++++++++++++--
 .github/workflows/asf-allowlist-check.yml |  1 +
 .github/workflows/bindings_python_ci.yml  | 28 ++++++++++++----------
 .github/workflows/ci.yml                  | 28 ++++++++++++----------
 .github/workflows/codeql.yml              |  2 +-
 .github/workflows/public-api.yml          |  3 +--
 .github/workflows/zizmor.yml              |  2 +-
 7 files changed, 72 insertions(+), 32 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
index 1b32ea013..974c6b512 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -36,15 +36,51 @@ github:
   protected_branches:
     main:
       required_status_checks:
-        # strict means "Require branches to be up to date before merging".
-        strict: true
+        # Check context names (job names, not workflow files) that Merge Queue
+        # waits for. Every producer workflow must run on both `pull_request`
+        # and `merge_group`, without path filters, so each context always
+        # reports. `strict` is omitted: Merge Queue validates every entry
+        # against an up-to-date main, and ASF defaults it to false.
+        contexts:
+          # Repository policy and security checks.
+          - Analyze Actions
+          - Run zizmor 🌈
+          - asf-allowlist-check
+
+          # Rust workflow gates.
+          - ci-required
+          - check-public-api
+
+          # Python bindings workflow gates.
+          - bindings-python-ci-required
 
       required_pull_request_reviews:
         required_approving_review_count: 1
         dismiss_stale_reviews: false
 
       required_linear_history: true
+  rulesets:
+    - name: Merge Queue
+      target: branch
+      enforcement: active
+      conditions:
+        ref_name:
+          include:
+            - "~DEFAULT_BRANCH"
+          exclude: []
+      rules:
+        - type: merge_queue
+          parameters:
+            check_response_timeout_minutes: 90
+            grouping_strategy: ALLGREEN
+            max_entries_to_build: 1
+            max_entries_to_merge: 1
+            merge_method: SQUASH
+            min_entries_to_merge: 1
+            min_entries_to_merge_wait_minutes: 0
   pull_requests:
+    # allow pull requests to merge automatically once all requirements are met
+    allow_auto_merge: true
     # auto-delete head branches after being merged
     del_branch_on_merge: true
   features:
diff --git a/.github/workflows/asf-allowlist-check.yml b/.github/workflows/asf-allowlist-check.yml
index 5380bcfd1..446a247cd 100644
--- a/.github/workflows/asf-allowlist-check.yml
+++ b/.github/workflows/asf-allowlist-check.yml
@@ -25,6 +25,7 @@ name: "ASF Allowlist Check"
 
 on:
   pull_request:
+  merge_group:
   push:
     branches:
       - main
diff --git a/.github/workflows/bindings_python_ci.yml b/.github/workflows/bindings_python_ci.yml
index 375521d0f..24ba728d6 100644
--- a/.github/workflows/bindings_python_ci.yml
+++ b/.github/workflows/bindings_python_ci.yml
@@ -22,19 +22,7 @@ on:
     branches:
       - main
   pull_request:
-    paths:
-      - '**'                                       # Include all files and directories in the repository by default.
-      - '!.github/ISSUE_TEMPLATE/**'               # Exclude files and directories that don't impact tests or code like templates, metadata, and documentation.
-      - '!dev/release/**'
-      - '!website/**'
-      - '!.asf.yml'
-      - '!.gitattributes'
-      - '!.gitignore'
-      - '!CONTRIBUTING.md'
-      - '!CHANGELOG.md'
-      - '!LICENSE'
-      - '!NOTICE'
-      - '!README.md'
+  merge_group:
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
@@ -121,3 +109,17 @@ jobs:
           HF_DATASET: ${{ secrets.HF_DATASET }}
         run: |
           make test
+
+  bindings-python-ci-required:
+    if: ${{ always() }}
+    needs: [check-python, test]
+    runs-on: ubuntu-slim
+    steps:
+      - name: Verify Bindings Python CI jobs succeeded
+        env:
+          RESULTS: ${{ join(needs.*.result, ' ') }}
+        run: |
+          read -ra results <<< "$RESULTS"
+          for result in "${results[@]}"; do
+            test "$result" = "success"
+          done
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 5bb2cc178..f3de07ff7 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -22,19 +22,7 @@ on:
     branches:
       - main
   pull_request:
-    paths:
-      # Artifacts that must be included in releases, such as LICENSE and NOTICE, are deliberately not excluded so we can verify they will be bundled.
-      # Include all files and directories, then filter out files and directories that don't impact code, tests, or release artifacts.
-      - '**'
-      - '!.github/ISSUE_TEMPLATE/**'
-      - '!dev/release/**'
-      - '!website/**'
-      - '!.asf.yml'
-      - '!.gitattributes'
-      - '!.gitignore'
-      - '!CONTRIBUTING.md'
-      - '!CHANGELOG.md'
-      - '!README.md'
+  merge_group:
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
@@ -280,3 +268,17 @@ jobs:
         uses: $/.github/actions/setup-builder
       - name: Check MSRV
         run: make check-msrv
+
+  ci-required:
+    if: ${{ always() }}
+    needs: [lint, clippy, build, check_standalone, build_with_no_default_features, tests, msrv]
+    runs-on: ubuntu-slim
+    steps:
+      - name: Verify CI jobs succeeded
+        env:
+          RESULTS: ${{ join(needs.*.result, ' ') }}
+        run: |
+          read -ra results <<< "$RESULTS"
+          for result in "${results[@]}"; do
+            test "$result" = "success"
+          done
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 7cea64aea..efd720e53 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -23,7 +23,7 @@ on:
   push:
     branches: [ "main" ]
   pull_request:
-    branches: [ "main" ]
+  merge_group:
   schedule:
     - cron: '16 4 * * 1'
 
diff --git a/.github/workflows/public-api.yml b/.github/workflows/public-api.yml
index a3af719a4..360324759 100644
--- a/.github/workflows/public-api.yml
+++ b/.github/workflows/public-api.yml
@@ -22,8 +22,7 @@ on:
     branches:
       - main
   pull_request:
-    paths:
-      - 'crates/**'
+  merge_group:
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml
index cd4865d9e..bbc35f71f 100644
--- a/.github/workflows/zizmor.yml
+++ b/.github/workflows/zizmor.yml
@@ -23,7 +23,7 @@ on:
   push:
     branches: ["main"]
   pull_request:
-    branches: ["**"]
+  merge_group:
 
 permissions: {}