From cf0f4dce72a8799e8afe5307be7470caf6936dba Mon Sep 17 00:00:00 2001 From: Even <412401474@qq.com> Date: Sat, 5 Sep 2026 18:20:00 +0800 Subject: [PATCH] fix(automerge): validate head commit before merge (#39235) Co-authored-by: zihao_wang Co-authored-by: wxiaoguang --- services/automerge/automerge.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/automerge/automerge.go b/services/automerge/automerge.go index 85e11ec683d..8c4a8009742 100644 --- a/services/automerge/automerge.go +++ b/services/automerge/automerge.go @@ -221,7 +221,12 @@ func handlePullRequestAutoMerge(ctx context.Context, pr *issues_model.PullReques return errors.Join(errSkipAutoMerge, errors.New("pull request is not mergeable")) } - if err := pull_service.Merge(pr, doer, scheduledPRM.MergeStyle, "", scheduledPRM.Message, true); err != nil { + // although expectedHeadCommitID is checked before, we should pass it to the Merge function to + // make it be checked again in case the head commit id changed after the previous check. + if err := pull_service.Merge(pr, doer, scheduledPRM.MergeStyle, expectedHeadCommitID, scheduledPRM.Message, true); err != nil { + if pull_service.IsErrSHADoesNotMatch(err) { + return errors.Join(errSkipAutoMerge, err) + } // FIXME: if merge failed, we should display some error message to the pull request page, or retry later. // The resolution is add a new column on automerge table named `error_message` to store the error message and displayed // on the pull request page. But this should not be finished in a bug fix PR which will be backport to release branch.