Skip to content

ci: run Reborn E2E in the merge queue with internal scope gating - #4830

Closed
serrrfirat wants to merge 1 commit into
mainfrom
claude/reborn-e2e-merge-queue
Closed

serrrfirat wants to merge 1 commit into
mainfrom
claude/reborn-e2e-merge-queue

Conversation

@serrrfirat

@serrrfirat serrrfirat commented Jun 12, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The merge queue currently runs zero Reborn E2E: reborn-e2e.yml has no merge_group trigger, so Reborn changes merge without the deterministic Rust contract gate or the gateway/WebUI v2 Playwright smoke running against the queued (post-rebase) state. This PR closes that gap.

Changes

  • Add merge_group trigger (checks_requested on main), matching reborn-tests.yml.

  • Replace the pull_request workflow-level paths: filter with an internal changes scope-detection job, for two reasons:

    • merge_group events ignore paths: filters entirely — a trigger-only change would run the full gate on every queue entry, including docs-only and legacy-only changes.
    • A path-filtered workflow never reports a status on non-matching PRs, which makes its check impossible to require in branch protection.

    The changes job classifies the PR/merge-group diff via scripts/ci/classify-test-scope.sh (same pattern and same BASE_SHA/HEAD_SHA handling as reborn-tests.yml), plus a workflow-local has_e2e_harness output (tests/e2e/**) so Python harness changes outside the reborn-specific scenario files still trigger the smoke jobs — preserving the old path filter's coverage.

  • Roll-up job Reborn E2E now always reports: passes fast on docs-only / out-of-scope changes, fails if scope detection or any gated job fails. This makes it safe to add as a required status check.

  • push keeps its path filters (required checks don't apply to push); workflow_call (nightly, ci: retire dormant reborn-integration workflow, add Reborn suites to nightly deep CI #4829) and workflow_dispatch run the full gate via the non-diff branch of the changes job, unchanged in behavior.

Post-merge action required

Add Reborn E2E (the roll-up job) to the required status checks for main — the merge queue only waits on required checks, so without that settings change this workflow runs in the queue but does not block it.

Verification

  • python3 yaml.safe_load parses the workflow; triggers = workflow_call, workflow_dispatch, pull_request, merge_group, push; jobs = changes, rust-reborn, gateway-smoke, webui-v2-smoke, reborn-e2e.
  • Gating expressions and diff classification copied from the proven reborn-tests.yml changes job (already running on every PR and merge-queue entry).
  • Not verified live: an actual merge-queue dispatch of this workflow — observe the first queued PR after merge, or trigger workflow_dispatch for a full-gate dry run.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Chores
    • E2E test workflow now dynamically determines test scope based on changed files
    • Documentation-only changes skip E2E test execution
    • Updated merge group configuration for the main branch

Reborn E2E previously had no merge_group trigger, so the merge queue
shipped Reborn changes without the deterministic Rust gate or the
gateway/WebUI v2 smoke tests — a direct source of post-merge breakage
on the Reborn surface.

merge_group events ignore workflow-level paths: filters, and a
path-filtered workflow never reports a status on non-matching PRs
(which breaks required-check protection). So this replaces the
pull_request paths: filter with a changes job that classifies the diff
via scripts/ci/classify-test-scope.sh — the same pattern
reborn-tests.yml uses — plus a has_e2e_harness output so Python E2E
harness changes outside the reborn scenario files still trigger the
smoke jobs. The reborn-e2e roll-up now always reports, passing fast
when the change is out of scope, making it safe to mark as a required
status check for both PRs and the merge queue.

Push triggers keep their path filters; workflow_call (nightly) and
workflow_dispatch run the full gate unconditionally as before.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Note

Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported.

@github-actions github-actions Bot added the scope: ci CI/CD workflows label Jun 12, 2026
@coderabbitai

coderabbitai Bot commented Jun 12, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 5296ffa7-66e1-4843-928c-05eb03b8e559

📥 Commits

Reviewing files that changed from the base of the PR and between 3ee5041 and dcc57a7.

📒 Files selected for processing (1)
  • .github/workflows/reborn-e2e.yml

📝 Walkthrough

Walkthrough

Workflow refactors E2E scope gating from path-based pull-request filters to a new changes job that classifies diffs and gates execution. Three E2E jobs and the roll-up depend on computed scope outputs; roll-up adds early exits for docs-only and no-scope cases.

Changes

E2E Scope Gating via Changes Job

Layer / File(s) Summary
Trigger configuration and scope evaluation
.github/workflows/reborn-e2e.yml
Removes pull_request path filters and merge_group path filters, documenting that scope gating moves downstream. New changes job computes base/head diff, runs scripts/ci/classify-test-scope.sh, and emits docs_only, has_reborn_tests, and has_e2e_harness outputs. Wires rust-reborn job to depend on changes with conditional execution.
E2E job dependency and conditional gating
.github/workflows/reborn-e2e.yml
gateway-smoke and webui-v2-smoke jobs now depend on changes and use the same conditional: skip if docs_only is true or if neither has_reborn_tests nor has_e2e_harness is true.
Roll-up job early-exit logic
.github/workflows/reborn-e2e.yml
reborn-e2e roll-up job depends on changes and adds early validation: fails if changes did not succeed, exits successfully for docs-only changes, exits successfully when no scope is detected (before per-job result checks).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🔄 Scope gates no longer live at trigger time,
A changes-job computes what's prime,
Three E2E tests await the call,
Roll-up knows when to skip them all. ✨

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed Title follows Conventional Commits style (ci: scope) and clearly summarizes the main change: adding Reborn E2E to the merge queue with internal scope gating.
Description check ✅ Passed Description covers summary, change rationale, verification performed, and post-merge requirements. Change Type (CI/Infrastructure) and Review Track (C) are missing from the template sections, but the content is substantive and complete.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added size: M 50-199 changed lines risk: medium Business logic, config, or moderate-risk modules contributor: core 20+ merged PRs labels Jun 12, 2026
@serrrfirat serrrfirat closed this Jun 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

contributor: core 20+ merged PRs risk: medium Business logic, config, or moderate-risk modules scope: ci CI/CD workflows size: M 50-199 changed lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant