From a88d25f79b523fbfbd59c28d617209ba698969e3 Mon Sep 17 00:00:00 2001 From: mguillem Date: Wed, 18 Aug 2021 15:30:08 +0200 Subject: [PATCH] find SCMSource even if NullSCM now associated to build --- .../BitbucketBuildStatusNotifications.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/cloudbees/jenkins/plugins/bitbucket/BitbucketBuildStatusNotifications.java b/src/main/java/com/cloudbees/jenkins/plugins/bitbucket/BitbucketBuildStatusNotifications.java index d432309fe..1c1e33da8 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/bitbucket/BitbucketBuildStatusNotifications.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/bitbucket/BitbucketBuildStatusNotifications.java @@ -30,6 +30,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import hudson.Extension; import hudson.FilePath; +import hudson.model.ItemGroup; import hudson.model.Result; import hudson.model.Run; import hudson.model.TaskListener; @@ -48,6 +49,8 @@ import jenkins.scm.api.SCMRevision; import jenkins.scm.api.SCMRevisionAction; import jenkins.scm.api.SCMSource; +import jenkins.scm.api.SCMSourceOwner; +import jenkins.scm.impl.NullSCMSource; import org.apache.commons.lang.StringUtils; import org.jenkinsci.plugins.displayurlapi.DisplayURLProvider; @@ -105,8 +108,8 @@ private static void createStatus(@NonNull Run build, @NonNull TaskListener @NonNull BitbucketApi bitbucket, @NonNull String key, @NonNull String hash) throws IOException, InterruptedException { - final SCMSource s = SCMSource.SourceByItem.findSource(build.getParent()); - if (!(s instanceof BitbucketSCMSource)) { + final BitbucketSCMSource source = findBitbucketSCMSource(build); + if (source == null) { return; } @@ -135,7 +138,6 @@ private static void createStatus(@NonNull Run build, @NonNull TaskListener } else if (Result.UNSTABLE.equals(result)) { statusDescription = StringUtils.defaultIfBlank(buildDescription, "This commit has test failures."); - BitbucketSCMSource source = (BitbucketSCMSource) s; BitbucketSCMSourceContext sourceContext = new BitbucketSCMSourceContext(null, SCMHeadObserver.none()) .withTraits(source.getTraits()); if (sourceContext.sendSuccessNotificationForUnstableBuild()) { @@ -160,12 +162,19 @@ private static void createStatus(@NonNull Run build, @NonNull TaskListener status = new BitbucketBuildStatus(hash, statusDescription, state, url, key, name); new BitbucketChangesetCommentNotifier(bitbucket).buildStatus(status); if (result != null) { - listener.getLogger().println("[Bitbucket] Build result notified"); + listener.getLogger().println("[Bitbucket] Build result notified: " + status.getState()); } } private static @CheckForNull BitbucketSCMSource findBitbucketSCMSource(Run build) { SCMSource s = SCMSource.SourceByItem.findSource(build.getParent()); + if (s instanceof NullSCMSource) { + // for instance PR merged on Bitbucket since the build has been started + ItemGroup grandFather = build.getParent().getParent(); + if (grandFather instanceof SCMSourceOwner) { + s = ((SCMSourceOwner) grandFather).getSCMSources().get(0); + } + } return s instanceof BitbucketSCMSource ? (BitbucketSCMSource) s : null; }