Skip to content

Commit 91321b1

Browse files
jgangemiKostyaSha
authored andcommitted
- allow whitelisted branches to be configured via dsl (#125)
1 parent 39eeb00 commit 91321b1

5 files changed

Lines changed: 44 additions & 13 deletions

File tree

github-pullrequest-plugin/src/main/java/com/github/kostyasha/github/integration/branch/dsl/GitHubBranchJobDslExtenstion.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33
import antlr.ANTLRException;
44
import com.github.kostyasha.github.integration.branch.GitHubBranchTrigger;
55
import com.github.kostyasha.github.integration.branch.dsl.context.GitHubBranchTriggerDslContext;
6+
7+
import org.jenkinsci.plugins.github.pullrequest.restrictions.GitHubPRBranchRestriction;
8+
69
import hudson.Extension;
710
import javaposse.jobdsl.dsl.helpers.triggers.TriggerContext;
811
import javaposse.jobdsl.plugin.ContextExtensionPoint;
912
import javaposse.jobdsl.plugin.DslExtensionMethod;
1013

14+
1115
/**
1216
* @author Kanstantsin Shautsou
1317
*/
@@ -23,6 +27,8 @@ public Object onBranch(Runnable closure) throws ANTLRException {
2327
trigger.setPreStatus(context.isSetPreStatus());
2428
trigger.setCancelQueued(context.isCancelQueued());
2529
trigger.setAbortRunning(context.isAbortRunning());
30+
trigger.setBranchRestriction(new GitHubPRBranchRestriction(context.whitelistedBranches()));
31+
2632
return trigger;
2733
}
2834
}

github-pullrequest-plugin/src/main/java/com/github/kostyasha/github/integration/branch/dsl/context/GitHubBranchTriggerDslContext.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.jenkinsci.plugins.github.pullrequest.dsl.context.GitHubPRTriggerModeDslContext;
99

1010
import java.util.ArrayList;
11+
import java.util.Arrays;
1112
import java.util.List;
1213

1314
/**
@@ -19,6 +20,8 @@ public class GitHubBranchTriggerDslContext implements Context {
1920
private boolean setPreStatus;
2021
private boolean cancelQueued;
2122
private boolean abortRunning;
23+
24+
private List<String> whitelistedBranches = new ArrayList<>();
2225
private List<GitHubBranchEvent> events = new ArrayList<>();
2326

2427

@@ -53,6 +56,10 @@ public void events(Runnable closure) {
5356
events.addAll(eventsContext.events());
5457
}
5558

59+
public void whitelistedBranches(String... branches) {
60+
whitelistedBranches.addAll(Arrays.asList(branches));
61+
}
62+
5663
public String cron() {
5764
return cron;
5865
}
@@ -77,4 +84,7 @@ public List<GitHubBranchEvent> events() {
7784
return events;
7885
}
7986

87+
public List<String> whitelistedBranches() {
88+
return whitelistedBranches;
89+
}
8090
}

github-pullrequest-plugin/src/main/java/org/jenkinsci/plugins/github/pullrequest/restrictions/GitHubPRBranchRestriction.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,41 @@
11
package org.jenkinsci.plugins.github.pullrequest.restrictions;
22

3-
import hudson.Extension;
4-
import hudson.model.Describable;
5-
import hudson.model.Descriptor;
6-
import jenkins.model.Jenkins;
7-
import org.kohsuke.github.GHPullRequest;
8-
import org.kohsuke.stapler.DataBoundConstructor;
9-
103
import java.util.Arrays;
114
import java.util.HashSet;
5+
import java.util.List;
126
import java.util.Set;
7+
import java.util.regex.Pattern;
8+
9+
import com.google.common.base.Joiner;
10+
11+
import org.kohsuke.github.GHPullRequest;
12+
import org.kohsuke.stapler.DataBoundConstructor;
1313
import org.slf4j.Logger;
1414
import org.slf4j.LoggerFactory;
1515

16-
import java.util.regex.Pattern;
16+
import hudson.Extension;
17+
import hudson.model.Describable;
18+
import hudson.model.Descriptor;
19+
import jenkins.model.Jenkins;
1720

1821
/**
1922
* Restriction by target branch (one or many).
2023
*
2124
* @author Kanstantsin Shautsou
2225
*/
2326
public class GitHubPRBranchRestriction implements Describable<GitHubPRBranchRestriction> {
27+
private static final String LINE_SEPARATOR = System.lineSeparator();
2428
private static final Logger LOGGER = LoggerFactory.getLogger(GitHubPRBranchRestriction.class);
2529

26-
private final String targetBranch;
2730
private final Set<String> targetBranchList;
2831

2932
@DataBoundConstructor
3033
public GitHubPRBranchRestriction(String targetBranch) {
31-
this.targetBranch = targetBranch.trim();
32-
//TODO check if System.lineSeparator() is correct separator
33-
this.targetBranchList = new HashSet<String>(Arrays.asList(targetBranch.split(System.lineSeparator())));
34+
this(split(targetBranch));
35+
}
36+
37+
public GitHubPRBranchRestriction(List<String> targetBranches) {
38+
this.targetBranchList = new HashSet<>(targetBranches);
3439
targetBranchList.remove("");
3540
}
3641

@@ -57,13 +62,18 @@ public Set<String> getTargetBranchList() {
5762
}
5863

5964
public String getTargetBranch() {
60-
return targetBranch;
65+
// TODO check if System.lineSeparator() is correct separator
66+
return Joiner.on("\n").skipNulls().join(targetBranchList);
6167
}
6268

6369
public Descriptor<GitHubPRBranchRestriction> getDescriptor() {
6470
return (DescriptorImpl) Jenkins.getInstance().getDescriptor(GitHubPRBranchRestriction.class);
6571
}
6672

73+
private static List<String> split(String targetBranch) {
74+
return Arrays.asList(targetBranch.trim().split(LINE_SEPARATOR));
75+
}
76+
6777
@Extension
6878
public static class DescriptorImpl extends Descriptor<GitHubPRBranchRestriction> {
6979
@Override

github-pullrequest-plugin/src/test/java/org/jenkinsci/plugins/github/pullrequest/dsl/GitHubPRJobDslExtensionTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static org.hamcrest.Matchers.hasSize;
2727
import static org.hamcrest.Matchers.instanceOf;
2828
import static org.hamcrest.Matchers.is;
29+
import static org.hamcrest.Matchers.notNullValue;
2930
import static org.jenkinsci.plugins.github.pullrequest.GitHubPRTriggerMode.HEAVY_HOOKS_CRON;
3031
import static org.junit.Assert.*;
3132

@@ -73,6 +74,8 @@ public void shouldCreateJobWithExtendedDsl() throws Exception {
7374
assertThat("Should have cancel queued", trigger.isCancelQueued(), equalTo(true));
7475
assertThat("Should add events", trigger.getEvents(), hasSize(3));
7576
assertThat("Should set mode", trigger.getTriggerMode(), equalTo(HEAVY_HOOKS_CRON));
77+
assertThat("Branch restriction set", trigger.getBranchRestriction(), is(notNullValue()));
78+
assertThat("Restricted is master", trigger.getBranchRestriction().getTargetBranch(), equalTo("master"));
7679
}
7780

7881
}

github-pullrequest-plugin/src/test/resources/dsl/branch-jobdsl.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ freeStyleJob('gh-branch') {
1515
hashChanged()
1616
deleted()
1717
}
18+
19+
whitelistedBranches('master')
1820
}
1921

2022
}

0 commit comments

Comments
 (0)