Skip to content

Commit b39c7f5

Browse files
authored
Create pull request post build action (#139)
* Added GiteeCreatePullRequestPublisher.java and associated files * Removed floating if * Added localization, added datetime tag option for unique names, removed branch creation code
1 parent 20719a6 commit b39c7f5

File tree

11 files changed

+204
-0
lines changed

11 files changed

+204
-0
lines changed

src/main/java/com/gitee/jenkins/gitee/api/GiteeClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ public interface GiteeClient {
1111

1212
User getCurrentUser();
1313

14+
void createPullRequest(String owner, String repo, String title, String base, String head);
1415

1516
}

src/main/java/com/gitee/jenkins/gitee/api/impl/GiteeApiProxy.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ interface GiteeApiProxy {
99
void createPullRequestNote(String owner, String repo, Integer pullRequestId, String body);
1010
void headCurrentUser();
1111
void acceptPullRequest(String owner, String repo, Integer pullRequestId);
12+
void createPullRequest(String owner, String repo, String title, String base, String head);
1213
User getCurrentUser();
1314
}

src/main/java/com/gitee/jenkins/gitee/api/impl/GiteeV5ApiProxy.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ void createPullRequestNote(@PathParam("ownerPath") String ownerPath,
3030
@PathParam("prNumber") Integer prNumber,
3131
@FormParam("body") String body);
3232

33+
@POST
34+
@Produces(MediaType.APPLICATION_JSON)
35+
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
36+
@Path("/repos/{ownerPath}/{repoPath}/pulls")
37+
void createPullRequest(@PathParam("ownerPath") String ownerPath,
38+
@PathParam("repoPath") String repoPath,
39+
@FormParam("title") String title,
40+
@FormParam("base") String base,
41+
@FormParam("head") String head);
42+
3343
@HEAD
3444
@Produces(MediaType.APPLICATION_JSON)
3545
@Path("/user")

src/main/java/com/gitee/jenkins/gitee/api/impl/ResteasyGiteeClient.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ public void createPullRequestNote(PullRequest mr, String body) {
3434
api.createPullRequestNote(mr.getRepoOwner(), mr.getRepoPath(), mr.getIid(), body);
3535
}
3636

37+
@Override
38+
public void createPullRequest(String owner, String repo, String title, String base, String head) {
39+
api.createPullRequest(owner, repo, title, base, head);
40+
}
41+
3742
@Override
3843
public User getCurrentUser() {
3944
return api.getCurrentUser();
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
package com.gitee.jenkins.publisher;
2+
3+
import java.io.IOException;
4+
import java.time.LocalDateTime;
5+
import java.util.logging.Level;
6+
import java.util.logging.Logger;
7+
8+
import org.kohsuke.stapler.DataBoundConstructor;
9+
import org.kohsuke.stapler.DataBoundSetter;
10+
11+
import com.gitee.jenkins.gitee.api.GiteeClient;
12+
import com.gitee.jenkins.util.LoggerUtil;
13+
14+
import edu.umd.cs.findbugs.annotations.NonNull;
15+
import hudson.Extension;
16+
import hudson.Launcher;
17+
import hudson.matrix.MatrixAggregatable;
18+
import hudson.matrix.MatrixAggregator;
19+
import hudson.matrix.MatrixBuild;
20+
import hudson.model.AbstractBuild;
21+
import hudson.model.AbstractProject;
22+
import hudson.model.BuildListener;
23+
import hudson.tasks.BuildStepDescriptor;
24+
import hudson.tasks.BuildStepMonitor;
25+
import hudson.tasks.Notifier;
26+
import hudson.tasks.Publisher;
27+
import static com.gitee.jenkins.connection.GiteeConnectionProperty.getClient;
28+
29+
public class GiteeCreatePullRequestPublisher extends Notifier implements MatrixAggregatable {
30+
private static final Logger LOGGER = Logger.getLogger(GiteeCreatePullRequestPublisher.class.getName());
31+
32+
private String repo;
33+
private String owner;
34+
private String title;
35+
private String base;
36+
private String head;
37+
private boolean addDatetime;
38+
39+
@DataBoundConstructor
40+
public GiteeCreatePullRequestPublisher() { }
41+
42+
@Override
43+
public BuildStepMonitor getRequiredMonitorService() {
44+
return BuildStepMonitor.NONE;
45+
}
46+
47+
public String getRepo() {
48+
return repo;
49+
}
50+
51+
public String getOwner() {
52+
return owner;
53+
}
54+
55+
public String getTitle() {
56+
return title;
57+
}
58+
59+
public String getBase() {
60+
return base;
61+
}
62+
63+
public String getHead() {
64+
return head;
65+
}
66+
67+
public boolean getAddDatetime() {
68+
return addDatetime;
69+
}
70+
71+
@DataBoundSetter
72+
public void setRepo(String repo) {
73+
this.repo = repo;
74+
}
75+
76+
@DataBoundSetter
77+
public void setOwner(String owner) {
78+
this.owner = owner;
79+
}
80+
81+
@DataBoundSetter
82+
public void setTitle(String title) {
83+
this.title = title;
84+
}
85+
86+
@DataBoundSetter
87+
public void setBase(String base) {
88+
this.base = base;
89+
}
90+
91+
@DataBoundSetter
92+
public void setHead(String head) {
93+
this.head = head;
94+
}
95+
96+
@DataBoundSetter
97+
public void setAddDatetime(boolean addDatetime) {
98+
this.addDatetime = addDatetime;
99+
}
100+
101+
@Override
102+
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener)
103+
throws InterruptedException, IOException {
104+
105+
GiteeClient client = getClient(build);
106+
if (client == null) {
107+
listener.getLogger().println("No Gitee connection configured");
108+
return true;
109+
}
110+
111+
String pullRequestTitle = title;
112+
if (addDatetime) {
113+
pullRequestTitle = LocalDateTime.now().toString() + title;
114+
}
115+
client.createPullRequest(owner, repo, pullRequestTitle, base, head);
116+
117+
LOGGER.log(Level.INFO, "Pull request {0} generated, {1} -> {2}", LoggerUtil.toArray(title, head, base));
118+
return true;
119+
}
120+
121+
@Override
122+
public MatrixAggregator createAggregator(MatrixBuild build, Launcher launcher, BuildListener listener) {
123+
return new MatrixAggregator(build, launcher, listener) {
124+
@Override
125+
public boolean endBuild() throws InterruptedException, IOException {
126+
perform(build, launcher, listener);
127+
return super.endBuild();
128+
}
129+
};
130+
}
131+
132+
@Extension
133+
public static class DescriptorImpl extends BuildStepDescriptor<Publisher> {
134+
135+
@Override
136+
public boolean isApplicable(Class<? extends AbstractProject> aClass) {
137+
return true;
138+
}
139+
140+
@NonNull
141+
@Override
142+
public String getDisplayName() {
143+
return Messages.GiteeCreatePullRequestPublisher_DisplayName();
144+
}
145+
}
146+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?jelly escape-by-default='true'?>
2+
<j:jelly xmlns:j="jelly:core"
3+
xmlns:f="/lib/form">
4+
<f:entry title="${%Repo.name}" field="repo">
5+
<f:textbox name="repo" field="repo"/>
6+
</f:entry>
7+
<f:entry title="${%Owner.name}" field="owner">
8+
<f:textbox name="owner" field="owner"/>
9+
</f:entry>
10+
<f:entry title="${%Title.of.pull.request}" field="title">
11+
<f:textbox name="title" field="title"/>
12+
<f:entry title="${%Add.datetime}" field="addDatetime">
13+
<f:checkbox/>
14+
</f:entry>
15+
</f:entry>
16+
<f:entry title="${%Target.branch}" field="base">
17+
<f:textbox name="base" field="base"/>
18+
</f:entry>
19+
<f:entry title="${%Source.branch}" field="head">
20+
<f:textbox name="head" field="head"/>
21+
</f:entry>
22+
</j:jelly>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Repo.name=Repo Name
2+
Owner.name=Owner name
3+
Title.of.pull.request=Title of pull request
4+
Add.datetime=Add datetime (keep unique)
5+
Target.branch=Target branch
6+
Source.branch=Source branch
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Repo.name=\u4ed3\u5e93\u540d\u79f0
2+
Owner.name=\u6240\u6709\u8005\u59d3\u540d
3+
Title.of.pull.request=Pull Request \u6807\u9898
4+
Add.datetime=\u6dfb\u52a0\u65e5\u671f\u65f6\u95f4\u0028\u4fdd\u6301\u552f\u4e00\u0029
5+
Target.branch=\u76ee\u6807\u5206\u652f
6+
Source.branch=\u6e90\u5206\u652f

src/main/resources/com/gitee/jenkins/publisher/Messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ GiteeCommitStatusPublisher.DisplayName=Publish build status to Gitee
22
name.required=Build name required.
33
GiteeMessagePublisher.DisplayName=Add note with build status on Gitee pull requests
44
GiteeAcceptPullRequestPublisher.DisplayName=Accept Gitee pull request on success
5+
GiteeCreatePullRequestPublisher.DisplayName=Create Gitee pull request on success

src/main/resources/com/gitee/jenkins/publisher/Messages_zh_CN.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ GiteeCommitStatusPublisher.DisplayName=\u53D1\u5E03\u6784\u5EFA\u72B6\u6001\u523
22
name.required=\u8BF7\u8F93\u5165\u6784\u5EFA\u540D\u79F0\u3002
33
GiteeMessagePublisher.DisplayName=\u5C06\u6784\u5EFA\u72B6\u6001\u8BC4\u8BBA\u5230 Gitee Pull Request \u4E2D
44
GiteeAcceptPullRequestPublisher.DisplayName=\u5F53\u6784\u5EFA\u6210\u529F\u81EA\u52A8\u5408\u5E76 Gitee \u7684 Pull Request
5+
GiteeCreatePullRequestPublisher.DisplayName=\u5F53\u6784\u5EFA\u6210\u529F\u521B\u5EFA Gitee \u7684 Pull Request

0 commit comments

Comments
 (0)