Skip to content

Commit 9a96655

Browse files
author
Yang Guo
committed
support coding tag event webhook
1 parent 0a2a146 commit 9a96655

File tree

6 files changed

+93
-15
lines changed

6 files changed

+93
-15
lines changed

platform-util-git/src/main/java/com/flow/platform/util/git/hooks/CodingEvents.java

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@
1717
package com.flow.platform.util.git.hooks;
1818

1919
import com.flow.platform.util.git.GitException;
20+
import com.flow.platform.util.git.model.GitCommit;
2021
import com.flow.platform.util.git.model.GitEvent;
2122
import com.flow.platform.util.git.model.GitEventAuthor;
2223
import com.flow.platform.util.git.model.GitEventCommit;
2324
import com.flow.platform.util.git.model.GitEventType;
2425
import com.flow.platform.util.git.model.GitPushTagEvent;
2526
import com.flow.platform.util.git.model.GitSource;
2627
import com.google.gson.annotations.SerializedName;
28+
import java.util.ArrayList;
2729
import java.util.List;
2830

2931
/**
@@ -49,6 +51,32 @@ private class PushHelper {
4951
private PushUserHelper user;
5052

5153
private RepoHelper repository;
54+
55+
private List<CommitHelper> commits;
56+
}
57+
58+
private class CommitHelper {
59+
60+
@SerializedName("web_url")
61+
private String url;
62+
63+
@SerializedName("short_message")
64+
private String message;
65+
66+
@SerializedName("sha")
67+
private String id;
68+
69+
private GitEventAuthor committer;
70+
71+
public GitEventCommit toGitEventCommit() {
72+
GitEventCommit commit = new GitEventCommit();
73+
commit.setAuthor(committer);
74+
commit.setId(id);
75+
commit.setMessage(message);
76+
commit.setUrl(url);
77+
return commit;
78+
}
79+
5280
}
5381

5482
private class PushUserHelper {
@@ -91,20 +119,33 @@ public GitEvent convert(String json) throws GitException {
91119
event.setType(GitEventType.PUSH);
92120
}
93121

94-
List<GitEventCommit> commits = event.getCommits();
122+
List<CommitHelper> commits = helper.commits;
123+
95124
if (!commits.isEmpty()) {
96-
GitEventCommit latest = commits.get(0);
97-
event.setHeadCommitUrl(latest.getUrl());
98-
event.setMessage(latest.getMessage());
99-
100-
GitEventAuthor author = latest.getAuthor();
101-
if (author != null) {
102-
event.setUserId(author.getName());
103-
event.setUsername(author.getName());
104-
event.setUserEmail(author.getEmail());
125+
CommitHelper latest = commits.get(0);
126+
event.setMessage(latest.message);
127+
128+
GitEventAuthor committer = latest.committer;
129+
if (committer != null) {
130+
event.setUserEmail(committer.getEmail());
131+
}
132+
133+
134+
// convert to GitEventCommit and set to event
135+
event.setCommits(new ArrayList<>(commits.size()));
136+
for (CommitHelper commitHelper : commits) {
137+
event.getCommits().add(commitHelper.toGitEventCommit());
105138
}
106139
}
107140

141+
// set user
142+
event.setUserId(helper.user.name);
143+
event.setUsername(helper.user.name);
144+
145+
// set commit url
146+
final String commitUrl = helper.repository.url + "/git/commit/" + event.getAfter();
147+
event.setHeadCommitUrl(commitUrl);
148+
108149
// set compare id
109150
final String compareId = GitPushTagEvent.buildCompareId(event);
110151
event.setCompareId(compareId);

platform-util-git/src/main/java/com/flow/platform/util/git/model/GitEventCommit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class GitEventCommit implements Serializable {
3939
@SerializedName(value = "url", alternate = "web_url")
4040
private String url;
4141

42-
@SerializedName(value = "author", alternate = "committer")
42+
@SerializedName(value = "author")
4343
private GitEventAuthor author;
4444

4545
private List<String> added;

platform-util-git/src/main/java/com/flow/platform/util/git/model/GitPushTagEvent.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public class GitPushTagEvent extends GitEvent {
2828

2929
/**
3030
* To generate compare id as {12}...{12}
31+
*
32+
* @param event source event must contain before and after property
3133
*/
3234
public static String buildCompareId(GitPushTagEvent event) {
3335
if (event.getType() == GitEventType.PUSH) {
@@ -38,7 +40,7 @@ public static String buildCompareId(GitPushTagEvent event) {
3840

3941
if (event.getType() == GitEventType.TAG) {
4042
String afterShortcut = event.getAfter().substring(0, 12);
41-
int tagVersionIndex = event.getRef().lastIndexOf("v");
43+
int tagVersionIndex = event.getRef().lastIndexOf("/");
4244
String tag = event.getRef().substring(tagVersionIndex + 1);
4345
return afterShortcut + "..." + tag;
4446
}

platform-util-git/src/test/java/com/flow/platform/util/git/test/CodingWebHooksEventTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public void should_convert_to_push_event_obj() throws Throwable {
5151
Assert.assertEquals(GitEventType.PUSH, pushEvent.getType());
5252
Assert.assertEquals(GitSource.CODING, pushEvent.getGitSource());
5353

54+
Assert.assertEquals("refs/heads/master", pushEvent.getRef());
5455
Assert.assertEquals("4841b089ecf8dd3dd0010f61bd649bfcc21c1fe8", pushEvent.getBefore());
5556
Assert.assertEquals("b972e2edd91e85ec25ec28c29d7dc3e823f28e8a", pushEvent.getAfter());
5657
Assert.assertEquals("update .flow.yml test test\n", pushEvent.getMessage());
@@ -67,6 +68,38 @@ public void should_convert_to_push_event_obj() throws Throwable {
6768
Assert.assertEquals("[email protected]", pushEvent.getUserEmail());
6869
}
6970

71+
@Test
72+
public void should_convert_to_tag_event_obj() throws Throwable {
73+
// given:
74+
String pushEventContent = loadWebhookSampleJson("coding/webhook_tag.json");
75+
Map<String, String> dummyHeader = new HashMap<>();
76+
dummyHeader.put(Hooks.HEADER, Hooks.EVENT_TYPE_PUSH);
77+
78+
// when: build event from header and json content
79+
GitPushTagEvent tagEvent = (GitPushTagEvent) GitHookEventFactory.build(dummyHeader, pushEventContent);
80+
Assert.assertNotNull(tagEvent);
81+
82+
// then:
83+
Assert.assertEquals(GitEventType.TAG, tagEvent.getType());
84+
Assert.assertEquals(GitSource.CODING, tagEvent.getGitSource());
85+
86+
Assert.assertEquals("refs/tags/v1.0", tagEvent.getRef());
87+
Assert.assertEquals("0000000000000000000000000000000000000000", tagEvent.getBefore());
88+
Assert.assertEquals("b972e2edd91e85ec25ec28c29d7dc3e823f28e8a", tagEvent.getAfter());
89+
90+
Assert.assertEquals("benqyang2006", tagEvent.getUserId());
91+
Assert.assertEquals("benqyang2006", tagEvent.getUsername());
92+
Assert.assertEquals(null, tagEvent.getUserEmail());
93+
94+
Assert.assertEquals("b972e2edd91e...v1.0", tagEvent.getCompareId());
95+
Assert.assertEquals("https://coding.net/u/benqyang2006/p/flowclibasic/git/compare/b972e2edd91e...v1.0",
96+
tagEvent.getCompareUrl());
97+
98+
Assert.assertEquals(
99+
"https://coding.net/u/benqyang2006/p/flowclibasic/git/commit/b972e2edd91e85ec25ec28c29d7dc3e823f28e8a",
100+
tagEvent.getHeadCommitUrl());
101+
}
102+
70103
private static String loadWebhookSampleJson(String classPath) throws IOException {
71104
URL resource = GitLabHooksEventTest.class.getClassLoader().getResource(classPath);
72105
return Files.toString(new File(resource.getFile()), Charset.forName("UTF-8"));

platform-util-git/src/test/java/com/flow/platform/util/git/test/GitHubHooksEventTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,12 @@ public void should_convert_to_tag_event_obj() throws Throwable {
102102
Assert.assertEquals("23307997", tagEvent.getUserId());
103103
Assert.assertEquals("yang-guo-2016", tagEvent.getUsername());
104104
Assert.assertEquals("[email protected]", tagEvent.getUserEmail());
105-
Assert.assertEquals("26d1d0fa6ee4...1.6", tagEvent.getCompareId());
105+
106+
Assert.assertEquals("26d1d0fa6ee4...v1.6", tagEvent.getCompareId());
107+
Assert.assertEquals("https://github.com/yang-guo-2016/Test/compare/v1.6", tagEvent.getCompareUrl());
108+
106109
Assert.assertEquals("https://github.com/yang-guo-2016/Test/commit/26d1d0fa6ee44a8f4e02250d13e84bf02722f5e7",
107110
tagEvent.getHeadCommitUrl());
108-
Assert.assertTrue(tagEvent.getCompareUrl().endsWith("compare/v1.6"));
109111
Assert.assertEquals(0, tagEvent.getCommits().size());
110112
}
111113

platform-util-git/src/test/java/com/flow/platform/util/git/test/GitLabHooksEventTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public void should_convert_to_tag_event_obj() throws Throwable {
105105
Assert.assertNull(tagEvent.getUserEmail());
106106
Assert.assertEquals(0, tagEvent.getCommits().size());
107107
Assert.assertEquals("hello test", tagEvent.getMessage());
108-
Assert.assertEquals("82b3d5ae55f7...1.0.0", tagEvent.getCompareId());
108+
Assert.assertEquals("82b3d5ae55f7...v1.0.0", tagEvent.getCompareId());
109109
Assert.assertEquals("http://example.com/jsmith/example/commit/82b3d5ae55f7080f1e6022629cdb57bfae7cccc7",
110110
tagEvent.getHeadCommitUrl());
111111
Assert.assertTrue(tagEvent.getCompareUrl().endsWith("compare/" + tagEvent.getCompareId()));

0 commit comments

Comments
 (0)