ci/github-script/merge: restructure head SHA check

While it was already the case that only merge comments *after* the
latest push were acted on, the logic wasn't easy to understand. This
change should make it more obvious, specially in combination with the
next commit, that all steps (comments, approvals, merge) must happen on
the same SHA - the current head SHA of the PR.
This commit is contained in:
Wolfgang Walther
2025-11-02 19:35:27 +01:00
parent 37b7773907
commit 9a637aa7a4

View File

@@ -136,14 +136,13 @@ async function handleMerge({
})
// Only look through comments *after* the latest (force) push.
const latestChange = events.findLast(({ event }) =>
['committed', 'head_ref_force_pushed'].includes(event),
) ?? { sha: pull_request.head.sha }
const latestSha = latestChange.sha ?? latestChange.commit_id
log('latest sha', latestSha)
const latestIndex = events.indexOf(latestChange)
const lastPush = events.findLastIndex(
({ event, sha, commit_id }) =>
['committed', 'head_ref_force_pushed'].includes(event) &&
(sha ?? commit_id) === pull_request.head.sha,
)
const comments = events.slice(latestIndex + 1).filter(
const comments = events.slice(lastPush + 1).filter(
({ event, body, node_id }) =>
['commented', 'reviewed'].includes(event) &&
hasMergeCommand(body) &&
@@ -178,7 +177,7 @@ async function handleMerge({
})
{ clientMutationId }
}`,
{ node_id: pull_request.node_id, sha: latestSha },
{ node_id: pull_request.node_id, sha: pull_request.head.sha },
)
return 'Enabled Auto Merge'
} catch (e) {
@@ -202,7 +201,7 @@ async function handleMerge({
mergeQueueEntry { mergeQueue { url } }
}
}`,
{ node_id: pull_request.node_id, sha: latestSha },
{ node_id: pull_request.node_id, sha: pull_request.head.sha },
)
return `[Queued](${resp.enqueuePullRequest.mergeQueueEntry.mergeQueue.url}) for merge`
} catch (e) {