diff --git a/README.md b/README.md index 5c699667..66e2e5b7 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ Select *Stash Pull Request Builder* then configure: **Advanced options** - Ignore ssl certificates: - Build PR targetting only these branches: common separated list of branch names (or regexes). Blank for all. +- Build PR from these branches only: common separated list of branch names (or regexes). Blank for all. - Rebuild if destination branch changes: - Build only if Stash reports no conflicts: this should be set if using the merge branch to avoid issues with out of data merge branch in stash - Build only if PR is mergeable (note this will stop the PR being built if you have required approvers limit set >0 and the PR hasn't been approved) diff --git a/src/main/java/stashpullrequestbuilder/stashpullrequestbuilder/StashBuildTrigger.java b/src/main/java/stashpullrequestbuilder/stashpullrequestbuilder/StashBuildTrigger.java index a91bf676..0b9cd786 100644 --- a/src/main/java/stashpullrequestbuilder/stashpullrequestbuilder/StashBuildTrigger.java +++ b/src/main/java/stashpullrequestbuilder/stashpullrequestbuilder/StashBuildTrigger.java @@ -61,6 +61,7 @@ public class StashBuildTrigger extends Trigger> { private final String ciSkipPhrases; private final String ciBuildPhrases; private final String targetBranchesToBuild; + private final String sourceBranchesToBuild; private final boolean ignoreSsl; private final boolean checkDestinationCommit; private final boolean checkMergeable; @@ -93,6 +94,7 @@ public StashBuildTrigger( String ciBuildPhrases, boolean deletePreviousBuildFinishComments, String targetBranchesToBuild, + String sourceBranchesToBuild, boolean cancelOutdatedJobsEnabled ) throws ANTLRException { super(cron); @@ -113,6 +115,7 @@ public StashBuildTrigger( this.onlyBuildOnComment = onlyBuildOnComment; this.deletePreviousBuildFinishComments = deletePreviousBuildFinishComments; this.targetBranchesToBuild = targetBranchesToBuild; + this.sourceBranchesToBuild = sourceBranchesToBuild; } public String getStashHost() { @@ -187,6 +190,10 @@ public String getTargetBranchesToBuild() { return targetBranchesToBuild; } + public String getSourceBranchesToBuild() { + return sourceBranchesToBuild; + } + public boolean getMergeOnSuccess() { return mergeOnSuccess; } diff --git a/src/main/java/stashpullrequestbuilder/stashpullrequestbuilder/StashRepository.java b/src/main/java/stashpullrequestbuilder/stashpullrequestbuilder/StashRepository.java index f728957c..3fbc80c7 100644 --- a/src/main/java/stashpullrequestbuilder/stashpullrequestbuilder/StashRepository.java +++ b/src/main/java/stashpullrequestbuilder/stashpullrequestbuilder/StashRepository.java @@ -260,6 +260,11 @@ private boolean isBuildTarget(StashPullRequestResponseValue pullRequest) { return false; } + if (!isFromSourceBranch(pullRequest)) { + logger.info("Skipping PR: " + pullRequest.getId() + " as sourcing from branch: " + pullRequest.getFromRef().getBranch().getName()); + return false; + } + if(!isPullRequestMergable(pullRequest)) { logger.info("Skipping PR: " + pullRequest.getId() + " as cannot be merged"); return false; @@ -359,6 +364,20 @@ private boolean isForTargetBranch(StashPullRequestResponseValue pullRequest) { return true; } + private boolean isFromSourceBranch(StashPullRequestResponseValue pullRequest) { + String sourceBranchesToBuild = this.trigger.getSourceBranchesToBuild(); + if (sourceBranchesToBuild !=null && !"".equals(sourceBranchesToBuild)) { + String[] branches = sourceBranchesToBuild.split(","); + for(String branch : branches) { + if (pullRequest.getFromRef().getBranch().getName().matches(branch.trim())) { + return true; + } + } + return false; + } + return true; + } + private boolean isSkipBuild(String pullRequestContentString) { String skipPhrases = this.trigger.getCiSkipPhrases(); if (skipPhrases != null && !"".equals(skipPhrases)) { diff --git a/src/main/resources/stashpullrequestbuilder/stashpullrequestbuilder/StashBuildTrigger/config.jelly b/src/main/resources/stashpullrequestbuilder/stashpullrequestbuilder/StashBuildTrigger/config.jelly index 8b53c34c..b4c5ec09 100644 --- a/src/main/resources/stashpullrequestbuilder/stashpullrequestbuilder/StashBuildTrigger/config.jelly +++ b/src/main/resources/stashpullrequestbuilder/stashpullrequestbuilder/StashBuildTrigger/config.jelly @@ -22,6 +22,9 @@ + + +