ci: enable GitHub merge queue with required CI gates - #3195
Conversation
Closes apache#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 <noreply@anthropic.com>
kevinjqliu
left a comment
There was a problem hiding this comment.
this pr changes .asf.yaml which will trigger asf infra to provision merge queue after the pr is merged
|
|
||
| on: | ||
| pull_request: | ||
| merge_group: |
There was a problem hiding this comment.
allows this workflow to run in merge queue
| branches: | ||
| - main | ||
| pull_request: | ||
| paths: |
There was a problem hiding this comment.
we need to get rid of all paths: filters, otherwise merge queue might be blocked.
i think this is a good tradeoff in order to enable merge queue. and we can look at optimizations at a later time
| run: | | ||
| make test | ||
|
|
||
| bindings-python-ci-required: |
There was a problem hiding this comment.
add this so we dont need to add all the checks to the contexts: block in .asf.yaml and instead just reference this one check by name.
otherwise we'd have to keep them in sync
There was a problem hiding this comment.
🔵 Needs a closer look
It changes repository-wide merge/branch-protection enforcement and required CI gating, so a human should confirm the new required contexts and merge queue behavior won’t block contributions unexpectedly.
Pull request overview
This PR enables GitHub Merge Queue for the main branch by defining required status check contexts in .asf.yaml, adding a merge-queue ruleset, and ensuring the CI workflows that produce those contexts run on merge_group events without being skipped by path/branch filters.
Changes:
- Configure branch protection required check contexts and a Merge Queue ruleset in
.asf.yaml(including enabling auto-merge). - Update required GitHub Actions workflows to run on
merge_groupin addition to existing triggers. - Add “aggregate” required-check jobs (
ci-required,bindings-python-ci-required) to avoid having to enumerate matrix job names in branch protection.
File summaries
| File | Description |
|---|---|
.asf.yaml |
Defines required status check contexts for main and adds an active Merge Queue ruleset plus auto-merge enablement. |
.github/workflows/ci.yml |
Adds merge_group trigger and introduces ci-required aggregate gate over the core Rust CI jobs. |
.github/workflows/bindings_python_ci.yml |
Adds merge_group trigger and introduces bindings-python-ci-required aggregate gate for the Python bindings CI. |
.github/workflows/public-api.yml |
Ensures the Public API check runs for merge queue entries via merge_group. |
.github/workflows/codeql.yml |
Ensures the “Analyze Actions” CodeQL job runs for merge queue entries via merge_group. |
.github/workflows/zizmor.yml |
Ensures the “Run zizmor 🌈” job runs for merge queue entries via merge_group. |
.github/workflows/asf-allowlist-check.yml |
Ensures the ASF allowlist checker runs for merge queue entries via merge_group. |
Review details
- Files reviewed: 7/7 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Which issue does this PR close?
What changes are included in this PR?
Enable GitHub merge queue, same setup as pyiceberg: apache/iceberg-python#3815 (auto-merge) and apache/iceberg-python#3832 (merge queue + required checks).
.asf.yaml: required check contexts,Merge Queueruleset (squash, one at a time),allow_auto_merge. Droppedstrictsince the queue already tests against latestmain.merge_group.pull_requestpath/branch filters from required workflows. A skipped workflow never reports its check, which blocks the PR and the queue entry.ci-requiredandbindings-python-ci-requiredaggregate jobs so we don't have to list matrix job names in.asf.yaml.Not required:
auditandwebsite.After this lands, open PRs need a push or close/reopen to pick up the new checks.
Are these changes tested?
Checked that every required context maps to a job that runs on both
pull_requestandmerge_group, and that the aggregateneedslists cover every job. actionlint and zizmor are clean. The ruleset only takes effect once this is onmain.AI Disclosure
Written with Claude Code, reviewed by me.