diff --git a/pom.xml b/pom.xml index 16cbfcd4..01175073 100644 --- a/pom.xml +++ b/pom.xml @@ -212,13 +212,13 @@ repo.jenkins-ci.org - https://repo.jenkins.io/public/ + https://repo.jenkins-ci.org/public/ repo.jenkins-ci.org - https://repo.jenkins.io/public/ + https://repo.jenkins-ci.org/public/ diff --git a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/BitBucketPPRJobProbe.java b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/BitBucketPPRJobProbe.java index 7c65edde..f000c7f7 100644 --- a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/BitBucketPPRJobProbe.java +++ b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/BitBucketPPRJobProbe.java @@ -21,11 +21,6 @@ package io.jenkins.plugins.bitbucketpushandpullrequest; -import static io.jenkins.plugins.bitbucketpushandpullrequest.common.BitBucketPPRConst.PULL_REQUEST_MERGED; -import static io.jenkins.plugins.bitbucketpushandpullrequest.common.BitBucketPPRConst.PULL_REQUEST_SERVER_MERGED; -import static io.jenkins.plugins.bitbucketpushandpullrequest.common.BitBucketPPRConst.REPOSITORY_CLOUD_PUSH; -import static io.jenkins.plugins.bitbucketpushandpullrequest.common.BitBucketPPRConst.REPOSITORY_SERVER_PUSH; - import hudson.model.Job; import hudson.plugins.git.GitSCM; import hudson.plugins.git.GitStatus; @@ -53,6 +48,11 @@ import jenkins.model.ParameterizedJobMixIn; import jenkins.triggers.SCMTriggerItem; import org.eclipse.jgit.transport.URIish; +import org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject; +import jenkins.branch.BranchSource; +import jenkins.scm.api.SCMSource; + +import static io.jenkins.plugins.bitbucketpushandpullrequest.common.BitBucketPPRConst.*; /** * @@ -152,6 +152,8 @@ private void triggerScm(@Nonnull Job job, List remotes, jobTrigger.scmTriggerItem.ifPresent(it -> it.getSCMs().forEach(scm -> { + triggerMultibranchScan(job, bitbucketAction); + // @todo add comments to explain what is this check for if (job.getParent() instanceof MultiBranchProject && mPJobShouldNotBeTriggered(job, bitbucketEvent, bitbucketAction)) { @@ -244,4 +246,59 @@ private boolean matchGitScm(SCM scm, URIish remote) { .anyMatch((repo) -> repo.getURIs().stream().anyMatch((repoUrl) -> GitStatus.looselyMatches(repoUrl, remote))); } + private void triggerMultibranchScan(@Nonnull Job job, + BitBucketPPRAction bitbucketAction) { + + String getLatestCommit = bitbucketAction.getLatestCommit(); + String getLatestFromCommit = bitbucketAction.getLatestFromCommit(); + String pipelineName = job.getParent().getFullName(); + String getPayldChgType = bitbucketAction.getPayloadChangeType(); + + if ((getLatestCommit != null) && (getLatestFromCommit != null) && (pipelineName != null) && (getPayldChgType != null)) { + if ((getLatestFromCommit.equals(EMPTY_HASH) && PAYLOAD_CHANGE_TYPE_ADD.equals(getPayldChgType)) || + (getLatestCommit.equals(EMPTY_HASH) && PAYLOAD_CHANGE_TYPE_DELETE.equals(getPayldChgType))) { + + Jenkins jenkins = Jenkins.get(); + + WorkflowMultiBranchProject mbp = jenkins.getInstance().getItemByFullName(pipelineName, WorkflowMultiBranchProject.class); + + if (mbp != null) { + for (BranchSource bs : mbp.getSourcesList()) { + SCMSource src = bs.getSource(); + String getOPT1CloneUrl = bitbucketAction.getOPT1CloneUrl(); + String getOPT2CloneUrl = bitbucketAction.getOPT2CloneUrl(); + + logger.log(Level.FINEST, + "Source Type: {0}", + new String[] { src.getDescriptor().getDisplayName() }); + + if (src instanceof jenkins.plugins.git.GitSCMSource) { + jenkins.plugins.git.GitSCMSource git = (jenkins.plugins.git.GitSCMSource) src; + String gitRemote = git.getRemote(); + + logger.log(Level.FINEST, + "Branch Source URL: {0}", + new String[] { gitRemote }); + + if (gitRemote.equals(getOPT1CloneUrl) || gitRemote.equals(getOPT2CloneUrl)) { + logger.log(Level.FINEST, + "Branch Source URL: {0}, getOPT1CloneUrl: {1}, getOPT2CloneUrl: {2}", + new String[] { gitRemote, getOPT1CloneUrl, getOPT2CloneUrl }); + + mbp.scheduleBuild2(0); + + logger.log(Level.INFO, + "Triggered branch indexing for: {0}", + new String[] { pipelineName }); + } + } + } + } else { + logger.log(Level.WARNING, + "Multibranch job not found: {0}", + new String[] { pipelineName }); + } + } + } + } } diff --git a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRAction.java b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRAction.java index eb65e6dc..d98a1c2d 100644 --- a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRAction.java +++ b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRAction.java @@ -141,4 +141,12 @@ default String getLatestCommitFromRef() { default String getLatestCommitToRef() { return null; } + + default String getLatestFromCommit() { return null; } + + default String getPayloadChangeType() { return null; } + + default String getOPT1CloneUrl() { return null; } + + default String getOPT2CloneUrl() { return null; } } diff --git a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRServerRepositoryAction.java b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRServerRepositoryAction.java index fcc1e323..0c17cbac 100644 --- a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRServerRepositoryAction.java +++ b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRServerRepositoryAction.java @@ -186,4 +186,34 @@ public List getCommitLinks() throws MalformedURLException { private String getBaseUrl() { return baseUrl.getProtocol() + "://" + baseUrl.getHost() + ":" + baseUrl.getPort(); } + + @Override + public String getLatestFromCommit() { + for (BitBucketPPRServerChange change : payload.getServerChanges()) { + if(change.getRefId() != null) { + return change.getFromHash(); + } + } + return null; + } + + @Override + public String getPayloadChangeType() { + for (BitBucketPPRServerChange change : payload.getServerChanges()) { + if(change.getRefId() != null) { + return change.getType(); + } + } + return null; + } + + @Override + public String getOPT1CloneUrl() { + return payload.getServerRepository().getLinks().getCloneProperty().get(0).getHref(); + } + + @Override + public String getOPT2CloneUrl() { + return payload.getServerRepository().getLinks().getCloneProperty().get(1).getHref(); + } } diff --git a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/common/BitBucketPPRConst.java b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/common/BitBucketPPRConst.java index ada053b8..e0e35e09 100644 --- a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/common/BitBucketPPRConst.java +++ b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/common/BitBucketPPRConst.java @@ -61,6 +61,10 @@ public final class BitBucketPPRConst { public static final String APPLICATION_X_WWW_FORM_URLENCODED = "application/x-www-form-urlencoded"; + public static final String PAYLOAD_CHANGE_TYPE_ADD = "ADD"; + public static final String PAYLOAD_CHANGE_TYPE_DELETE = "DELETE"; + public static final String EMPTY_HASH = "0000000000000000000000000000000000000000"; + private BitBucketPPRConst() { throw new AssertionError(); }