From c8aa4e5d2d9c852e33513e98082139bc1c3e610c Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 29 Jun 2026 23:11:51 +0900 Subject: [PATCH] Handle compare-behind update branch cases --- scripts/ci/pr_review_merge_scheduler.py | 3 ++- tests/test_pr_review_merge_scheduler.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/scripts/ci/pr_review_merge_scheduler.py b/scripts/ci/pr_review_merge_scheduler.py index 3e54a1ddf..d79b99cbf 100644 --- a/scripts/ci/pr_review_merge_scheduler.py +++ b/scripts/ci/pr_review_merge_scheduler.py @@ -478,7 +478,8 @@ def compare_behind_by(pr: dict[str, Any]) -> int: def branch_outdated_by_base(pr: dict[str, Any], merge_state: str) -> int: """Return known count of base commits missing from the PR head.""" - if merge_state == "BEHIND": + compare_status = (pr.get("compareStatus") or "").lower() + if merge_state == "BEHIND" or compare_status == "behind": return max(1, compare_behind_by(pr)) return compare_behind_by(pr) diff --git a/tests/test_pr_review_merge_scheduler.py b/tests/test_pr_review_merge_scheduler.py index e1e198496..cbab58f43 100644 --- a/tests/test_pr_review_merge_scheduler.py +++ b/tests/test_pr_review_merge_scheduler.py @@ -1199,6 +1199,27 @@ def test_inspect_pr_blocks_and_waits_for_policy_states(monkeypatch): assert "existing auto-merge request remains queued" in blocked_without_opencode_decision.reason assert called == [("owner/repo", 1, True)] called.clear() + blocked_compare_behind_auto = make_pr( + mergeStateStatus="BLOCKED", + restMergeableState="BLOCKED", + compareStatus="behind", + autoMergeRequest={"enabledAt": "now"}, + statusCheckRollup={ + "contexts": { + "nodes": [ + {"__typename": "CheckRun", "name": "strix", "conclusion": "FAILURE"}, + {"__typename": "CheckRun", "name": "coverage-evidence", "conclusion": "FAILURE"}, + ], + } + }, + ) + blocked_compare_behind_decision = inspect(blocked_compare_behind_auto) + assert blocked_compare_behind_decision.action == "update_branch" + assert "auto-merge already enabled" in blocked_compare_behind_decision.reason + assert "base branch is 1 commit(s) ahead" in blocked_compare_behind_decision.reason + assert "existing auto-merge request remains queued" in blocked_compare_behind_decision.reason + assert called == [("owner/repo", 1, True)] + called.clear() disabled.clear() assert ( inspect(blocked_failed_behind_auto_without_opencode_approval, update_branches=False).reason