From f7e6a44967f00e30b4e56fb2e52e1ea081157f2f Mon Sep 17 00:00:00 2001 From: sinedd777 Date: Sat, 26 Jul 2025 13:14:33 -0500 Subject: [PATCH] Fix JENKINS-75500: Report build status to GitHub merge queue When GitHub merge queue is enabled, it creates temporary branches with different commit SHAs than the PR head. This change detects when the actual built commit differs from the PR head and reports status to the correct SHA, allowing merge queue to complete successfully. - Check BuildData for actual built commit - Compare with PR head commit - Use actual commit SHA for status reporting in merge queue context --- .../GitHubBuildStatusNotification.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubBuildStatusNotification.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubBuildStatusNotification.java index b6aaf3e78..fa79b04df 100644 --- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubBuildStatusNotification.java +++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubBuildStatusNotification.java @@ -47,6 +47,7 @@ import java.util.logging.Logger; import jenkins.model.Jenkins; import jenkins.plugins.git.AbstractGitSCMSource.SCMRevisionImpl; +import hudson.plugins.git.util.BuildData; import jenkins.scm.api.SCMHead; import jenkins.scm.api.SCMHeadObserver; import jenkins.scm.api.SCMRevision; @@ -79,6 +80,20 @@ private static void createBuildCommitStatus(Run build, TaskListener listen if (repo != null) { Result result = build.getResult(); String revisionToNotify = resolveHeadCommit(revision); + + // Check if we're in a merge queue context by looking at the actual built commit + BuildData buildData = build.getAction(BuildData.class); + if (buildData != null && buildData.getLastBuiltRevision() != null) { + String builtCommit = buildData.getLastBuiltRevision().getSha1String(); + // If the built commit differs from what we'd normally report, and we're building a PR, + // this might be a merge queue build + if (builtCommit != null && !builtCommit.equals(revisionToNotify) && revision instanceof PullRequestSCMRevision) { + LOGGER.log(Level.FINE, "Detected possible merge queue build. Using actual built commit {0} instead of PR head {1}", + new Object[]{builtCommit, revisionToNotify}); + revisionToNotify = builtCommit; + } + } + SCMHead head = revision.getHead(); List strategies = new GitHubSCMSourceContext( null, SCMHeadObserver.none())