Skip to content

Commit 66c74e9

Browse files
authored
Merge pull request #1180 from jlengrand/feature/create-discussion-with-release
Adds category name for releases
2 parents 68cabc7 + f7f626a commit 66c74e9

File tree

107 files changed

+5540
-38
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+5540
-38
lines changed

src/main/java/org/kohsuke/github/GHRelease.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ public class GHRelease extends GHObject {
3434
private Date published_at;
3535
private String tarball_url;
3636
private String zipball_url;
37+
private String discussion_url;
38+
39+
/**
40+
* Gets discussion url. Only present if a discussion relating to the release exists
41+
*
42+
* @return the discussion url
43+
*/
44+
public String getDiscussionUrl() {
45+
return discussion_url;
46+
}
3747

3848
/**
3949
* Gets assets url.

src/main/java/org/kohsuke/github/GHReleaseBuilder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,18 @@ public GHReleaseBuilder prerelease(boolean prerelease) {
8787
return this;
8888
}
8989

90+
/**
91+
* Optional
92+
*
93+
* @param categoryName
94+
* the category of the discussion to be created for the release. Category should already exist
95+
* @return the gh release builder
96+
*/
97+
public GHReleaseBuilder categoryName(String categoryName) {
98+
builder.with("discussion_category_name", categoryName);
99+
return this;
100+
}
101+
90102
/**
91103
* Create gh release.
92104
*

src/main/java/org/kohsuke/github/GHReleaseUpdater.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ public GHReleaseUpdater prerelease(boolean prerelease) {
9191
return this;
9292
}
9393

94+
/**
95+
* Optional
96+
*
97+
* @param categoryName
98+
* the category of the discussion to be created for the release. Category should already exist
99+
* @return the gh release builder
100+
*/
101+
public GHReleaseUpdater categoryName(String categoryName) {
102+
builder.with("discussion_category_name", categoryName);
103+
return this;
104+
}
105+
94106
/**
95107
* Update gh release.
96108
*

src/test/java/org/kohsuke/github/AppTest.java

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -777,43 +777,6 @@ public void testCheckMembership() throws Exception {
777777
assertThat(j.hasPublicMember(b), is(false));
778778
}
779779

780-
@Ignore("Needs mocking check")
781-
@Test
782-
public void testCreateRelease() throws Exception {
783-
kohsuke();
784-
785-
GHRepository r = gitHub.getRepository("kohsuke2/testCreateRelease");
786-
787-
String tagName = UUID.randomUUID().toString();
788-
String releaseName = "release-" + tagName;
789-
790-
GHRelease rel = r.createRelease(tagName).name(releaseName).prerelease(false).create();
791-
792-
Thread.sleep(3000);
793-
794-
try {
795-
796-
for (GHTag tag : r.listTags()) {
797-
if (tagName.equals(tag.getName())) {
798-
String ash = tag.getCommit().getSHA1();
799-
GHRef ref = r.createRef("refs/heads/" + releaseName, ash);
800-
assertThat(("refs/heads/" + releaseName), equalTo(ref.getRef()));
801-
802-
for (Map.Entry<String, GHBranch> entry : r.getBranches().entrySet()) {
803-
// System.out.println(entry.getKey() + "/" + entry.getValue());
804-
if (releaseName.equals(entry.getValue().getName())) {
805-
return;
806-
}
807-
}
808-
fail("branch not found");
809-
}
810-
}
811-
fail("release creation failed! tag not found");
812-
} finally {
813-
rel.delete();
814-
}
815-
}
816-
817780
@Test
818781
public void testRef() throws IOException {
819782
GHRef mainRef = gitHub.getRepository("jenkinsci/jenkins").getRef("heads/main");

src/test/java/org/kohsuke/github/ArchTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ public void testRequireUseOfAssertThat() {
141141
final String reason = "This project uses `assertThat(...)` instead of other `assert*()` methods.";
142142

143143
final DescribedPredicate<HasName> assertMethodOtherThanAssertThat = nameContaining("assert")
144-
.and(DescribedPredicate.not(name("assertThat")));
144+
.and(DescribedPredicate.not(name("assertThat")).and(DescribedPredicate.not(name("assertThrows"))));
145145

146146
final ArchRule onlyAssertThatRule = classes()
147147
.should(not(callMethodWhere(target(assertMethodOtherThanAssertThat))))
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package org.kohsuke.github;
2+
3+
import org.junit.Test;
4+
5+
import static org.hamcrest.Matchers.*;
6+
import static org.junit.Assert.assertThrows;
7+
8+
public class GHReleaseTest extends AbstractGitHubWireMockTest {
9+
10+
@Test
11+
public void testCreateSimpleRelease() throws Exception {
12+
GHRepository repo = gitHub.getRepository("hub4j-test-org/testCreateRelease");
13+
14+
String tagName = mockGitHub.getMethodName();
15+
GHRelease release = repo.createRelease(tagName).categoryName("announcements").prerelease(false).create();
16+
try {
17+
GHRelease releaseCheck = repo.getRelease(release.getId());
18+
19+
assertThat(releaseCheck, notNullValue());
20+
assertThat(releaseCheck.getTagName(), is(tagName));
21+
assertThat(releaseCheck.isPrerelease(), is(false));
22+
assertThat(releaseCheck.getDiscussionUrl(), notNullValue());
23+
} finally {
24+
release.delete();
25+
assertThat(repo.getRelease(release.getId()), nullValue());
26+
}
27+
}
28+
29+
@Test
30+
public void testCreateSimpleReleaseWithoutDiscussion() throws Exception {
31+
GHRepository repo = gitHub.getRepository("hub4j-test-org/testCreateRelease");
32+
33+
String tagName = mockGitHub.getMethodName();
34+
GHRelease release = repo.createRelease(tagName).create();
35+
36+
try {
37+
GHRelease releaseCheck = repo.getRelease(release.getId());
38+
39+
assertThat(releaseCheck, notNullValue());
40+
assertThat(releaseCheck.getTagName(), is(tagName));
41+
assertThat(releaseCheck.getDiscussionUrl(), nullValue());
42+
} finally {
43+
release.delete();
44+
assertThat(repo.getRelease(release.getId()), nullValue());
45+
}
46+
}
47+
48+
@Test
49+
public void testCreateDoubleReleaseFails() throws Exception {
50+
GHRepository repo = gitHub.getRepository("hub4j-test-org/testCreateRelease");
51+
52+
String tagName = mockGitHub.getMethodName();
53+
54+
GHRelease release = repo.createRelease(tagName).create();
55+
56+
try {
57+
GHRelease releaseCheck = repo.getRelease(release.getId());
58+
assertThat(releaseCheck, notNullValue());
59+
60+
HttpException httpException = assertThrows(HttpException.class, () -> {
61+
repo.createRelease(tagName).create();
62+
});
63+
64+
assertThat(httpException.getResponseCode(), is(422));
65+
} finally {
66+
release.delete();
67+
assertThat(repo.getRelease(release.getId()), nullValue());
68+
}
69+
}
70+
71+
@Test
72+
public void testCreateReleaseWithUnknownCategoryFails() throws Exception {
73+
GHRepository repo = gitHub.getRepository("hub4j-test-org/testCreateRelease");
74+
75+
String tagName = mockGitHub.getMethodName();
76+
String releaseName = "release-" + tagName;
77+
78+
assertThrows(GHFileNotFoundException.class, () -> {
79+
repo.createRelease(tagName)
80+
.name(releaseName)
81+
.categoryName("an invalid cateogry")
82+
.prerelease(false)
83+
.create();
84+
});
85+
}
86+
87+
@Test
88+
public void testUpdateRelease() throws Exception {
89+
GHRepository repo = gitHub.getRepository("hub4j-test-org/testCreateRelease");
90+
91+
String tagName = mockGitHub.getMethodName();
92+
GHRelease release = repo.createRelease(tagName).prerelease(true).create();
93+
try {
94+
GHRelease releaseCheck = repo.getRelease(release.getId());
95+
GHRelease updateCheck = releaseCheck.update().categoryName("announcements").prerelease(false).update();
96+
97+
assertThat(releaseCheck, notNullValue());
98+
assertThat(releaseCheck.getTagName(), is(tagName));
99+
assertThat(releaseCheck.isPrerelease(), is(true));
100+
assertThat(releaseCheck.getDiscussionUrl(), nullValue());
101+
102+
assertThat(updateCheck, notNullValue());
103+
assertThat(updateCheck.getTagName(), is(tagName));
104+
assertThat(updateCheck.isPrerelease(), is(false));
105+
assertThat(updateCheck.getDiscussionUrl(), notNullValue());
106+
107+
} finally {
108+
release.delete();
109+
assertThat(repo.getRelease(release.getId()), nullValue());
110+
}
111+
}
112+
113+
@Test
114+
public void testDeleteRelease() throws Exception {
115+
GHRepository repo = gitHub.getRepository("hub4j-test-org/testCreateRelease");
116+
117+
String tagName = mockGitHub.getMethodName();
118+
GHRelease release = repo.createRelease(tagName).categoryName("announcements").prerelease(true).create();
119+
120+
assertThat(repo.getRelease(release.getId()), notNullValue());
121+
release.delete();
122+
assertThat(repo.getRelease(release.getId()), nullValue());
123+
124+
}
125+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
{
2+
"id": 375534019,
3+
"node_id": "MDEwOlJlcG9zaXRvcnkzNzU1MzQwMTk=",
4+
"name": "testCreateRelease",
5+
"full_name": "hub4j-test-org/testCreateRelease",
6+
"private": false,
7+
"owner": {
8+
"login": "hub4j-test-org",
9+
"id": 7544739,
10+
"node_id": "MDEyOk9yZ2FuaXphdGlvbjc1NDQ3Mzk=",
11+
"avatar_url": "https://avatars.githubusercontent.com/u/7544739?v=4",
12+
"gravatar_id": "",
13+
"url": "https://api.github.com/users/hub4j-test-org",
14+
"html_url": "https://github.com/hub4j-test-org",
15+
"followers_url": "https://api.github.com/users/hub4j-test-org/followers",
16+
"following_url": "https://api.github.com/users/hub4j-test-org/following{/other_user}",
17+
"gists_url": "https://api.github.com/users/hub4j-test-org/gists{/gist_id}",
18+
"starred_url": "https://api.github.com/users/hub4j-test-org/starred{/owner}{/repo}",
19+
"subscriptions_url": "https://api.github.com/users/hub4j-test-org/subscriptions",
20+
"organizations_url": "https://api.github.com/users/hub4j-test-org/orgs",
21+
"repos_url": "https://api.github.com/users/hub4j-test-org/repos",
22+
"events_url": "https://api.github.com/users/hub4j-test-org/events{/privacy}",
23+
"received_events_url": "https://api.github.com/users/hub4j-test-org/received_events",
24+
"type": "Organization",
25+
"site_admin": false
26+
},
27+
"html_url": "https://github.com/hub4j-test-org/testCreateRelease",
28+
"description": null,
29+
"fork": false,
30+
"url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease",
31+
"forks_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/forks",
32+
"keys_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/keys{/key_id}",
33+
"collaborators_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/collaborators{/collaborator}",
34+
"teams_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/teams",
35+
"hooks_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/hooks",
36+
"issue_events_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/issues/events{/number}",
37+
"events_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/events",
38+
"assignees_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/assignees{/user}",
39+
"branches_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/branches{/branch}",
40+
"tags_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/tags",
41+
"blobs_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/git/blobs{/sha}",
42+
"git_tags_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/git/tags{/sha}",
43+
"git_refs_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/git/refs{/sha}",
44+
"trees_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/git/trees{/sha}",
45+
"statuses_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/statuses/{sha}",
46+
"languages_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/languages",
47+
"stargazers_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/stargazers",
48+
"contributors_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/contributors",
49+
"subscribers_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/subscribers",
50+
"subscription_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/subscription",
51+
"commits_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/commits{/sha}",
52+
"git_commits_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/git/commits{/sha}",
53+
"comments_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/comments{/number}",
54+
"issue_comment_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/issues/comments{/number}",
55+
"contents_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/contents/{+path}",
56+
"compare_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/compare/{base}...{head}",
57+
"merges_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/merges",
58+
"archive_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/{archive_format}{/ref}",
59+
"downloads_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/downloads",
60+
"issues_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/issues{/number}",
61+
"pulls_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/pulls{/number}",
62+
"milestones_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/milestones{/number}",
63+
"notifications_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/notifications{?since,all,participating}",
64+
"labels_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/labels{/name}",
65+
"releases_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/releases{/id}",
66+
"deployments_url": "https://api.github.com/repos/hub4j-test-org/testCreateRelease/deployments",
67+
"created_at": "2021-06-10T01:25:59Z",
68+
"updated_at": "2021-06-10T01:31:14Z",
69+
"pushed_at": "2021-06-11T06:56:52Z",
70+
"git_url": "git://github.com/hub4j-test-org/testCreateRelease.git",
71+
"ssh_url": "[email protected]:hub4j-test-org/testCreateRelease.git",
72+
"clone_url": "https://github.com/hub4j-test-org/testCreateRelease.git",
73+
"svn_url": "https://github.com/hub4j-test-org/testCreateRelease",
74+
"homepage": null,
75+
"size": 11948,
76+
"stargazers_count": 0,
77+
"watchers_count": 0,
78+
"language": "Java",
79+
"has_issues": false,
80+
"has_projects": false,
81+
"has_downloads": true,
82+
"has_wiki": false,
83+
"has_pages": false,
84+
"forks_count": 0,
85+
"mirror_url": null,
86+
"archived": false,
87+
"disabled": false,
88+
"open_issues_count": 0,
89+
"license": {
90+
"key": "mit",
91+
"name": "MIT License",
92+
"spdx_id": "MIT",
93+
"url": "https://api.github.com/licenses/mit",
94+
"node_id": "MDc6TGljZW5zZTEz"
95+
},
96+
"forks": 0,
97+
"open_issues": 0,
98+
"watchers": 0,
99+
"default_branch": "main",
100+
"permissions": {
101+
"admin": true,
102+
"push": true,
103+
"pull": true
104+
},
105+
"temp_clone_token": "",
106+
"allow_squash_merge": true,
107+
"allow_merge_commit": true,
108+
"allow_rebase_merge": true,
109+
"delete_branch_on_merge": false,
110+
"organization": {
111+
"login": "hub4j-test-org",
112+
"id": 7544739,
113+
"node_id": "MDEyOk9yZ2FuaXphdGlvbjc1NDQ3Mzk=",
114+
"avatar_url": "https://avatars.githubusercontent.com/u/7544739?v=4",
115+
"gravatar_id": "",
116+
"url": "https://api.github.com/users/hub4j-test-org",
117+
"html_url": "https://github.com/hub4j-test-org",
118+
"followers_url": "https://api.github.com/users/hub4j-test-org/followers",
119+
"following_url": "https://api.github.com/users/hub4j-test-org/following{/other_user}",
120+
"gists_url": "https://api.github.com/users/hub4j-test-org/gists{/gist_id}",
121+
"starred_url": "https://api.github.com/users/hub4j-test-org/starred{/owner}{/repo}",
122+
"subscriptions_url": "https://api.github.com/users/hub4j-test-org/subscriptions",
123+
"organizations_url": "https://api.github.com/users/hub4j-test-org/orgs",
124+
"repos_url": "https://api.github.com/users/hub4j-test-org/repos",
125+
"events_url": "https://api.github.com/users/hub4j-test-org/events{/privacy}",
126+
"received_events_url": "https://api.github.com/users/hub4j-test-org/received_events",
127+
"type": "Organization",
128+
"site_admin": false
129+
},
130+
"network_count": 0,
131+
"subscribers_count": 11
132+
}

0 commit comments

Comments
 (0)