diff --git a/src/main/java/org/kohsuke/github/GHIssueSearchBuilder.java b/src/main/java/org/kohsuke/github/GHIssueSearchBuilder.java index 3967691ac3..05439b4ea8 100644 --- a/src/main/java/org/kohsuke/github/GHIssueSearchBuilder.java +++ b/src/main/java/org/kohsuke/github/GHIssueSearchBuilder.java @@ -57,6 +57,15 @@ public GHIssueSearchBuilder isClosed() { return q("is:closed"); } + /** + * Filters results to only include issues (excludes pull requests). + * + * @return the gh issue search builder + */ + public GHIssueSearchBuilder isIssue() { + return q("is:issue"); + } + /** * Is merged gh issue search builder. * @@ -75,6 +84,15 @@ public GHIssueSearchBuilder isOpen() { return q("is:open"); } + /** + * Filters results to only include pull requests (excludes issues). + * + * @return the gh issue search builder + */ + public GHIssueSearchBuilder isPullRequest() { + return q("is:pr"); + } + /** * Mentions gh issue search builder. * @@ -121,6 +139,19 @@ public GHIssueSearchBuilder q(String term) { return this; } + /** + * Filters results to a specific repository. + * + * @param owner + * the repository owner + * @param name + * the repository name + * @return the gh issue search builder + */ + public GHIssueSearchBuilder repo(String owner, String name) { + return q("repo:" + owner + "/" + name); + } + /** * Sort gh issue search builder. * diff --git a/src/test/java/org/kohsuke/github/AppTest.java b/src/test/java/org/kohsuke/github/AppTest.java index cb59f2af62..9782c8f438 100755 --- a/src/test/java/org/kohsuke/github/AppTest.java +++ b/src/test/java/org/kohsuke/github/AppTest.java @@ -855,6 +855,44 @@ public void testIssueSearch() { } } + /** + * Test issue search with isIssue filter to exclude pull requests. + */ + @Test + public void testIssueSearchIssuesOnly() { + PagedSearchIterable r = gitHub.searchIssues() + .repo("hub4j", "github-api") + .isIssue() + .isOpen() + .sort(GHIssueSearchBuilder.Sort.UPDATED) + .list(); + assertThat(r.getTotalCount(), greaterThan(0)); + for (GHIssue issue : r) { + assertThat(issue.getTitle(), notNullValue()); + // Verify it's not a PR (pull_request field should be null) + assertThat(issue.getPullRequest(), nullValue()); + } + } + + /** + * Test issue search with isPullRequest filter to only return pull requests. + */ + @Test + public void testIssueSearchPullRequestsOnly() { + PagedSearchIterable r = gitHub.searchIssues() + .repo("hub4j", "github-api") + .isPullRequest() + .isOpen() + .sort(GHIssueSearchBuilder.Sort.UPDATED) + .list(); + assertThat(r.getTotalCount(), greaterThan(0)); + for (GHIssue issue : r) { + assertThat(issue.getTitle(), notNullValue()); + // Verify it's a PR (pull_request field should not be null) + assertThat(issue.getPullRequest(), notNullValue()); + } + } + /** * Test issue with comment. * diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/1-user.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/1-user.json new file mode 100644 index 0000000000..fbc5eae788 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/1-user.json @@ -0,0 +1,36 @@ +{ + "login": "Anonycoders", + "id": 40047636, + "node_id": "MDQ6VXNlcjQwMDQ3NjM2", + "avatar_url": "https://avatars.githubusercontent.com/u/40047636?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Anonycoders", + "html_url": "https://github.com/Anonycoders", + "followers_url": "https://api.github.com/users/Anonycoders/followers", + "following_url": "https://api.github.com/users/Anonycoders/following{/other_user}", + "gists_url": "https://api.github.com/users/Anonycoders/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Anonycoders/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Anonycoders/subscriptions", + "organizations_url": "https://api.github.com/users/Anonycoders/orgs", + "repos_url": "https://api.github.com/users/Anonycoders/repos", + "events_url": "https://api.github.com/users/Anonycoders/events{/privacy}", + "received_events_url": "https://api.github.com/users/Anonycoders/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false, + "name": "Sorena Sarabadani", + "company": "@Adevinta", + "blog": "", + "location": "Berlin, Germany", + "email": "sorena.sarabadani@gmail.com", + "hireable": null, + "bio": "Ex-Shopifyer - Adevinta/Kleinanzeigen", + "twitter_username": "sorena_s", + "notification_email": "sorena.sarabadani@gmail.com", + "public_repos": 12, + "public_gists": 0, + "followers": 38, + "following": 4, + "created_at": "2018-06-08T02:07:15Z", + "updated_at": "2026-01-24T22:07:12Z" +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/2-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/2-search_issues.json new file mode 100644 index 0000000000..70588b20a1 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/2-search_issues.json @@ -0,0 +1,2596 @@ +{ + "total_count": 164, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2181", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2181/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2181/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2181/events", + "html_url": "https://github.com/hub4j/github-api/issues/2181", + "id": 3843541321, + "node_id": "I_kwDOAAlq-s7lF8lJ", + "number": 2181, + "title": "[Feature request] Expose Co-Authored-By Metadata in Commit API", + "user": { + "login": "yeikel", + "id": 8935151, + "node_id": "MDQ6VXNlcjg5MzUxNTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/8935151?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/yeikel", + "html_url": "https://github.com/yeikel", + "followers_url": "https://api.github.com/users/yeikel/followers", + "following_url": "https://api.github.com/users/yeikel/following{/other_user}", + "gists_url": "https://api.github.com/users/yeikel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yeikel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yeikel/subscriptions", + "organizations_url": "https://api.github.com/users/yeikel/orgs", + "repos_url": "https://api.github.com/users/yeikel/repos", + "events_url": "https://api.github.com/users/yeikel/events{/privacy}", + "received_events_url": "https://api.github.com/users/yeikel/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + }, + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2026-01-22T15:48:48Z", + "updated_at": "2026-01-24T21:57:18Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Use Case:** \n\nIdentify all contributors to a commit, including those listed as `Co-Authored-By` in the commit message footer. Currently, the API exposes only the main author and committer, but not co-authors.\n\n```java\n var userEmail = commit.getAuthor().getEmail();\n var commiterEmail = commit.getCommitter().getEmail();\n // How to get the co-author with this API? \n```\n\n**Proposed Solution:** \n- Add a method to `GHCommit` (or similar) that returns a list of co-authors parsed from the commit message.\n- Optionally, provide a structured representation (e.g., name and email) for each co-author.\n\n**Example API:**\n```java\nList getCoAuthors();\n```\n\n\n**References:** \n\nhttps://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors#creating-co-authored-commits-on-the-command-line\n\n**Note to maintainers:** \n\nApologies if this is currently possible, please share any snippet if you can. Thank you in advance! ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2181/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2181/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2166", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2166/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2166/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2166/events", + "html_url": "https://github.com/hub4j/github-api/issues/2166", + "id": 3668649747, + "node_id": "I_kwDOAAlq-s7aqycT", + "number": 2166, + "title": "Compatibility issue with Jackson 2.20 and above", + "user": { + "login": "yeikel", + "id": 8935151, + "node_id": "MDQ6VXNlcjg5MzUxNTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/8935151?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/yeikel", + "html_url": "https://github.com/yeikel", + "followers_url": "https://api.github.com/users/yeikel/followers", + "following_url": "https://api.github.com/users/yeikel/following{/other_user}", + "gists_url": "https://api.github.com/users/yeikel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yeikel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yeikel/subscriptions", + "organizations_url": "https://api.github.com/users/yeikel/orgs", + "repos_url": "https://api.github.com/users/yeikel/repos", + "events_url": "https://api.github.com/users/yeikel/events{/privacy}", + "received_events_url": "https://api.github.com/users/yeikel/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2025-11-26T18:38:53Z", + "updated_at": "2026-01-15T04:18:43Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\n\nI am trying to use the project along with Jackson 2.20.1 but it fails at runtime with the following issue while creating the mapper \n\n```\nException in thread \"main\" java.lang.NoSuchFieldError: Class com.fasterxml.jackson.databind.PropertyNamingStrategy does not have member field 'com.fasterxml.jackson.databind.PropertyNamingStrategy SNAKE_CASE'\n\tat org.kohsuke.github.GitHubClient.(GitHubClient.java:98)\n```\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Configure a project and add Jackson 2.20.1 to the classpath\n2. Try to create a new client\n\n\n**Expected behavior**\n\nThe client is created \n\n**Actual behavior**\n\nIt fails because it cannot find `PropertyNamingStrategy SNAKE_CASE` which no longer exists\n\n**Desktop (please complete the following information):**\n\n - Version: 2.0-rc.5\n\n**Additional context**\n\nUsage: https://github.com/hub4j/github-api/blob/9e09d67fbb35808abc0782e7d0cbf4b6e64a94de/src/main/java/org/kohsuke/github/GitHubClient.java#L124\n\nThis feature was dropped in Jackson 2.20. Using Jackson 2.19.4 works for now but it is not a long term solution\n\nSee https://github.com/FasterXML/jackson-databind/commit/4d2083160fef06e6063a3082f0fdaab8c2803793\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2166/reactions", + "total_count": 3, + "+1": 3, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2166/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2172", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2172/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2172/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2172/events", + "html_url": "https://github.com/hub4j/github-api/issues/2172", + "id": 3695344435, + "node_id": "I_kwDOAAlq-s7cQnsz", + "number": 2172, + "title": "GitHubSanityCachedValue can block whole application", + "user": { + "login": "alexec", + "id": 1142830, + "node_id": "MDQ6VXNlcjExNDI4MzA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1142830?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/alexec", + "html_url": "https://github.com/alexec", + "followers_url": "https://api.github.com/users/alexec/followers", + "following_url": "https://api.github.com/users/alexec/following{/other_user}", + "gists_url": "https://api.github.com/users/alexec/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alexec/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alexec/subscriptions", + "organizations_url": "https://api.github.com/users/alexec/orgs", + "repos_url": "https://api.github.com/users/alexec/repos", + "events_url": "https://api.github.com/users/alexec/events{/privacy}", + "received_events_url": "https://api.github.com/users/alexec/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2025-12-04T16:12:07Z", + "updated_at": "2025-12-16T15:38:13Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "\nThe `GitHubSanityCachedValue` class contains a single shared lock. This means that client to this class can be blocked by another user of the function. \n\nInstead, it might be better to use a read/write lock.\n\n\nhttps://github.com/hub4j/github-api/blob/9e09d67fbb35808abc0782e7d0cbf4b6e64a94de/src/main/java/org/kohsuke/github/GitHubSanityCachedValue.java#L11 ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2172/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2172/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2010", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2010/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2010/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2010/events", + "html_url": "https://github.com/hub4j/github-api/issues/2010", + "id": 2792856326, + "node_id": "I_kwDOAAlq-s6md5sG", + "number": 2010, + "title": "Support new issue types", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2025-01-16T13:57:43Z", + "updated_at": "2025-11-12T23:19:16Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Github introduced new enhancements to issues: issue types, sub-issues, and other minor issues. It seems like they're forcing these issue types by default now, the field is visible even if you don't want to use it, my guess is it will be a default soon.\nSo it makes sense to implement this kind of API.\n\nhttps://github.blog/changelog/2025-01-13-evolving-github-issues-public-preview/\nWhile it's stated that it's in \"preview\", they've already started rolling it out actively without opting in.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2010/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2010/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2156", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2156/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2156/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2156/events", + "html_url": "https://github.com/hub4j/github-api/issues/2156", + "id": 3574234743, + "node_id": "I_kwDOAAlq-s7VCn53", + "number": 2156, + "title": "Enterprise installations not recognized (throws an Exception)", + "user": { + "login": "boriel", + "id": 1433137, + "node_id": "MDQ6VXNlcjE0MzMxMzc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1433137?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/boriel", + "html_url": "https://github.com/boriel", + "followers_url": "https://api.github.com/users/boriel/followers", + "following_url": "https://api.github.com/users/boriel/following{/other_user}", + "gists_url": "https://api.github.com/users/boriel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/boriel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/boriel/subscriptions", + "organizations_url": "https://api.github.com/users/boriel/orgs", + "repos_url": "https://api.github.com/users/boriel/repos", + "events_url": "https://api.github.com/users/boriel/events{/privacy}", + "received_events_url": "https://api.github.com/users/boriel/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-10-31T10:01:12Z", + "updated_at": "2025-11-12T23:16:45Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Description of the bug**\nWhen listing installations for a given App ID, the deserialization of the JSON response fails with the exception:\n```\nhudson.remoting.ProxyException: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `org.kohsuke.github.GHTargetType` from String \"Enterprise\": not one of the values accepted for Enum class: [ORGANIZATION, USER]\n at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 756] (through reference chain: java.lang.Object[][0]->org.kohsuke.github.GHAppInstallation[\"target_type\"])\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:67)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1959)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:1245)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeAltString(EnumDeserializer.java:447)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.std.EnumDeserializer._fromString(EnumDeserializer.java:304)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:273)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:399)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:218)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2131)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1566)\n\tat PluginClassLoader for github-api//org.kohsuke.github.GitHubResponse.parseBody(GitHubResponse.java:104)\n\tat PluginClassLoader for github-api//org.kohsuke.github.GitHubPageIterator.lambda$fetch$0(GitHubPageIterator.java:147)\n\tat PluginClassLoader for github-api//org.kohsuke.github.GitHubClient.createResponse(GitHubClient.java:679)\n\tat PluginClassLoader for github-api//org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:466)\nCaused: hudson.remoting.ProxyException: org.kohsuke.github.HttpException: Server returned HTTP response code: 200, message: 'null' for URL: [https://api.github.com/app/installati](https://api.github.com/app/installations)\n ...\n```\n\n**To Reproduce**\nTo reproduce:\n\n 1. Install a GitHub App at the enterprise level (this is a rather new feature)\n 1. do an api call to\n[https://api.github.com/app/installations](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#list-installations-for-the-authenticated-app)\n \nThe `target_type` field will be `\"Enterprise\"` in one of the installations returned, and the deserialization will fail.\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\nJust return the deserialized content with this new `target_type`\n\n**Desktop (please complete the following information):**\n Does not apply\n\n**Additional context**\nFixing this will require adding the `ENTERPRISE` type to the `GHTargetType` Enum here:\nhttps://github.com/hub4j/github-api/blob/main/src/main/java/org/kohsuke/github/GHTargetType.java#L17", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2156/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2156/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2155", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2155/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2155/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2155/events", + "html_url": "https://github.com/hub4j/github-api/issues/2155", + "id": 3570367983, + "node_id": "I_kwDOAAlq-s7Uz33v", + "number": 2155, + "title": "[Feature request] Support matching-refs API", + "user": { + "login": "krzema12", + "id": 3110813, + "node_id": "MDQ6VXNlcjMxMTA4MTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/3110813?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/krzema12", + "html_url": "https://github.com/krzema12", + "followers_url": "https://api.github.com/users/krzema12/followers", + "following_url": "https://api.github.com/users/krzema12/following{/other_user}", + "gists_url": "https://api.github.com/users/krzema12/gists{/gist_id}", + "starred_url": "https://api.github.com/users/krzema12/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/krzema12/subscriptions", + "organizations_url": "https://api.github.com/users/krzema12/orgs", + "repos_url": "https://api.github.com/users/krzema12/repos", + "events_url": "https://api.github.com/users/krzema12/events{/privacy}", + "received_events_url": "https://api.github.com/users/krzema12/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-10-30T11:39:29Z", + "updated_at": "2025-11-12T23:12:26Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "See https://docs.github.com/en/rest/git/refs?apiVersion=2022-11-28#list-matching-references. The endpoint is `/repos/{owner}/{repo}/git/matching-refs/{ref}`.\n\nThe goal of this endpoint is to list refs that match the given prefix. It's useful to avoid fetching all available refs.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2155/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2155/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2120", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2120/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2120/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2120/events", + "html_url": "https://github.com/hub4j/github-api/issues/2120", + "id": 3274944747, + "node_id": "I_kwDOAAlq-s7DM7Dr", + "number": 2120, + "title": "Bridged artifact publishing failed for 2.0-rc.4", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-07-29T20:45:38Z", + "updated_at": "2025-10-23T18:21:36Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "https://github.com/hub4j/github-api/actions/runs/16606284210\n\n```\n2025-07-29T20:24:21.7667363Z ##[group]Run mvn -B clean deploy -DskipTests -Prelease -Pbridged\n2025-07-29T20:24:21.7668059Z \u001b[36;1mmvn -B clean deploy -DskipTests -Prelease -Pbridged\u001b[0m\n2025-07-29T20:24:21.7696714Z shell: /usr/bin/bash -e {0}\n2025-07-29T20:24:21.7697147Z env:\n2025-07-29T20:24:21.7698515Z JAVA_11_PLUS_MAVEN_OPTS: --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED\n2025-07-29T20:24:21.7700071Z JAVA_HOME: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64\n2025-07-29T20:24:21.7700782Z JAVA_HOME_17_X64: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64\n2025-07-29T20:24:21.7702295Z MAVEN_OPTS: --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED\n2025-07-29T20:24:21.7704065Z MAVEN_USERNAME: ***\n2025-07-29T20:24:21.7704550Z MAVEN_PASSWORD: ***\n2025-07-29T20:24:21.7705067Z MAVEN_GPG_PASSPHRASE: ***\n2025-07-29T20:24:21.7705491Z ##[endgroup]\n2025-07-29T20:24:23.0228744Z [INFO] Scanning for projects...\n2025-07-29T20:24:23.9536099Z [WARNING] \n2025-07-29T20:24:23.9537453Z [WARNING] Some problems were encountered while building the effective model for org.kohsuke:github-api-bridged:jar:2.0-rc.4\n2025-07-29T20:24:23.9540996Z [WARNING] 'artifactId' contains an expression but should be a constant. @ org.kohsuke:${github-api.artifactId}:2.0-rc.4, /home/runner/work/github-api/github-api/pom.xml, line 5, column 15\n2025-07-29T20:24:23.9546247Z [WARNING] \n2025-07-29T20:24:23.9547681Z [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.\n2025-07-29T20:24:23.9556489Z [WARNING] \n2025-07-29T20:24:23.9559777Z [WARNING] For this reason, future Maven versions might no longer support building such malformed projects.\n2025-07-29T20:24:23.9560985Z [WARNING] \n2025-07-29T20:24:23.9618771Z [INFO] Inspecting build with total of 1 modules...\n2025-07-29T20:24:23.9621326Z [INFO] Installing Nexus Staging features:\n2025-07-29T20:24:23.9623096Z [INFO] ... total of 1 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin\n2025-07-29T20:24:23.9709735Z [INFO] \n2025-07-29T20:24:23.9710932Z [INFO] -------------------< org.kohsuke:github-api-bridged >-------------------\n2025-07-29T20:24:23.9731357Z [INFO] Building GitHub API for Java 2.0-rc.4\n2025-07-29T20:24:23.9732242Z [INFO] from pom.xml\n2025-07-29T20:24:23.9733097Z [INFO] --------------------------------[ jar ]---------------------------------\n2025-07-29T20:24:24.1975820Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/com/infradna/tool/bridge-method-injector/1.31/bridge-method-injector-1.31.jar\n2025-07-29T20:24:24.9010193Z [INFO] Downloaded from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/com/infradna/tool/bridge-method-injector/1.31/bridge-method-injector-1.31.jar (20 kB at 29 kB/s)\n2025-07-29T20:24:25.2685425Z [INFO] \n2025-07-29T20:24:25.2688450Z [INFO] --- clean:3.2.0:clean (default-clean) @ github-api-bridged ---\n2025-07-29T20:24:25.3139513Z [INFO] Deleting /home/runner/work/github-api/github-api/target\n2025-07-29T20:24:25.3751804Z [INFO] \n2025-07-29T20:24:25.3755019Z [INFO] --- sortpom:4.0.0:verify (default) @ github-api-bridged ---\n2025-07-29T20:24:25.4004807Z [INFO] Verifying file /home/runner/work/github-api/github-api/pom.xml\n2025-07-29T20:24:25.5574156Z [INFO] \n2025-07-29T20:24:25.5604522Z [INFO] --- resources:3.3.1:copy-resources (copy-bridged-resources) @ github-api-bridged ---\n2025-07-29T20:24:25.6211373Z [INFO] Copying 2 resources from src/main/resources/META-INF/native-image/org.kohsuke/github-api to target/classes/META-INF/native-image/org.kohsuke/github-api-bridged\n2025-07-29T20:24:25.6257379Z [INFO] \n2025-07-29T20:24:25.6260843Z [INFO] --- resources:3.3.1:resources (default-resources) @ github-api-bridged ---\n2025-07-29T20:24:25.6298334Z [INFO] Copying 2 resources from src/main/resources to target/classes\n2025-07-29T20:24:25.6313090Z [INFO] \n2025-07-29T20:24:25.6316388Z [INFO] --- compiler:3.14.0:compile (default-compile) @ github-api-bridged ---\n2025-07-29T20:24:25.7492402Z [INFO] Recompiling the module because of changed source code.\n2025-07-29T20:24:25.7577343Z [INFO] Compiling 248 source files with javac [debug release 11] to target/classes\n2025-07-29T20:24:29.2601532Z [INFO] /home/runner/work/github-api/github-api/src/main/java/org/kohsuke/github/GitHubRequest.java: Some input files use or override a deprecated API.\n2025-07-29T20:24:29.2605584Z [INFO] /home/runner/work/github-api/github-api/src/main/java/org/kohsuke/github/GitHubRequest.java: Recompile with -Xlint:deprecation for details.\n2025-07-29T20:24:29.2645024Z [INFO] /home/runner/work/github-api/github-api/src/main/java/org/kohsuke/github/AbstractBuilder.java: Some input files use unchecked or unsafe operations.\n2025-07-29T20:24:29.2647447Z [INFO] /home/runner/work/github-api/github-api/src/main/java/org/kohsuke/github/AbstractBuilder.java: Recompile with -Xlint:unchecked for details.\n2025-07-29T20:24:29.2649001Z [INFO] \n2025-07-29T20:24:29.2649896Z [INFO] --- bridge-method-injector:1.31:process (default) @ github-api-bridged ---\n2025-07-29T20:24:29.2652007Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm/9.8/asm-9.8.pom\n2025-07-29T20:24:29.2949999Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.8/asm-9.8.pom\n2025-07-29T20:24:29.3649367Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.8/asm-9.8.pom (2.4 kB at 34 kB/s)\n2025-07-29T20:24:29.3683200Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.pom\n2025-07-29T20:24:29.3975186Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.pom\n2025-07-29T20:24:29.4137372Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.pom (2.8 kB at 186 kB/s)\n2025-07-29T20:24:29.4162498Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.pom\n2025-07-29T20:24:29.4335247Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.pom\n2025-07-29T20:24:29.4487718Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.pom (2.6 kB at 173 kB/s)\n2025-07-29T20:24:29.4537743Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm/9.8/asm-9.8.jar\n2025-07-29T20:24:29.4724836Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.jar\n2025-07-29T20:24:29.4726869Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.jar\n2025-07-29T20:24:29.5200408Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.8/asm-9.8.jar\n2025-07-29T20:24:29.5581033Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.8/asm-9.8.jar (126 kB at 3.3 MB/s)\n2025-07-29T20:24:29.5604951Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.jar\n2025-07-29T20:24:29.5607222Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.jar\n2025-07-29T20:24:29.5810217Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.jar (73 kB at 3.3 MB/s)\n2025-07-29T20:24:29.6160423Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.jar (52 kB at 911 kB/s)\n2025-07-29T20:24:29.7000553Z [INFO] \n2025-07-29T20:24:29.7004734Z [INFO] --- resources:3.3.1:testResources (default-testResources) @ github-api-bridged ---\n2025-07-29T20:24:29.8214547Z [INFO] Copying 80 resources from src/test/resources to target/test-classes\n2025-07-29T20:24:29.8321255Z [INFO] \n2025-07-29T20:24:29.8322203Z [INFO] --- compiler:3.14.0:testCompile (default-testCompile) @ github-api-bridged ---\n2025-07-29T20:24:29.8448238Z [INFO] Recompiling the module because of changed dependency.\n2025-07-29T20:24:29.8464047Z [INFO] Compiling 89 source files with javac [debug release 11] to target/test-classes\n2025-07-29T20:24:33.5592285Z [INFO] /home/runner/work/github-api/github-api/src/test/java/org/kohsuke/github/AbstractGHAppInstallationTest.java: Some input files use or override a deprecated API.\n2025-07-29T20:24:33.5595228Z [INFO] /home/runner/work/github-api/github-api/src/test/java/org/kohsuke/github/AbstractGHAppInstallationTest.java: Recompile with -Xlint:deprecation for details.\n2025-07-29T20:24:33.5597814Z [INFO] /home/runner/work/github-api/github-api/src/test/java/org/kohsuke/github/GitHubWireMockRule.java: Some input files use unchecked or unsafe operations.\n2025-07-29T20:24:33.5600435Z [INFO] /home/runner/work/github-api/github-api/src/test/java/org/kohsuke/github/GitHubWireMockRule.java: Recompile with -Xlint:unchecked for details.\n2025-07-29T20:24:33.5602352Z [INFO] \n2025-07-29T20:24:33.5605120Z [INFO] --- spring-boot:3.3.5:process-test-aot (process-test-aot) @ github-api-bridged ---\n2025-07-29T20:24:33.6745177Z [INFO] Skipping AOT test processing since tests are skipped\n2025-07-29T20:24:33.6751073Z [INFO] \n2025-07-29T20:24:33.6751944Z [INFO] --- surefire:3.5.3:test (default-test) @ github-api-bridged ---\n2025-07-29T20:24:33.7535969Z [INFO] Tests are skipped.\n2025-07-29T20:24:33.7536776Z [INFO] \n2025-07-29T20:24:33.7537563Z [INFO] --- jar:3.4.2:jar (default-jar) @ github-api-bridged ---\n2025-07-29T20:24:33.9589304Z [INFO] Building jar: /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.jar\n2025-07-29T20:24:34.0705411Z [INFO] \n2025-07-29T20:24:34.0706287Z [INFO] --- javadoc:3.11.2:jar (attach-javadocs) @ github-api-bridged ---\n2025-07-29T20:24:34.5637285Z [INFO] No previous run data found, generating javadoc.\n2025-07-29T20:24:40.3755359Z [INFO] Building jar: /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-javadoc.jar\n2025-07-29T20:24:40.5876374Z [INFO] \n2025-07-29T20:24:40.5881032Z [INFO] --- source:3.3.1:jar-no-fork (attach-sources) @ github-api-bridged ---\n2025-07-29T20:24:40.7511753Z [INFO] Building jar: /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-sources.jar\n2025-07-29T20:24:40.8140859Z [INFO] \n2025-07-29T20:24:40.8142525Z [INFO] --- jacoco:0.8.12:prepare-agent-integration (default) @ github-api-bridged ---\n2025-07-29T20:24:40.8461770Z [INFO] jacoco.surefire.argLine set to -javaagent:/home/runner/.m2/repository/org/jacoco/org.jacoco.agent/0.8.12/org.jacoco.agent-0.8.12-runtime.jar=destfile=/home/runner/work/github-api/github-api/target/jacoco-it.exec,excludes=/org/kohsuke/github/example/*\n2025-07-29T20:24:40.8494367Z [INFO] \n2025-07-29T20:24:40.8495616Z [INFO] --- surefire:3.5.3:test (okhttp-test) @ github-api-bridged ---\n2025-07-29T20:24:40.8496881Z [INFO] Tests are skipped.\n2025-07-29T20:24:40.8497800Z [INFO] \n2025-07-29T20:24:40.8498984Z [INFO] --- surefire:3.5.3:test (httpclient-test-tracing) @ github-api-bridged ---\n2025-07-29T20:24:40.8524871Z [INFO] Tests are skipped.\n2025-07-29T20:24:40.8534351Z [INFO] \n2025-07-29T20:24:40.8535275Z [INFO] --- surefire:3.5.3:test (slow-or-flaky-test) @ github-api-bridged ---\n2025-07-29T20:24:40.8550533Z [INFO] Tests are skipped.\n2025-07-29T20:24:40.8557437Z [INFO] \n2025-07-29T20:24:40.8558398Z [INFO] --- surefire:3.5.3:test (slow-or-flaky-test-tracing) @ github-api-bridged ---\n2025-07-29T20:24:40.8572406Z [INFO] Tests are skipped.\n2025-07-29T20:24:40.8575439Z [INFO] \n2025-07-29T20:24:40.8576894Z [INFO] --- surefire:3.5.3:test (jwt0.11.x-test) @ github-api-bridged ---\n2025-07-29T20:24:40.8602410Z [INFO] Tests are skipped.\n2025-07-29T20:24:40.8608154Z [INFO] \n2025-07-29T20:24:40.8609090Z [INFO] --- spotless:2.44.5:check (spotless-check) @ github-api-bridged ---\n2025-07-29T20:24:41.2263304Z [INFO] Index file does not exist. Fallback to an empty index\n2025-07-29T20:24:46.6711821Z [INFO] Spotless.Java is keeping 337 files clean - 0 needs changes to be clean, 337 were already clean, 0 were skipped because caching determined they were already clean\n2025-07-29T20:24:46.6755549Z [INFO] \n2025-07-29T20:24:46.6756409Z [INFO] --- japicmp:0.23.1:cmp (default) @ github-api-bridged ---\n2025-07-29T20:24:46.8656192Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/kohsuke/github-api-bridged/maven-metadata.xml\n2025-07-29T20:24:46.8659827Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/kohsuke/github-api-bridged/maven-metadata.xml\n2025-07-29T20:24:46.8805000Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/kohsuke/github-api-bridged/maven-metadata.xml (379 B at 24 kB/s)\n2025-07-29T20:24:46.8950664Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/kohsuke/github-api-bridged/2.0-rc.3/github-api-bridged-2.0-rc.3.jar\n2025-07-29T20:24:46.9134198Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/kohsuke/github-api-bridged/2.0-rc.3/github-api-bridged-2.0-rc.3.jar\n2025-07-29T20:24:46.9714434Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/kohsuke/github-api-bridged/2.0-rc.3/github-api-bridged-2.0-rc.3.jar (653 kB at 11 MB/s)\n2025-07-29T20:24:47.4514453Z [INFO] Written file '/home/runner/work/github-api/github-api/target/japicmp/japicmp.diff'.\n2025-07-29T20:24:47.4782383Z [INFO] Written file '/home/runner/work/github-api/github-api/target/japicmp/japicmp.md'.\n2025-07-29T20:24:47.7245716Z [INFO] Written file '/home/runner/work/github-api/github-api/target/japicmp/japicmp.xml'.\n2025-07-29T20:24:47.7299099Z [INFO] Written file '/home/runner/work/github-api/github-api/target/japicmp/japicmp.html'.\n2025-07-29T20:24:47.7317925Z [INFO] \n2025-07-29T20:24:47.7318868Z [INFO] >>> spotbugs:4.9.3.0:check (run-spotbugs) > :spotbugs @ github-api-bridged >>>\n2025-07-29T20:24:47.7507293Z [INFO] \n2025-07-29T20:24:47.7508252Z [INFO] --- spotbugs:4.9.3.0:spotbugs (spotbugs) @ github-api-bridged ---\n2025-07-29T20:24:48.6436935Z [INFO] Fork Value is true\n2025-07-29T20:25:00.2299299Z [INFO] Done SpotBugs Analysis....\n2025-07-29T20:25:00.9449363Z [WARNING] Site model of 'org.kohsuke:github-api-bridged:jar:2.0-rc.4' for default locale is still using the old pre-version 2.0.0 model. You MUST migrate to the new model as soon as possible otherwise your build will break in the future!\n2025-07-29T20:25:00.9658654Z [INFO] Rendering content with org.kohsuke:maven-skin:jar:1.2 skin\n2025-07-29T20:25:01.4360715Z [INFO] \n2025-07-29T20:25:01.4361760Z [INFO] <<< spotbugs:4.9.3.0:check (run-spotbugs) < :spotbugs @ github-api-bridged <<<\n2025-07-29T20:25:01.4362774Z [INFO] \n2025-07-29T20:25:01.4363601Z [INFO] \n2025-07-29T20:25:01.4364417Z [INFO] --- spotbugs:4.9.3.0:check (run-spotbugs) @ github-api-bridged ---\n2025-07-29T20:25:01.4877054Z [INFO] BugInstance size is 0\n2025-07-29T20:25:01.4879822Z [INFO] Error size is 0\n2025-07-29T20:25:01.4886452Z [INFO] No errors/warnings found\n2025-07-29T20:25:01.4887183Z [INFO] \n2025-07-29T20:25:01.4887983Z [INFO] --- gpg:3.2.7:sign (sign-artifacts) @ github-api-bridged ---\n2025-07-29T20:25:01.5676590Z [INFO] Signer 'gpg' is signing 4 files with key default\n2025-07-29T20:25:02.5969472Z [INFO] \n2025-07-29T20:25:02.5970416Z [INFO] --- jacoco:0.8.12:report-integration (report) @ github-api-bridged ---\n2025-07-29T20:25:02.5998704Z [INFO] Skipping JaCoCo execution due to missing execution data file.\n2025-07-29T20:25:02.6000035Z [INFO] \n2025-07-29T20:25:02.6001071Z [INFO] --- jacoco:0.8.12:check (check) @ github-api-bridged ---\n2025-07-29T20:25:02.6069572Z [INFO] Skipping JaCoCo execution due to missing execution data file:/home/runner/work/github-api/github-api/target/jacoco-it.exec\n2025-07-29T20:25:02.6076175Z [INFO] \n2025-07-29T20:25:02.6077039Z [INFO] --- install:3.1.2:install (default-install) @ github-api-bridged ---\n2025-07-29T20:25:02.6323580Z [INFO] Installing /home/runner/work/github-api/github-api/pom.xml to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom\n2025-07-29T20:25:02.6332255Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.jar to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar\n2025-07-29T20:25:02.6355514Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-javadoc.jar to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar\n2025-07-29T20:25:02.6376191Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-sources.jar to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar\n2025-07-29T20:25:02.6386456Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.jar.asc to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar.asc\n2025-07-29T20:25:02.6396073Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.pom.asc to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom.asc\n2025-07-29T20:25:02.6399252Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-javadoc.jar.asc to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar.asc\n2025-07-29T20:25:02.6402537Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-sources.jar.asc to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar.asc\n2025-07-29T20:25:02.6437367Z [INFO] \n2025-07-29T20:25:02.6438347Z [INFO] --- nexus-staging:1.7.0:deploy (injected-nexus-deploy) @ github-api-bridged ---\n2025-07-29T20:25:02.6570971Z [INFO] Performing local staging (local stagingDirectory=\"/home/runner/work/github-api/github-api/target/nexus-staging/staging\")...\n2025-07-29T20:25:02.6591567Z [INFO] + Using server credentials \"sonatype-nexus-staging\" from Maven settings.\n2025-07-29T20:25:03.4301873Z [INFO] * Connected to Nexus at https://ossrh-staging-api.central.sonatype.com:443/, is version 2.15.1-02 and edition \"Professional\"\n2025-07-29T20:25:03.6756020Z [INFO] * Using staging profile ID \"org.kohsuke\" (matched by Nexus).\n2025-07-29T20:25:03.6791917Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.jar to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar\n2025-07-29T20:25:03.6803873Z [INFO] Installing /home/runner/work/github-api/github-api/pom.xml to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom\n2025-07-29T20:25:03.6829619Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-javadoc.jar to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar\n2025-07-29T20:25:03.6863148Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-sources.jar to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar\n2025-07-29T20:25:03.6878197Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.jar.asc to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar.asc\n2025-07-29T20:25:03.6892786Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.pom.asc to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom.asc\n2025-07-29T20:25:03.6906107Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-javadoc.jar.asc to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar.asc\n2025-07-29T20:25:03.6913739Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-sources.jar.asc to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar.asc\n2025-07-29T20:25:03.6922958Z [INFO] Performing remote staging...\n2025-07-29T20:25:03.6924739Z [INFO] \n2025-07-29T20:25:03.6926171Z [INFO] * Remote staging into staging profile ID \"org.kohsuke\"\n2025-07-29T20:25:04.0610456Z [INFO] * Created staging repository with ID \"org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17\".\n2025-07-29T20:25:04.0612663Z [INFO] * Staging repository at https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17\n2025-07-29T20:25:04.0614508Z [INFO] * Uploading locally staged artifacts to profile org.kohsuke\n2025-07-29T20:25:04.0659242Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar.asc\n2025-07-29T20:25:04.6077033Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar.asc (488 B at 900 B/s)\n2025-07-29T20:25:04.6081763Z [INFO] Downloading from sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/maven-metadata.xml\n2025-07-29T20:25:04.7329231Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/maven-metadata.xml\n2025-07-29T20:25:05.3348018Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/maven-metadata.xml (315 B at 523 B/s)\n2025-07-29T20:25:05.3364339Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar.asc\n2025-07-29T20:25:05.6253859Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar.asc (488 B at 1.7 kB/s)\n2025-07-29T20:25:05.6261209Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom.asc\n2025-07-29T20:25:05.8646568Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom.asc (488 B at 2.0 kB/s)\n2025-07-29T20:25:05.8654406Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar\n2025-07-29T20:25:07.2160449Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar (2.4 MB at 1.8 MB/s)\n2025-07-29T20:25:07.2169227Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar\n2025-07-29T20:25:08.0248105Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar (653 kB at 808 kB/s)\n2025-07-29T20:25:08.0251530Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom\n2025-07-29T20:25:08.7545703Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom (36 kB at 50 kB/s)\n2025-07-29T20:25:08.7558010Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar\n2025-07-29T20:25:09.4824315Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar (381 kB at 524 kB/s)\n2025-07-29T20:25:09.4830753Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar.asc\n2025-07-29T20:25:09.7329585Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar.asc (488 B at 2.0 kB/s)\n2025-07-29T20:25:09.7332314Z [INFO] * Upload of locally staged artifacts finished.\n2025-07-29T20:25:09.7333893Z [INFO] * Closing staging repository with ID \"org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17\".\n2025-07-29T20:25:21.0027055Z [ERROR] Remote staging finished with a failure: 400 - Bad Request\n2025-07-29T20:25:21.0033011Z [INFO] ------------------------------------------------------------------------\n2025-07-29T20:25:21.0034141Z [INFO] BUILD FAILURE\n2025-07-29T20:25:21.0035177Z [INFO] ------------------------------------------------------------------------\n2025-07-29T20:25:21.0036666Z [INFO] Total time: 58.002 s\n2025-07-29T20:25:21.0037305Z [INFO] Finished at: 2025-07-29T20:25:21Z\n2025-07-29T20:25:21.0038257Z [INFO] ------------------------------------------------------------------------\n2025-07-29T20:25:21.0042398Z [ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.7.0:deploy (injected-nexus-deploy) on project github-api-bridged: Remote staging failed: 400 - Bad Request -> [Help 1]\n2025-07-29T20:25:21.0044028Z [ERROR] \n2025-07-29T20:25:21.0044784Z [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.\n2025-07-29T20:25:21.0045816Z [ERROR] Re-run Maven using the -X switch to enable full debug logging.\n2025-07-29T20:25:21.0046617Z [ERROR] \n2025-07-29T20:25:21.0047546Z [ERROR] For more information about the errors and possible solutions, please read the following articles:\n2025-07-29T20:25:21.0048439Z [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException\n2025-07-29T20:25:21.0544587Z ##[error]Process completed with exit code 1.\n2025-07-29T20:25:21.0652621Z Post job cleanup.\n2025-07-29T20:25:21.2338798Z Removing private key from keychain\n2025-07-29T20:25:21.2639433Z Post job cleanup.\n2025-07-29T20:25:21.3579766Z [command]/usr/bin/git version\n2025-07-29T20:25:21.3623859Z git version 2.50.1\n2025-07-29T20:25:21.3669780Z Temporarily overriding HOME='/home/runner/work/_temp/f63c6d9c-0210-4993-9eab-7c153795d64a' before making global git config changes\n2025-07-29T20:25:21.3671649Z Adding repository directory to the temporary git global config as a safe directory\n2025-07-29T20:25:21.3685669Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/github-api/github-api\n2025-07-29T20:25:21.3725232Z [command]/usr/bin/git config --local --name-only --get-regexp core\\.sshCommand\n2025-07-29T20:25:21.3760717Z [command]/usr/bin/git submodule foreach --recursive sh -c \"git config --local --name-only --get-regexp 'core\\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :\"\n2025-07-29T20:25:21.4023643Z [command]/usr/bin/git config --local --name-only --get-regexp http\\.https\\:\\/\\/github\\.com\\/\\.extraheader\n2025-07-29T20:25:21.4049117Z http.https://github.com/.extraheader\n2025-07-29T20:25:21.4062530Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader\n2025-07-29T20:25:21.4096473Z [command]/usr/bin/git submodule foreach --recursive sh -c \"git config --local --name-only --get-regexp 'http\\.https\\:\\/\\/github\\.com\\/\\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :\"\n2025-07-29T20:25:21.4481669Z Cleaning up orphan processes\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2120/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2120/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2145", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2145/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2145/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2145/events", + "html_url": "https://github.com/hub4j/github-api/issues/2145", + "id": 3451557731, + "node_id": "I_kwDOAAlq-s7Nupdj", + "number": 2145, + "title": "How to extract the dependencies of a repository?", + "user": { + "login": "tohidemyname", + "id": 42423544, + "node_id": "MDQ6VXNlcjQyNDIzNTQ0", + "avatar_url": "https://avatars.githubusercontent.com/u/42423544?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tohidemyname", + "html_url": "https://github.com/tohidemyname", + "followers_url": "https://api.github.com/users/tohidemyname/followers", + "following_url": "https://api.github.com/users/tohidemyname/following{/other_user}", + "gists_url": "https://api.github.com/users/tohidemyname/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tohidemyname/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tohidemyname/subscriptions", + "organizations_url": "https://api.github.com/users/tohidemyname/orgs", + "repos_url": "https://api.github.com/users/tohidemyname/repos", + "events_url": "https://api.github.com/users/tohidemyname/events{/privacy}", + "received_events_url": "https://api.github.com/users/tohidemyname/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2025-09-25T02:12:02Z", + "updated_at": "2025-10-23T18:12:16Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I notice that Github has a rest api to retrieve the dependencies of a repository:\n\nhttps://docs.github.com/en/rest/dependency-graph/sboms?apiVersion=2022-11-28#export-a-software-bill-of-materials-sbom-for-a-repository\n\nHowever, I did not find a corresponding API call in github-api. I tried to implement the api by myself:\n\n```\npublic List getDependGraph() throws IOException {\n\t\tDependence[] list = root().createRequest()\n\t .withUrlPath(getApiTailUrl(\"dependency-graph/sbom\"))\n\t .fetch(Dependence[].class);\n\t return Arrays.asList(list);\n\t\t\n\t}\n```\n\nThe above code returns a 404 error:\n\n```\norg.kohsuke.github.GHFileNotFoundException: https://api.github.com/repos/sgtest/pinned-lucene/stats/dependency-graph/sbom {\n \"message\": \"Not Found\",\n \"documentation_url\": \"https://docs.github.com/rest\",\n \"status\": \"404\"\n}\n```\n\nI tried to call the url:\n`https://api.github.com/repos/sgtest/pinned-lucene/stats/dependency-graph/sbom`\n\nIt also returns a 404 error. \n\nIs this a problem in Github? Would you please give me some suggestions on how to implement the API for github-api?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2145/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2145/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2106", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2106/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2106/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2106/events", + "html_url": "https://github.com/hub4j/github-api/issues/2106", + "id": 3128804786, + "node_id": "I_kwDOAAlq-s66fcWy", + "number": 2106, + "title": "GHPullRequestReviewComment.getLine() always returns -1", + "user": { + "login": "tsantalis", + "id": 1483516, + "node_id": "MDQ6VXNlcjE0ODM1MTY=", + "avatar_url": "https://avatars.githubusercontent.com/u/1483516?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tsantalis", + "html_url": "https://github.com/tsantalis", + "followers_url": "https://api.github.com/users/tsantalis/followers", + "following_url": "https://api.github.com/users/tsantalis/following{/other_user}", + "gists_url": "https://api.github.com/users/tsantalis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tsantalis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tsantalis/subscriptions", + "organizations_url": "https://api.github.com/users/tsantalis/orgs", + "repos_url": "https://api.github.com/users/tsantalis/repos", + "events_url": "https://api.github.com/users/tsantalis/events{/privacy}", + "received_events_url": "https://api.github.com/users/tsantalis/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-06-09T00:16:26Z", + "updated_at": "2025-10-23T18:06:05Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\nGHPullRequestReviewComment.getLine() API does not return accurate value.\nAs a matter of fact it always returns -1\n\n**To Reproduce**\nSteps to reproduce the behavior:\nFor the following PR review comment the line is 422\nhttps://api.github.com/repos/JabRef/jabref/pulls/comments/2127829134\n```java\n//PR URL: https://github.com/JabRef/jabref/pull/11845\nGHRepository repository = ...;\nGHPullRequest pullRequest = repository.getPullRequest(11845);\nPagedIterable reviews = pullRequest.listReviews();\n\nfor (GHPullRequestReview review : reviews) {\n PagedIterable comments = review.listReviewComments();\n for (GHPullRequestReviewComment comment : comments) {\n String path = comment.getPath();\n int lineNumber = comment.getLine();\n }\n}\n```\n\n**Expected behavior**\nThe line number for\nhttps://api.github.com/repos/JabRef/jabref/pulls/comments/2127829134\nshould be 422 instead of -1\n\n**Desktop (please complete the following information):**\n - OS: iOS\n - Browser [Firefox]\n - Version [139]\n\n**Additional context**\nAdd any other context about the problem here.\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2106/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2106/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2126", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2126/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2126/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2126/events", + "html_url": "https://github.com/hub4j/github-api/issues/2126", + "id": 3327323318, + "node_id": "I_kwDOAAlq-s7GUuy2", + "number": 2126, + "title": "Update documentation on pluggable Http Client ", + "user": { + "login": "ErrorxCode", + "id": 65817230, + "node_id": "MDQ6VXNlcjY1ODE3MjMw", + "avatar_url": "https://avatars.githubusercontent.com/u/65817230?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ErrorxCode", + "html_url": "https://github.com/ErrorxCode", + "followers_url": "https://api.github.com/users/ErrorxCode/followers", + "following_url": "https://api.github.com/users/ErrorxCode/following{/other_user}", + "gists_url": "https://api.github.com/users/ErrorxCode/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ErrorxCode/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ErrorxCode/subscriptions", + "organizations_url": "https://api.github.com/users/ErrorxCode/orgs", + "repos_url": "https://api.github.com/users/ErrorxCode/repos", + "events_url": "https://api.github.com/users/ErrorxCode/events{/privacy}", + "received_events_url": "https://api.github.com/users/ErrorxCode/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 2070644911, + "node_id": "MDU6TGFiZWwyMDcwNjQ0OTEx", + "url": "https://api.github.com/repos/hub4j/github-api/labels/documentation", + "name": "documentation", + "color": "6ee5cb", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-08-16T14:21:39Z", + "updated_at": "2025-10-23T18:02:32Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The Library uses Java HttpClient, which was removed in Android 7. Using this library on > Android 7 results in the following error:\n\n`NoClassDefFoundError: Failed resolution of: Ljava/net/http/HttpClient;`\n\n\n**To Reproduce**\nRun `GitHub.connectUsingOAuth()` on android (API > 24)\n\n**Expected behaviour**\nNo error, connection established\n\n**Desktop (please complete the following information):**\n - OS: Android\n - Version 16\n\n\nPlease migrate from java **HttpClient** to OkHttp to keep wider support", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2126/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2126/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2009", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2009/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2009/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2009/events", + "html_url": "https://github.com/hub4j/github-api/issues/2009", + "id": 2789691143, + "node_id": "I_kwDOAAlq-s6mR08H", + "number": 2009, + "title": "`GitHubAbuseLimitHandler#isError` fails to detect some secondary rate limit errors", + "user": { + "login": "yrodiere", + "id": 412878, + "node_id": "MDQ6VXNlcjQxMjg3OA==", + "avatar_url": "https://avatars.githubusercontent.com/u/412878?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/yrodiere", + "html_url": "https://github.com/yrodiere", + "followers_url": "https://api.github.com/users/yrodiere/followers", + "following_url": "https://api.github.com/users/yrodiere/following{/other_user}", + "gists_url": "https://api.github.com/users/yrodiere/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yrodiere/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yrodiere/subscriptions", + "organizations_url": "https://api.github.com/users/yrodiere/orgs", + "repos_url": "https://api.github.com/users/yrodiere/repos", + "events_url": "https://api.github.com/users/yrodiere/events{/privacy}", + "received_events_url": "https://api.github.com/users/yrodiere/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 9, + "created_at": "2025-01-15T12:24:43Z", + "updated_at": "2025-09-05T19:31:30Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "(Maintainer's note: see also #1975 )\n**Describe the bug**\n\n#1895 attempted to detect more errors related to secondary rate limits, but it seems there are more.\n\nIt appears GitHub APIs -- https://api.github.com/search/issues in particular, maybe more -- can hit a secondary limit and just return a 403 error, with no particular header indicating that a limit was reached. No `Retry-After`, no `gh-limited-by`, nothing. Only the body response explains \"You have exceeded a secondary rate limit. Please wait a few minutes before you try again\". (and in fact waiting 30s/1min is enough).\n\nThis, understandably, doesn't get caught by `GitHubAbuseLimitHandler#isError`, and results in the request simply failing.\n\n**To Reproduce**\n\nSend the following request a few dozen times (or just a dozen when unauthenticated):\n\nhttps://api.github.com/search/issues?sort=updated&order=desc&q=repo%3Ayrodiere%2Fquarkus-github-playground+is%3Aissue+is%3Aopen+label%3Atriage%2Fneeds-feedback%2Ctriage%2Fneeds-reproducer+label%3Aarea%2Fhibernate-search+updated%3A%3C2025-01-15T12%3A03%3A47.243460581\n\nObviously my actual use case is not to send the _same_ request over and over, but it's enough to reproduce the problem.\n\nInterestingly, you can just click that URL in your browser, refresh quickly a couple times, and you'll be able to observe the exact error I'm running into: HTTP 403 with no particular retry header.\n\nSee bottom of this messsage for more logs.\n\n**Expected behavior**\n\nIdeally, I'd expect such requests to be detected as secondary rate limit errors, and the client to just wait and retry. For my use case it's fine to wait a minute.\n\nFailing that, I'd settle for a way to override `GitHubAbuseLimitHandler#isError` and implement some dirty logic based on the response body in there. But this method is currently package-protected.\n\n**Desktop (please complete the following information):**\n - OS: Fedora 41\n - Browser [e.g. chrome, safari]: no browser involved\n - Version [e.g. 22]: no browser involved\n\n**Additional context**\n\nHere is a failing request/response with all details/headers. I got it using `-Djdk.httpclient.HttpClient.log=all`.\n\n```\n2025-01-15 13:04:53,295 INFO [jdk.htt.HttpClient] (executor-thread-1) REQUEST: https://api.github.com/search/issues?sort=updated&order=desc&q=repo%3Ayrodiere%2Fquarkus-github-playground+is%3Aissue+is%3Aopen+label%3Atriage%2Fneeds-feedback%2Ctriage%2Fneeds-reproducer+label%3Aarea%2Fhibernate-search+updated%3A%3C2025-01-15T12%3A03%3A47.243460581 GET\n2025-01-15 13:04:53,295 INFO [jdk.htt.HttpClient] (executor-thread-1) HEADERS: REQUEST HEADERS:\nGET /search/issues?sort=updated&order=desc&q=repo%3Ayrodiere%2Fquarkus-github-playground+is%3Aissue+is%3Aopen+label%3Atriage%2Fneeds-feedback%2Ctriage%2Fneeds-reproducer+label%3Aarea%2Fhibernate-search+updated%3A%3C2025-01-15T12%3A03%3A47.243460581 HTTP/1.1\nContent-Length: 0\nHost: api.github.com\nUser-Agent: Java-http-client/17.0.13\nAccept: application/vnd.github+json\nAccept-Encoding: gzip\nAuthorization: token \nX-GitHub-Api-Version: 2022-11-28\n\n\n2025-01-15 13:04:53,422 INFO [jdk.htt.HttpClient] (HttpClient-3-Worker-0) HEADERS: RESPONSE HEADERS:\n access-control-allow-origin: *\n access-control-expose-headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset\n content-encoding: gzip\n content-security-policy: default-src 'none'\n content-type: application/json; charset=utf-8\n date: Wed, 15 Jan 2025 12:04:53 GMT\n referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin\n server: github.com\n strict-transport-security: max-age=31536000; includeSubdomains; preload\n transfer-encoding: chunked\n vary: Accept-Encoding, Accept, X-Requested-With\n x-content-type-options: nosniff\n x-frame-options: deny\n x-github-api-version-selected: 2022-11-28\n x-github-media-type: github.v3; format=json\n x-github-request-id: \n x-ratelimit-limit: 30\n x-ratelimit-remaining: 21\n x-ratelimit-reset: 1736942747\n x-ratelimit-resource: search\n x-ratelimit-used: 9\n x-xss-protection: 0\n\n\n2025-01-15 13:04:53,423 INFO [jdk.htt.HttpClient] (HttpClient-3-Worker-0) RESPONSE: (GET https://api.github.com/search/issues?sort=updated&order=desc&q=repo%3Ayrodiere%2Fquarkus-github-playground+is%3Aissue+is%3Aopen+label%3Atriage%2Fneeds-feedback%2Ctriage%2Fneeds-reproducer+label%3Aarea%2Fhibernate-search+updated%3A%3C2025-01-15T12%3A03%3A47.243460581) 403 HTTP_1_1 Local port: 57158\n```\n\nI end up with this error, proving the secondary limit error wasn't detected:\n\n```\norg.kohsuke.github.GHException: Failed to retrieve https://api.github.com/search/issues?sort=updated&order=desc&q=repo%3Ayrodiere%2Fquarkus-github-playground+is%3Aissue+is%3Aopen+label%3Atriage%2Fneeds-feedback%2Ctriage%2Fneeds-reproducer+label%3Aarea%2Fhibernate-search+updated%3A%3C2025-01-15T12%3A03%3A47.243460581\n at org.kohsuke.github.GitHubPageIterator.fetch(GitHubPageIterator.java:157)\n at org.kohsuke.github.GitHubPageIterator.hasNext(GitHubPageIterator.java:93)\n at org.kohsuke.github.PagedSearchIterable$1.hasNext(PagedSearchIterable.java:111)\n at org.kohsuke.github.PagedIterator.fetch(PagedIterator.java:116)\n at org.kohsuke.github.PagedIterator.hasNext(PagedIterator.java:84)\n at java.base/java.util.Spliterators$IteratorSpliterator.tryAdvance(Spliterators.java:1855)\n at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.lambda$initPartialTraversalState$0(StreamSpliterators.java:292)\n at java.base/java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.fillBuffer(StreamSpliterators.java:206)\n at java.base/java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.doAdvance(StreamSpliterators.java:161)\n at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.tryAdvance(StreamSpliterators.java:298)\n at java.base/java.util.Spliterators$1Adapter.hasNext(Spliterators.java:681)\n at io.quarkus.github.lottery.draw.Lottery$Draw.runSingleRound(Lottery.java:286)\n at io.quarkus.github.lottery.draw.Lottery.draw(Lottery.java:80)\n at io.quarkus.github.lottery.LotteryService.doDrawForRepository(LotteryService.java:109)\n at io.quarkus.github.lottery.LotteryService.drawForRepository(LotteryService.java:82)\n at io.quarkus.github.lottery.LotteryService.draw(LotteryService.java:66)\n at io.quarkus.github.lottery.LotteryService_ClientProxy.draw(Unknown Source)\n at io.quarkus.github.lottery.LotteryCli$DrawCommand.run(LotteryCli.java:27)\n at io.quarkus.github.lottery.LotteryCliCommandDispatcherImpl.dispatch(Unknown Source)\n at io.quarkus.github.lottery.LotteryCliCommandDispatcherImpl_Multiplexer.dispatch_9c21b751bd1c3c76c9e9f8d4cbcacbc05e9e7ed7(Unknown Source)\n at io.quarkus.github.lottery.LotteryCliCommandDispatcherImpl_Multiplexer_Observer_dispatch_9c21b751bd1c3c76c9e9f8d4cbcacbc05e9e7ed7_usg3oRfZFhFtsdK_zfgxrYi5m6Q.notify(Unknown Source)\n at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:351)\n at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:333)\n at io.quarkus.arc.impl.EventImpl$1.get(EventImpl.java:110)\n at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)\n at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:637)\n at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2675)\n at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2654)\n at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1627)\n at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1594)\n at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)\n at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)\n at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n at java.base/java.lang.Thread.run(Thread.java:840)\nCaused by: org.kohsuke.github.HttpException: {\n \"documentation_url\": \"https://docs.github.com/free-pro-team@latest/rest/overview/rate-limits-for-the-rest-api#about-secondary-rate-limits\",\n \"message\": \"You have exceeded a secondary rate limit. Please wait a few minutes before you try again. If you reach out to GitHub Support for help, please include the request ID 6F00:24CFC5:.\"\n}\n at org.kohsuke.github.GitHubConnectorResponseErrorHandler$1.onError(GitHubConnectorResponseErrorHandler.java:83)\n at org.kohsuke.github.GitHubClient.detectKnownErrors(GitHubClient.java:504)\n at org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:464)\n at org.kohsuke.github.GitHubPageIterator.fetch(GitHubPageIterator.java:146)\n ... 33 more\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2009/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2009/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1975", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1975/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1975/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1975/events", + "html_url": "https://github.com/hub4j/github-api/issues/1975", + "id": 2604556081, + "node_id": "I_kwDOAAlq-s6bPl8x", + "number": 1975, + "title": "Implement \"Secondary rate limit\" behavior to internally throttle querying ", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 5, + "created_at": "2024-10-22T07:39:26Z", + "updated_at": "2025-09-04T16:55:29Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "See #1805 \nSee #1842 \nSee #2009\n\nThis docs page describes secondary rate limit behavior: \nhttps://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28#about-secondary-rate-limits\n\nAs of this reading it says: \n> You may encounter a secondary rate limit if you:\n\n> \n> * Make too many concurrent requests. No more than 100 concurrent requests are allowed. This limit is shared across the REST API and GraphQL API.\n> * Make too many requests to a single endpoint per minute. No more than 900 points per minute are allowed for REST API endpoints, and no more than 2,000 points per minute are allowed for the GraphQL API endpoint. For more information about points, see \"[Calculating points for the secondary rate limit](https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28#calculating-points-for-the-secondary-rate-limit).\"\n> * Make too many requests per minute. No more than 90 seconds of CPU time per 60 seconds of real time is allowed. No more than 60 seconds of this CPU time may be for the GraphQL API. You can roughly estimate the CPU time by measuring the total response time for your API requests.\n> * Create too much content on GitHub in a short amount of time. In general, no more than 80 content-generating requests per minute and no more than 500 content-generating requests per hour are allowed. Some endpoints have lower content creation limits. Content creation limits include actions taken on the GitHub web interface as well as via the REST API and GraphQL API.\n> \n> These secondary rate limits are subject to change without notice. You may also encounter a secondary rate limit for undisclosed reasons.\n\nThese are incredibly loosely defined guides and you cannot query for them ahead of time. 👎 It looks like we need to take the path some users have suggested and make rate limiting much more resilient, potentially allowing users to write their own rate limit strategies for handling secondary rate limits. \n\nThe current internal `GitHubRateLimitChecker` would need to be replaced by a `PrimaryGitHubRateLimiter` which extends a new `GitHubRateLimiter` class/interface. Then each of the above bullet points would become a new rate limit tracking/enforcing class. All of them would need to be called before and after each query, and maintain their own configuration and calculated state. `GitHubRateLimiter` would provide the API and possibly helper functions to make that easier to do right. \n\nI think the basic API would be that the method call before a request is sent, would return an `Optional` and if more than one limiter returns a Duration the longest one is used. Or maybe return an optional record that includes a `reason` message and a duration, perhaps also a logLevel/severity. Make it easier to produce meaningful output. \n\n\n ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1975/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1975/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2115", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2115/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2115/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2115/events", + "html_url": "https://github.com/hub4j/github-api/issues/2115", + "id": 3234980989, + "node_id": "I_kwDOAAlq-s7A0eR9", + "number": 2115, + "title": "Search API does not support advanced search will stop working on September 4, 2025", + "user": { + "login": "donce", + "id": 1409983, + "node_id": "MDQ6VXNlcjE0MDk5ODM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1409983?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/donce", + "html_url": "https://github.com/donce", + "followers_url": "https://api.github.com/users/donce/followers", + "following_url": "https://api.github.com/users/donce/following{/other_user}", + "gists_url": "https://api.github.com/users/donce/gists{/gist_id}", + "starred_url": "https://api.github.com/users/donce/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/donce/subscriptions", + "organizations_url": "https://api.github.com/users/donce/orgs", + "repos_url": "https://api.github.com/users/donce/repos", + "events_url": "https://api.github.com/users/donce/events{/privacy}", + "received_events_url": "https://api.github.com/users/donce/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-07-16T08:24:12Z", + "updated_at": "2025-07-16T08:26:16Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "`GHPullRequestSearchBuilder` is built on the previous GitHub API, which does not use advanced search.\n\nOn September 4, 2025, advanced search will be enabled by default, but currently, it's not supported (from [docs](https://docs.github.com/en/rest/search/search?apiVersion=2022-11-28#search-issues-and-pull-requests)):\n\n>Warning\n>Notice: Search for issues and pull requests will be overridden by advanced search on September 4, 2025. You can read more about this change on [the GitHub blog](https://github.blog/changelog/2025-03-06-github-issues-projects-api-support-for-issues-advanced-search-and-more/).\n\nI think the github client should support that - as an opt-in now, but after September 4, it will be the only possible way.\n\n\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2115/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2115/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2102", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2102/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2102/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2102/events", + "html_url": "https://github.com/hub4j/github-api/issues/2102", + "id": 3072490567, + "node_id": "I_kwDOAAlq-s63InxH", + "number": 2102, + "title": "Cannot retrieve author from github release", + "user": { + "login": "solonovamax", + "id": 46940694, + "node_id": "MDQ6VXNlcjQ2OTQwNjk0", + "avatar_url": "https://avatars.githubusercontent.com/u/46940694?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/solonovamax", + "html_url": "https://github.com/solonovamax", + "followers_url": "https://api.github.com/users/solonovamax/followers", + "following_url": "https://api.github.com/users/solonovamax/following{/other_user}", + "gists_url": "https://api.github.com/users/solonovamax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/solonovamax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/solonovamax/subscriptions", + "organizations_url": "https://api.github.com/users/solonovamax/orgs", + "repos_url": "https://api.github.com/users/solonovamax/repos", + "events_url": "https://api.github.com/users/solonovamax/events{/privacy}", + "received_events_url": "https://api.github.com/users/solonovamax/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-05-19T04:52:41Z", + "updated_at": "2025-05-24T16:47:22Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\nAuthor (`GHUser`) is not included in the `GHRelease` object, even though it is present in the api response.\n\nUnsure if this behaviour was changed in some past api update.\n\n**Expected behavior**\nAuthor is included.\n\n**Additional context**\napi docs: https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#list-releases\n\nexample api response:\n```json\n[\n {\n \"url\": \"https://api.github.com/repos/hashicorp/terraform/releases/218598268\",\n \"assets_url\": \"https://api.github.com/repos/hashicorp/terraform/releases/218598268/assets\",\n \"upload_url\": \"https://uploads.github.com/repos/hashicorp/terraform/releases/218598268/assets{?name,label}\",\n \"html_url\": \"https://github.com/hashicorp/terraform/releases/tag/v1.12.0\",\n \"id\": 218598268,\n \"author\": {\n \"login\": \"hc-github-team-es-release-engineering\",\n \"id\": 82989873,\n \"node_id\": \"MDQ6VXNlcjgyOTg5ODcz\",\n \"avatar_url\": \"https://avatars.githubusercontent.com/u/82989873?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/hc-github-team-es-release-engineering\",\n \"html_url\": \"https://github.com/hc-github-team-es-release-engineering\",\n \"followers_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/followers\",\n \"following_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/orgs\",\n \"repos_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/repos\",\n \"events_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/received_events\",\n \"type\": \"User\",\n \"user_view_type\": \"public\",\n \"site_admin\": false\n },\n \"node_id\": \"RE_kwDOAQ6CpM4NB4t8\",\n \"tag_name\": \"v1.12.0\",\n \"target_commitish\": \"f9e9a59d7b5b48acf343e07fab768464bcdde4d7\",\n \"name\": \"v1.12.0\",\n \"draft\": false,\n \"prerelease\": false,\n \"created_at\": \"2025-05-14T14:11:25Z\",\n \"published_at\": \"2025-05-14T15:15:45Z\",\n \"assets\": [],\n \"tarball_url\": \"https://api.github.com/repos/hashicorp/terraform/tarball/v1.12.0\",\n \"zipball_url\": \"https://api.github.com/repos/hashicorp/terraform/zipball/v1.12.0\",\n \"body\": \"[truncated for brevity]\",\n \"reactions\": {\n \"url\": \"https://api.github.com/repos/hashicorp/terraform/releases/218598268/reactions\",\n \"total_count\": 11,\n \"+1\": 1,\n \"-1\": 0,\n \"laugh\": 0,\n \"hooray\": 0,\n \"confused\": 0,\n \"heart\": 0,\n \"rocket\": 10,\n \"eyes\": 0\n }\n }\n]\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2102/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2102/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2083", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2083/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2083/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2083/events", + "html_url": "https://github.com/hub4j/github-api/issues/2083", + "id": 2980993460, + "node_id": "I_kwDOAAlq-s6xrlm0", + "number": 2083, + "title": "OSGi Manifest - add maven plugin", + "user": { + "login": "stbischof", + "id": 33224746, + "node_id": "MDQ6VXNlcjMzMjI0NzQ2", + "avatar_url": "https://avatars.githubusercontent.com/u/33224746?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/stbischof", + "html_url": "https://github.com/stbischof", + "followers_url": "https://api.github.com/users/stbischof/followers", + "following_url": "https://api.github.com/users/stbischof/following{/other_user}", + "gists_url": "https://api.github.com/users/stbischof/gists{/gist_id}", + "starred_url": "https://api.github.com/users/stbischof/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/stbischof/subscriptions", + "organizations_url": "https://api.github.com/users/stbischof/orgs", + "repos_url": "https://api.github.com/users/stbischof/repos", + "events_url": "https://api.github.com/users/stbischof/events{/privacy}", + "received_events_url": "https://api.github.com/users/stbischof/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-04-08T21:30:08Z", + "updated_at": "2025-04-13T06:54:04Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I would like to use this lib in an OSGi Framework. For this i would need some Metadata in the Manifest.MF.\n\nI would create a PR that adds this support using the bnd-maven-plugin.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2083/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2083/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2082", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2082/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2082/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2082/events", + "html_url": "https://github.com/hub4j/github-api/issues/2082", + "id": 2973118122, + "node_id": "I_kwDOAAlq-s6xNi6q", + "number": 2082, + "title": "Update Wiremock to v3 and JUnit5", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-04-04T18:38:07Z", + "updated_at": "2025-04-04T18:38:23Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "See \nhttps://wiremock.org/docs/junit-jupiter/\n\n GithubWireMockRule creates and manages multiple WireMockServers. Need to do the same for JUnit5 but not sure how composable the JUnit5 WireMock extension is. Might need to move to an abstract base test class that instantiates all the servers. \n\nI think v3 is Java 11+ only but if it isn't do that as well. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2082/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2082/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2076", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2076/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2076/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2076/events", + "html_url": "https://github.com/hub4j/github-api/issues/2076", + "id": 2957281274, + "node_id": "I_kwDOAAlq-s6wRIf6", + "number": 2076, + "title": "Inconsistent use of glob imports", + "user": { + "login": "solonovamax", + "id": 46940694, + "node_id": "MDQ6VXNlcjQ2OTQwNjk0", + "avatar_url": "https://avatars.githubusercontent.com/u/46940694?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/solonovamax", + "html_url": "https://github.com/solonovamax", + "followers_url": "https://api.github.com/users/solonovamax/followers", + "following_url": "https://api.github.com/users/solonovamax/following{/other_user}", + "gists_url": "https://api.github.com/users/solonovamax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/solonovamax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/solonovamax/subscriptions", + "organizations_url": "https://api.github.com/users/solonovamax/orgs", + "repos_url": "https://api.github.com/users/solonovamax/repos", + "events_url": "https://api.github.com/users/solonovamax/events{/privacy}", + "received_events_url": "https://api.github.com/users/solonovamax/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-03-28T21:25:41Z", + "updated_at": "2025-03-29T18:00:33Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Some classes use glob imports, while others don't. The use of glob imports across files seems to be rather inconsistent.\n\nCurrently, with spotless, there doesn't seem to be a way to enforce using/disallowing glob imports, however there is an open issue for it: https://github.com/diffplug/spotless/issues/649.\nSome comments on the issue suggest using\n```xml\n\n Remove wildcard imports\n import\\s+(?:static\\s+)?[^\\*\\s]+\\*;(\\r\\n|\\r|\\n)\n $1\n\n```\nto remove all the glob imports, however this solution will simply remove them and won't replace them with the appropriate imports, causing the compile to fail.\n\nOpened due to discussion in #2074", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2076/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2076/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2075", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2075/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2075/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2075/events", + "html_url": "https://github.com/hub4j/github-api/issues/2075", + "id": 2957271743, + "node_id": "I_kwDOAAlq-s6wRGK_", + "number": 2075, + "title": "Inconsistent use of license header", + "user": { + "login": "solonovamax", + "id": 46940694, + "node_id": "MDQ6VXNlcjQ2OTQwNjk0", + "avatar_url": "https://avatars.githubusercontent.com/u/46940694?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/solonovamax", + "html_url": "https://github.com/solonovamax", + "followers_url": "https://api.github.com/users/solonovamax/followers", + "following_url": "https://api.github.com/users/solonovamax/following{/other_user}", + "gists_url": "https://api.github.com/users/solonovamax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/solonovamax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/solonovamax/subscriptions", + "organizations_url": "https://api.github.com/users/solonovamax/orgs", + "repos_url": "https://api.github.com/users/solonovamax/repos", + "events_url": "https://api.github.com/users/solonovamax/events{/privacy}", + "received_events_url": "https://api.github.com/users/solonovamax/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-03-28T21:21:56Z", + "updated_at": "2025-03-29T18:00:16Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "There is an inconsistent use of the license header.\nCurrently, some files have a license header added, but others don't.\n\nSince you're using spotless, it can be used to enforce the license header:\nhttps://github.com/diffplug/spotless/tree/main/plugin-maven#license-header\n\nOpened due to discussion in #2074", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2075/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2075/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2058", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2058/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2058/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2058/events", + "html_url": "https://github.com/hub4j/github-api/issues/2058", + "id": 2913781594, + "node_id": "I_kwDOAAlq-s6trMda", + "number": 2058, + "title": "Enable hiding of comments", + "user": { + "login": "koppor", + "id": 1366654, + "node_id": "MDQ6VXNlcjEzNjY2NTQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/1366654?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/koppor", + "html_url": "https://github.com/koppor", + "followers_url": "https://api.github.com/users/koppor/followers", + "following_url": "https://api.github.com/users/koppor/following{/other_user}", + "gists_url": "https://api.github.com/users/koppor/gists{/gist_id}", + "starred_url": "https://api.github.com/users/koppor/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/koppor/subscriptions", + "organizations_url": "https://api.github.com/users/koppor/orgs", + "repos_url": "https://api.github.com/users/koppor/repos", + "events_url": "https://api.github.com/users/koppor/events{/privacy}", + "received_events_url": "https://api.github.com/users/koppor/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2025-03-12T12:20:51Z", + "updated_at": "2025-03-28T16:33:37Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I have comment count 3, but the PR has much more: https://github.com/JabRef/jabref/pull/12710\n\nI \"deleted\" the other comments using `comment.delete()`. It seems this has no effect on the UI.\n\nIn the UI, one can use \"Hide\"\n\n![Image](https://github.com/user-attachments/assets/5522c8c3-0764-49bf-bcc1-86a472b24d06)\n\n![Image](https://github.com/user-attachments/assets/623772ef-30b7-4b04-bac7-abc174289702)\n\nShould be possible via API, too?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2058/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2058/timeline", + "performed_via_github_app": null, + "state_reason": "reopened", + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1454", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1454/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1454/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1454/events", + "html_url": "https://github.com/hub4j/github-api/issues/1454", + "id": 1229507490, + "node_id": "I_kwDOAAlq-s5JSMui", + "number": 1454, + "title": "Please provide streaming for upload large content ", + "user": { + "login": "Vampire", + "id": 325196, + "node_id": "MDQ6VXNlcjMyNTE5Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/325196?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Vampire", + "html_url": "https://github.com/Vampire", + "followers_url": "https://api.github.com/users/Vampire/followers", + "following_url": "https://api.github.com/users/Vampire/following{/other_user}", + "gists_url": "https://api.github.com/users/Vampire/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Vampire/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Vampire/subscriptions", + "organizations_url": "https://api.github.com/users/Vampire/orgs", + "repos_url": "https://api.github.com/users/Vampire/repos", + "events_url": "https://api.github.com/users/Vampire/events{/privacy}", + "received_events_url": "https://api.github.com/users/Vampire/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 7, + "created_at": "2022-05-09T10:34:22Z", + "updated_at": "2025-03-26T18:56:07Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I have a Gradle build where I build a Docker image tar file which has a size of 166 MiB.\r\nI use the GitHub publish Gradle plugin and tried to upload this Docker image as asset to the release.\r\nThis consistently resulted in an `OutOfMemoryError`.\r\n\r\nThe GitHub publish Gradle plugin under the hood uses this library.\r\nAnd I also easily reproduced it stand-alone.\r\nIn version 1.1xx, you use an `HttpsUrlConnection` without setting it to fixed-length streaming or chunking mode and thus the JRE uses a byte-array output stream to colllect the whole body in RAM to determine the size up-front.\r\nIn version 1.3xx many things changed, but now you use your `GitHubRequest.Builder#with(java.io.InputStream)` method to load the whole file into RAM using `IOUtils.toByteArray`.\r\n\r\nSo at different places both load the whole file into RAM instead of properly streaming it.\r\nPlease support at least giving the size to methods like `uploadAsset` so that the size can be set as HTTP header but the content be streamed, or if GitHub supports it maybe even using chunked mode additionally if no explicit size was given.\r\n\r\nThe problem can pretty easily be reproduced using:\r\n```java\r\ngithub\r\n .getRepository(\"my/repository\")\r\n .listReleases()\r\n .iterator()\r\n .next()\r\n .uploadAsset(\"foo.tar.gz\", new FileInputStream(\"file/that/is/too/large/for/RAM\"), \"application/octet-stream\")\r\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1454/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1454/timeline", + "performed_via_github_app": null, + "state_reason": "reopened", + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1967", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1967/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1967/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1967/events", + "html_url": "https://github.com/hub4j/github-api/issues/1967", + "id": 2564089274, + "node_id": "I_kwDOAAlq-s6Y1OW6", + "number": 1967, + "title": "Branch rename is missing", + "user": { + "login": "sbouchexbellomie-Philips", + "id": 182072604, + "node_id": "U_kgDOCto1HA", + "avatar_url": "https://avatars.githubusercontent.com/u/182072604?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sbouchexbellomie-Philips", + "html_url": "https://github.com/sbouchexbellomie-Philips", + "followers_url": "https://api.github.com/users/sbouchexbellomie-Philips/followers", + "following_url": "https://api.github.com/users/sbouchexbellomie-Philips/following{/other_user}", + "gists_url": "https://api.github.com/users/sbouchexbellomie-Philips/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sbouchexbellomie-Philips/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sbouchexbellomie-Philips/subscriptions", + "organizations_url": "https://api.github.com/users/sbouchexbellomie-Philips/orgs", + "repos_url": "https://api.github.com/users/sbouchexbellomie-Philips/repos", + "events_url": "https://api.github.com/users/sbouchexbellomie-Philips/events{/privacy}", + "received_events_url": "https://api.github.com/users/sbouchexbellomie-Philips/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2024-10-03T13:35:26Z", + "updated_at": "2025-03-23T07:25:04Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Ability to rename a branch is missing\r\n\r\nGHBranch.rename should be added", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1967/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1967/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1965", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1965/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1965/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1965/events", + "html_url": "https://github.com/hub4j/github-api/issues/1965", + "id": 2563920009, + "node_id": "I_kwDOAAlq-s6Y0lCJ", + "number": 1965, + "title": "Deployment deletion is missing", + "user": { + "login": "sbouchexbellomie-Philips", + "id": 182072604, + "node_id": "U_kgDOCto1HA", + "avatar_url": "https://avatars.githubusercontent.com/u/182072604?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sbouchexbellomie-Philips", + "html_url": "https://github.com/sbouchexbellomie-Philips", + "followers_url": "https://api.github.com/users/sbouchexbellomie-Philips/followers", + "following_url": "https://api.github.com/users/sbouchexbellomie-Philips/following{/other_user}", + "gists_url": "https://api.github.com/users/sbouchexbellomie-Philips/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sbouchexbellomie-Philips/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sbouchexbellomie-Philips/subscriptions", + "organizations_url": "https://api.github.com/users/sbouchexbellomie-Philips/orgs", + "repos_url": "https://api.github.com/users/sbouchexbellomie-Philips/repos", + "events_url": "https://api.github.com/users/sbouchexbellomie-Philips/events{/privacy}", + "received_events_url": "https://api.github.com/users/sbouchexbellomie-Philips/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2024-10-03T12:23:11Z", + "updated_at": "2025-03-23T07:24:47Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Ability to delete a deployment is missing\r\n\r\nGHDeployment.delete should be added\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1965/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1965/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2041", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2041/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2041/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2041/events", + "html_url": "https://github.com/hub4j/github-api/issues/2041", + "id": 2871292068, + "node_id": "I_kwDOAAlq-s6rJHCk", + "number": 2041, + "title": "should fromCredentials not be public?", + "user": { + "login": "maxandersen", + "id": 54129, + "node_id": "MDQ6VXNlcjU0MTI5", + "avatar_url": "https://avatars.githubusercontent.com/u/54129?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/maxandersen", + "html_url": "https://github.com/maxandersen", + "followers_url": "https://api.github.com/users/maxandersen/followers", + "following_url": "https://api.github.com/users/maxandersen/following{/other_user}", + "gists_url": "https://api.github.com/users/maxandersen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/maxandersen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/maxandersen/subscriptions", + "organizations_url": "https://api.github.com/users/maxandersen/orgs", + "repos_url": "https://api.github.com/users/maxandersen/repos", + "events_url": "https://api.github.com/users/maxandersen/events{/privacy}", + "received_events_url": "https://api.github.com/users/maxandersen/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 5, + "created_at": "2025-02-22T20:16:12Z", + "updated_at": "2025-03-23T07:21:59Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\nGithubBuilder.fromCredentials is not public and given the auth provider field is not public it is not possible to implement the \"honor .github and env\" manually.\n\nThus should that method not be public? \n\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2041/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2041/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1798", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1798/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1798/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1798/events", + "html_url": "https://github.com/hub4j/github-api/issues/1798", + "id": 2147359719, + "node_id": "I_kwDOAAlq-s5__hvn", + "number": 1798, + "title": "Maven central moving to new publishing model and plugin", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2024-02-21T17:52:31Z", + "updated_at": "2025-03-23T06:52:23Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "It looks like Sonatype is moving to a new model for publishing: \r\nhttps://github.com/sonatype/nexus-public/issues/110#issuecomment-1900500381\r\n\r\nThe project may need to re-register or do some other updates to work in the new system:\r\nhttps://central.sonatype.org/register/central-portal/\r\nhttps://central.sonatype.org/publish/publish-portal-maven/\r\n\r\nIt is still in preview, so this is not urgent. I've started work on this but don't have time to finish it now: \r\nhttps://github.com/hub4j/github-api/tree/feature/new-maven-central-publishing", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1798/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1798/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/521", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/521/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/521/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/521/events", + "html_url": "https://github.com/hub4j/github-api/issues/521", + "id": 447748493, + "node_id": "MDU6SXNzdWU0NDc3NDg0OTM=", + "number": 521, + "title": "GitHub v4 GraphQL API support", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 11, + "created_at": "2019-05-23T16:02:20Z", + "updated_at": "2025-03-19T17:33:15Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The v4 API provides a much more customizable API based on GraphQL. It is out of scope for this library to provide a generalized API the fully leverages the power of GraphQL, but having some way to construct queries for trees of items would be useful. \r\n\r\nhttps://developer.github.com/v4/", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/521/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/521/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2060", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2060/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2060/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2060/events", + "html_url": "https://github.com/hub4j/github-api/issues/2060", + "id": 2922558598, + "node_id": "I_kwDOAAlq-s6uMrSG", + "number": 2060, + "title": "Issues with getMergeCommitSha", + "user": { + "login": "BradPlayerZero", + "id": 172313252, + "node_id": "U_kgDOCkVKpA", + "avatar_url": "https://avatars.githubusercontent.com/u/172313252?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/BradPlayerZero", + "html_url": "https://github.com/BradPlayerZero", + "followers_url": "https://api.github.com/users/BradPlayerZero/followers", + "following_url": "https://api.github.com/users/BradPlayerZero/following{/other_user}", + "gists_url": "https://api.github.com/users/BradPlayerZero/gists{/gist_id}", + "starred_url": "https://api.github.com/users/BradPlayerZero/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/BradPlayerZero/subscriptions", + "organizations_url": "https://api.github.com/users/BradPlayerZero/orgs", + "repos_url": "https://api.github.com/users/BradPlayerZero/repos", + "events_url": "https://api.github.com/users/BradPlayerZero/events{/privacy}", + "received_events_url": "https://api.github.com/users/BradPlayerZero/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-03-15T21:26:52Z", + "updated_at": "2025-03-18T21:06:41Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Two fixes needed for getMergeCommitSha:\n\n /**\n * See GitHub blog post\n *\n * @return the merge commit sha\n * @throws IOException\n * the io exception\n */\n public String getMergeCommitSha() throws IOException {\n populate();\n return merge_commit_sha;\n }\n\nFirst, GitHub has reversed themselves on deprecating merge_commit_id, so the comment should be removed.\n\nSecond, merge_commit_id is part of the list pull request API (get /repos/{owner}/{repo}/pulls), and required, so it should not call populate().\n\n\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2060/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2060/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2061", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2061/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2061/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2061/events", + "html_url": "https://github.com/hub4j/github-api/issues/2061", + "id": 2923132207, + "node_id": "I_kwDOAAlq-s6uO3Uv", + "number": 2061, + "title": "`GHIssue#isPullRequest` is false despite being a PR", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-03-16T15:23:51Z", + "updated_at": "2025-03-17T10:37:01Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\n`isPullRequest` in GHIssue returns false due to `pull_request == null` condition. The PR object was acquired via `payload.getPullRequest()` method of `GHEventPayload.PullRequest` class.\n\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Get an instance of `GHEventPayload.PullRequest` event\n2. Get the pr entity via `payload.getPullRequest()`\n3. Observe that despite object being an instance of `GHPullRequest` the return value of `isPullRequest` method is false.\n\n**Expected behavior**\nexpected true", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2061/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2061/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2062", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2062/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2062/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2062/events", + "html_url": "https://github.com/hub4j/github-api/issues/2062", + "id": 2923159729, + "node_id": "I_kwDOAAlq-s6uO-Cx", + "number": 2062, + "title": "`branch.getProtection()` fails with an exception for ruleset-protected branch", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-03-16T16:11:09Z", + "updated_at": "2025-03-17T10:34:17Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\nIf a branch (`GHBranch`) is protected via rulesets rather than classic (deprecated?) branch protection rules, `GHBranch#isProtected()` returns `true`, but `GHBranch#getProtection` desintegrates with the following exception:\n```\norg.kohsuke.github.GHFileNotFoundException: https://api.github.com/repos/ZooPets/kapybro-demo-dev/branches/main/protection {\"message\":\"Branch not protected\",\"documentation_url\":\"https://docs.github.com/rest/branches/branch-protection#get-branch-protection\",\"status\":\"404\"}\n\tat org.kohsuke.github.GitHubClient.interpretApiError(GitHubClient.java:661) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:480) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:427) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.Requester.fetch(Requester.java:85) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.GHBranch.getProtection(GHBranch.java:112) ~[github-api-unbridged-1.318.jar:na]\n//omitted\nCaused by: java.io.FileNotFoundException: https://api.github.com/repos/ZooPets/kapybro-demo-dev/branches/main/protection\n\tat org.kohsuke.github.GitHubConnectorResponseErrorHandler$1.onError(GitHubConnectorResponseErrorHandler.java:60) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.GitHubClient.detectKnownErrors(GitHubClient.java:504) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:464) ~[github-api-unbridged-1.318.jar:na]\n\t... 179 common frames omitted\n```\n\nMost likely, `GHBranch#isProtected()` will be true for both protection methods, so we need a way to tell them apart without conflating two different methods and later calling wrong endpoints.\nPerhaps a temp solution could be introduced until #1811 is implemented.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2062/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2062/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1811", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1811/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1811/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1811/events", + "html_url": "https://github.com/hub4j/github-api/issues/1811", + "id": 2177274983, + "node_id": "I_kwDOAAlq-s6BxpRn", + "number": 1811, + "title": "Implement API for retrieving and managing rulesets on a repository", + "user": { + "login": "FHannes", + "id": 915760, + "node_id": "MDQ6VXNlcjkxNTc2MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/915760?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/FHannes", + "html_url": "https://github.com/FHannes", + "followers_url": "https://api.github.com/users/FHannes/followers", + "following_url": "https://api.github.com/users/FHannes/following{/other_user}", + "gists_url": "https://api.github.com/users/FHannes/gists{/gist_id}", + "starred_url": "https://api.github.com/users/FHannes/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/FHannes/subscriptions", + "organizations_url": "https://api.github.com/users/FHannes/orgs", + "repos_url": "https://api.github.com/users/FHannes/repos", + "events_url": "https://api.github.com/users/FHannes/events{/privacy}", + "received_events_url": "https://api.github.com/users/FHannes/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2024-03-09T15:42:36Z", + "updated_at": "2025-03-16T16:04:55Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "As far as I can tell, the library currently supports managing branch protection, but not [rulesets](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets). The use of rulesets has some advantages over using branch protection [as listed in the documentation](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets#about-rulesets-protected-branches-and-protected-tags), so it might be useful to add support for them.\r\nAPI reference: https://docs.github.com/en/rest/repos/rules?apiVersion=2022-11-28", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1811/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1811/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2028", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2028/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2028/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2028/events", + "html_url": "https://github.com/hub4j/github-api/issues/2028", + "id": 2843436852, + "node_id": "I_kwDOAAlq-s6pe2c0", + "number": 2028, + "title": "GHMilestone throws NPE on null state", + "user": { + "login": "rnveach", + "id": 5427943, + "node_id": "MDQ6VXNlcjU0Mjc5NDM=", + "avatar_url": "https://avatars.githubusercontent.com/u/5427943?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rnveach", + "html_url": "https://github.com/rnveach", + "followers_url": "https://api.github.com/users/rnveach/followers", + "following_url": "https://api.github.com/users/rnveach/following{/other_user}", + "gists_url": "https://api.github.com/users/rnveach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rnveach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rnveach/subscriptions", + "organizations_url": "https://api.github.com/users/rnveach/orgs", + "repos_url": "https://api.github.com/users/rnveach/repos", + "events_url": "https://api.github.com/users/rnveach/events{/privacy}", + "received_events_url": "https://api.github.com/users/rnveach/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2025-02-10T19:35:34Z", + "updated_at": "2025-02-27T18:05:14Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The following method is not `null` safe:\nhttps://github.com/hub4j/github-api/blob/055638069ce8299629225be7f39395b16d4fe839/src/main/java/org/kohsuke/github/GHMilestone.java#L137-L138\n\nWhenever it is called to get the state of the milestone, and it (`state` field) is `null`, it will throw a `NullPointerException`.\n\nThere is no other method in this class to ascertain the value of this before calling the method. The field is private. Programmers are forced to wrap this in a try/catch in the case it is null.\n\nIt would ease handling this call if it had a `null` check and returned `null` if there is no state.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2028/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2028/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + } + ] +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/3-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/3-search_issues.json new file mode 100644 index 0000000000..70588b20a1 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/3-search_issues.json @@ -0,0 +1,2596 @@ +{ + "total_count": 164, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2181", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2181/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2181/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2181/events", + "html_url": "https://github.com/hub4j/github-api/issues/2181", + "id": 3843541321, + "node_id": "I_kwDOAAlq-s7lF8lJ", + "number": 2181, + "title": "[Feature request] Expose Co-Authored-By Metadata in Commit API", + "user": { + "login": "yeikel", + "id": 8935151, + "node_id": "MDQ6VXNlcjg5MzUxNTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/8935151?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/yeikel", + "html_url": "https://github.com/yeikel", + "followers_url": "https://api.github.com/users/yeikel/followers", + "following_url": "https://api.github.com/users/yeikel/following{/other_user}", + "gists_url": "https://api.github.com/users/yeikel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yeikel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yeikel/subscriptions", + "organizations_url": "https://api.github.com/users/yeikel/orgs", + "repos_url": "https://api.github.com/users/yeikel/repos", + "events_url": "https://api.github.com/users/yeikel/events{/privacy}", + "received_events_url": "https://api.github.com/users/yeikel/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + }, + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2026-01-22T15:48:48Z", + "updated_at": "2026-01-24T21:57:18Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Use Case:** \n\nIdentify all contributors to a commit, including those listed as `Co-Authored-By` in the commit message footer. Currently, the API exposes only the main author and committer, but not co-authors.\n\n```java\n var userEmail = commit.getAuthor().getEmail();\n var commiterEmail = commit.getCommitter().getEmail();\n // How to get the co-author with this API? \n```\n\n**Proposed Solution:** \n- Add a method to `GHCommit` (or similar) that returns a list of co-authors parsed from the commit message.\n- Optionally, provide a structured representation (e.g., name and email) for each co-author.\n\n**Example API:**\n```java\nList getCoAuthors();\n```\n\n\n**References:** \n\nhttps://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors#creating-co-authored-commits-on-the-command-line\n\n**Note to maintainers:** \n\nApologies if this is currently possible, please share any snippet if you can. Thank you in advance! ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2181/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2181/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2166", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2166/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2166/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2166/events", + "html_url": "https://github.com/hub4j/github-api/issues/2166", + "id": 3668649747, + "node_id": "I_kwDOAAlq-s7aqycT", + "number": 2166, + "title": "Compatibility issue with Jackson 2.20 and above", + "user": { + "login": "yeikel", + "id": 8935151, + "node_id": "MDQ6VXNlcjg5MzUxNTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/8935151?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/yeikel", + "html_url": "https://github.com/yeikel", + "followers_url": "https://api.github.com/users/yeikel/followers", + "following_url": "https://api.github.com/users/yeikel/following{/other_user}", + "gists_url": "https://api.github.com/users/yeikel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yeikel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yeikel/subscriptions", + "organizations_url": "https://api.github.com/users/yeikel/orgs", + "repos_url": "https://api.github.com/users/yeikel/repos", + "events_url": "https://api.github.com/users/yeikel/events{/privacy}", + "received_events_url": "https://api.github.com/users/yeikel/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2025-11-26T18:38:53Z", + "updated_at": "2026-01-15T04:18:43Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\n\nI am trying to use the project along with Jackson 2.20.1 but it fails at runtime with the following issue while creating the mapper \n\n```\nException in thread \"main\" java.lang.NoSuchFieldError: Class com.fasterxml.jackson.databind.PropertyNamingStrategy does not have member field 'com.fasterxml.jackson.databind.PropertyNamingStrategy SNAKE_CASE'\n\tat org.kohsuke.github.GitHubClient.(GitHubClient.java:98)\n```\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Configure a project and add Jackson 2.20.1 to the classpath\n2. Try to create a new client\n\n\n**Expected behavior**\n\nThe client is created \n\n**Actual behavior**\n\nIt fails because it cannot find `PropertyNamingStrategy SNAKE_CASE` which no longer exists\n\n**Desktop (please complete the following information):**\n\n - Version: 2.0-rc.5\n\n**Additional context**\n\nUsage: https://github.com/hub4j/github-api/blob/9e09d67fbb35808abc0782e7d0cbf4b6e64a94de/src/main/java/org/kohsuke/github/GitHubClient.java#L124\n\nThis feature was dropped in Jackson 2.20. Using Jackson 2.19.4 works for now but it is not a long term solution\n\nSee https://github.com/FasterXML/jackson-databind/commit/4d2083160fef06e6063a3082f0fdaab8c2803793\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2166/reactions", + "total_count": 3, + "+1": 3, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2166/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2172", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2172/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2172/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2172/events", + "html_url": "https://github.com/hub4j/github-api/issues/2172", + "id": 3695344435, + "node_id": "I_kwDOAAlq-s7cQnsz", + "number": 2172, + "title": "GitHubSanityCachedValue can block whole application", + "user": { + "login": "alexec", + "id": 1142830, + "node_id": "MDQ6VXNlcjExNDI4MzA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1142830?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/alexec", + "html_url": "https://github.com/alexec", + "followers_url": "https://api.github.com/users/alexec/followers", + "following_url": "https://api.github.com/users/alexec/following{/other_user}", + "gists_url": "https://api.github.com/users/alexec/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alexec/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alexec/subscriptions", + "organizations_url": "https://api.github.com/users/alexec/orgs", + "repos_url": "https://api.github.com/users/alexec/repos", + "events_url": "https://api.github.com/users/alexec/events{/privacy}", + "received_events_url": "https://api.github.com/users/alexec/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2025-12-04T16:12:07Z", + "updated_at": "2025-12-16T15:38:13Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "\nThe `GitHubSanityCachedValue` class contains a single shared lock. This means that client to this class can be blocked by another user of the function. \n\nInstead, it might be better to use a read/write lock.\n\n\nhttps://github.com/hub4j/github-api/blob/9e09d67fbb35808abc0782e7d0cbf4b6e64a94de/src/main/java/org/kohsuke/github/GitHubSanityCachedValue.java#L11 ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2172/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2172/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2010", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2010/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2010/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2010/events", + "html_url": "https://github.com/hub4j/github-api/issues/2010", + "id": 2792856326, + "node_id": "I_kwDOAAlq-s6md5sG", + "number": 2010, + "title": "Support new issue types", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2025-01-16T13:57:43Z", + "updated_at": "2025-11-12T23:19:16Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Github introduced new enhancements to issues: issue types, sub-issues, and other minor issues. It seems like they're forcing these issue types by default now, the field is visible even if you don't want to use it, my guess is it will be a default soon.\nSo it makes sense to implement this kind of API.\n\nhttps://github.blog/changelog/2025-01-13-evolving-github-issues-public-preview/\nWhile it's stated that it's in \"preview\", they've already started rolling it out actively without opting in.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2010/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2010/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2156", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2156/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2156/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2156/events", + "html_url": "https://github.com/hub4j/github-api/issues/2156", + "id": 3574234743, + "node_id": "I_kwDOAAlq-s7VCn53", + "number": 2156, + "title": "Enterprise installations not recognized (throws an Exception)", + "user": { + "login": "boriel", + "id": 1433137, + "node_id": "MDQ6VXNlcjE0MzMxMzc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1433137?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/boriel", + "html_url": "https://github.com/boriel", + "followers_url": "https://api.github.com/users/boriel/followers", + "following_url": "https://api.github.com/users/boriel/following{/other_user}", + "gists_url": "https://api.github.com/users/boriel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/boriel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/boriel/subscriptions", + "organizations_url": "https://api.github.com/users/boriel/orgs", + "repos_url": "https://api.github.com/users/boriel/repos", + "events_url": "https://api.github.com/users/boriel/events{/privacy}", + "received_events_url": "https://api.github.com/users/boriel/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-10-31T10:01:12Z", + "updated_at": "2025-11-12T23:16:45Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Description of the bug**\nWhen listing installations for a given App ID, the deserialization of the JSON response fails with the exception:\n```\nhudson.remoting.ProxyException: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `org.kohsuke.github.GHTargetType` from String \"Enterprise\": not one of the values accepted for Enum class: [ORGANIZATION, USER]\n at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 756] (through reference chain: java.lang.Object[][0]->org.kohsuke.github.GHAppInstallation[\"target_type\"])\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:67)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1959)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:1245)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeAltString(EnumDeserializer.java:447)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.std.EnumDeserializer._fromString(EnumDeserializer.java:304)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:273)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:399)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:218)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2131)\n\tat PluginClassLoader for jackson2-api//com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1566)\n\tat PluginClassLoader for github-api//org.kohsuke.github.GitHubResponse.parseBody(GitHubResponse.java:104)\n\tat PluginClassLoader for github-api//org.kohsuke.github.GitHubPageIterator.lambda$fetch$0(GitHubPageIterator.java:147)\n\tat PluginClassLoader for github-api//org.kohsuke.github.GitHubClient.createResponse(GitHubClient.java:679)\n\tat PluginClassLoader for github-api//org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:466)\nCaused: hudson.remoting.ProxyException: org.kohsuke.github.HttpException: Server returned HTTP response code: 200, message: 'null' for URL: [https://api.github.com/app/installati](https://api.github.com/app/installations)\n ...\n```\n\n**To Reproduce**\nTo reproduce:\n\n 1. Install a GitHub App at the enterprise level (this is a rather new feature)\n 1. do an api call to\n[https://api.github.com/app/installations](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#list-installations-for-the-authenticated-app)\n \nThe `target_type` field will be `\"Enterprise\"` in one of the installations returned, and the deserialization will fail.\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\nJust return the deserialized content with this new `target_type`\n\n**Desktop (please complete the following information):**\n Does not apply\n\n**Additional context**\nFixing this will require adding the `ENTERPRISE` type to the `GHTargetType` Enum here:\nhttps://github.com/hub4j/github-api/blob/main/src/main/java/org/kohsuke/github/GHTargetType.java#L17", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2156/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2156/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2155", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2155/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2155/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2155/events", + "html_url": "https://github.com/hub4j/github-api/issues/2155", + "id": 3570367983, + "node_id": "I_kwDOAAlq-s7Uz33v", + "number": 2155, + "title": "[Feature request] Support matching-refs API", + "user": { + "login": "krzema12", + "id": 3110813, + "node_id": "MDQ6VXNlcjMxMTA4MTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/3110813?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/krzema12", + "html_url": "https://github.com/krzema12", + "followers_url": "https://api.github.com/users/krzema12/followers", + "following_url": "https://api.github.com/users/krzema12/following{/other_user}", + "gists_url": "https://api.github.com/users/krzema12/gists{/gist_id}", + "starred_url": "https://api.github.com/users/krzema12/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/krzema12/subscriptions", + "organizations_url": "https://api.github.com/users/krzema12/orgs", + "repos_url": "https://api.github.com/users/krzema12/repos", + "events_url": "https://api.github.com/users/krzema12/events{/privacy}", + "received_events_url": "https://api.github.com/users/krzema12/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-10-30T11:39:29Z", + "updated_at": "2025-11-12T23:12:26Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "See https://docs.github.com/en/rest/git/refs?apiVersion=2022-11-28#list-matching-references. The endpoint is `/repos/{owner}/{repo}/git/matching-refs/{ref}`.\n\nThe goal of this endpoint is to list refs that match the given prefix. It's useful to avoid fetching all available refs.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2155/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2155/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2120", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2120/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2120/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2120/events", + "html_url": "https://github.com/hub4j/github-api/issues/2120", + "id": 3274944747, + "node_id": "I_kwDOAAlq-s7DM7Dr", + "number": 2120, + "title": "Bridged artifact publishing failed for 2.0-rc.4", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-07-29T20:45:38Z", + "updated_at": "2025-10-23T18:21:36Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "https://github.com/hub4j/github-api/actions/runs/16606284210\n\n```\n2025-07-29T20:24:21.7667363Z ##[group]Run mvn -B clean deploy -DskipTests -Prelease -Pbridged\n2025-07-29T20:24:21.7668059Z \u001b[36;1mmvn -B clean deploy -DskipTests -Prelease -Pbridged\u001b[0m\n2025-07-29T20:24:21.7696714Z shell: /usr/bin/bash -e {0}\n2025-07-29T20:24:21.7697147Z env:\n2025-07-29T20:24:21.7698515Z JAVA_11_PLUS_MAVEN_OPTS: --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED\n2025-07-29T20:24:21.7700071Z JAVA_HOME: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64\n2025-07-29T20:24:21.7700782Z JAVA_HOME_17_X64: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.16-8/x64\n2025-07-29T20:24:21.7702295Z MAVEN_OPTS: --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED\n2025-07-29T20:24:21.7704065Z MAVEN_USERNAME: ***\n2025-07-29T20:24:21.7704550Z MAVEN_PASSWORD: ***\n2025-07-29T20:24:21.7705067Z MAVEN_GPG_PASSPHRASE: ***\n2025-07-29T20:24:21.7705491Z ##[endgroup]\n2025-07-29T20:24:23.0228744Z [INFO] Scanning for projects...\n2025-07-29T20:24:23.9536099Z [WARNING] \n2025-07-29T20:24:23.9537453Z [WARNING] Some problems were encountered while building the effective model for org.kohsuke:github-api-bridged:jar:2.0-rc.4\n2025-07-29T20:24:23.9540996Z [WARNING] 'artifactId' contains an expression but should be a constant. @ org.kohsuke:${github-api.artifactId}:2.0-rc.4, /home/runner/work/github-api/github-api/pom.xml, line 5, column 15\n2025-07-29T20:24:23.9546247Z [WARNING] \n2025-07-29T20:24:23.9547681Z [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.\n2025-07-29T20:24:23.9556489Z [WARNING] \n2025-07-29T20:24:23.9559777Z [WARNING] For this reason, future Maven versions might no longer support building such malformed projects.\n2025-07-29T20:24:23.9560985Z [WARNING] \n2025-07-29T20:24:23.9618771Z [INFO] Inspecting build with total of 1 modules...\n2025-07-29T20:24:23.9621326Z [INFO] Installing Nexus Staging features:\n2025-07-29T20:24:23.9623096Z [INFO] ... total of 1 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin\n2025-07-29T20:24:23.9709735Z [INFO] \n2025-07-29T20:24:23.9710932Z [INFO] -------------------< org.kohsuke:github-api-bridged >-------------------\n2025-07-29T20:24:23.9731357Z [INFO] Building GitHub API for Java 2.0-rc.4\n2025-07-29T20:24:23.9732242Z [INFO] from pom.xml\n2025-07-29T20:24:23.9733097Z [INFO] --------------------------------[ jar ]---------------------------------\n2025-07-29T20:24:24.1975820Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/com/infradna/tool/bridge-method-injector/1.31/bridge-method-injector-1.31.jar\n2025-07-29T20:24:24.9010193Z [INFO] Downloaded from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/com/infradna/tool/bridge-method-injector/1.31/bridge-method-injector-1.31.jar (20 kB at 29 kB/s)\n2025-07-29T20:24:25.2685425Z [INFO] \n2025-07-29T20:24:25.2688450Z [INFO] --- clean:3.2.0:clean (default-clean) @ github-api-bridged ---\n2025-07-29T20:24:25.3139513Z [INFO] Deleting /home/runner/work/github-api/github-api/target\n2025-07-29T20:24:25.3751804Z [INFO] \n2025-07-29T20:24:25.3755019Z [INFO] --- sortpom:4.0.0:verify (default) @ github-api-bridged ---\n2025-07-29T20:24:25.4004807Z [INFO] Verifying file /home/runner/work/github-api/github-api/pom.xml\n2025-07-29T20:24:25.5574156Z [INFO] \n2025-07-29T20:24:25.5604522Z [INFO] --- resources:3.3.1:copy-resources (copy-bridged-resources) @ github-api-bridged ---\n2025-07-29T20:24:25.6211373Z [INFO] Copying 2 resources from src/main/resources/META-INF/native-image/org.kohsuke/github-api to target/classes/META-INF/native-image/org.kohsuke/github-api-bridged\n2025-07-29T20:24:25.6257379Z [INFO] \n2025-07-29T20:24:25.6260843Z [INFO] --- resources:3.3.1:resources (default-resources) @ github-api-bridged ---\n2025-07-29T20:24:25.6298334Z [INFO] Copying 2 resources from src/main/resources to target/classes\n2025-07-29T20:24:25.6313090Z [INFO] \n2025-07-29T20:24:25.6316388Z [INFO] --- compiler:3.14.0:compile (default-compile) @ github-api-bridged ---\n2025-07-29T20:24:25.7492402Z [INFO] Recompiling the module because of changed source code.\n2025-07-29T20:24:25.7577343Z [INFO] Compiling 248 source files with javac [debug release 11] to target/classes\n2025-07-29T20:24:29.2601532Z [INFO] /home/runner/work/github-api/github-api/src/main/java/org/kohsuke/github/GitHubRequest.java: Some input files use or override a deprecated API.\n2025-07-29T20:24:29.2605584Z [INFO] /home/runner/work/github-api/github-api/src/main/java/org/kohsuke/github/GitHubRequest.java: Recompile with -Xlint:deprecation for details.\n2025-07-29T20:24:29.2645024Z [INFO] /home/runner/work/github-api/github-api/src/main/java/org/kohsuke/github/AbstractBuilder.java: Some input files use unchecked or unsafe operations.\n2025-07-29T20:24:29.2647447Z [INFO] /home/runner/work/github-api/github-api/src/main/java/org/kohsuke/github/AbstractBuilder.java: Recompile with -Xlint:unchecked for details.\n2025-07-29T20:24:29.2649001Z [INFO] \n2025-07-29T20:24:29.2649896Z [INFO] --- bridge-method-injector:1.31:process (default) @ github-api-bridged ---\n2025-07-29T20:24:29.2652007Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm/9.8/asm-9.8.pom\n2025-07-29T20:24:29.2949999Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.8/asm-9.8.pom\n2025-07-29T20:24:29.3649367Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.8/asm-9.8.pom (2.4 kB at 34 kB/s)\n2025-07-29T20:24:29.3683200Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.pom\n2025-07-29T20:24:29.3975186Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.pom\n2025-07-29T20:24:29.4137372Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.pom (2.8 kB at 186 kB/s)\n2025-07-29T20:24:29.4162498Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.pom\n2025-07-29T20:24:29.4335247Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.pom\n2025-07-29T20:24:29.4487718Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.pom (2.6 kB at 173 kB/s)\n2025-07-29T20:24:29.4537743Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm/9.8/asm-9.8.jar\n2025-07-29T20:24:29.4724836Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.jar\n2025-07-29T20:24:29.4726869Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.jar\n2025-07-29T20:24:29.5200408Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.8/asm-9.8.jar\n2025-07-29T20:24:29.5581033Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.8/asm-9.8.jar (126 kB at 3.3 MB/s)\n2025-07-29T20:24:29.5604951Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.jar\n2025-07-29T20:24:29.5607222Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.jar\n2025-07-29T20:24:29.5810217Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.8/asm-commons-9.8.jar (73 kB at 3.3 MB/s)\n2025-07-29T20:24:29.6160423Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.jar (52 kB at 911 kB/s)\n2025-07-29T20:24:29.7000553Z [INFO] \n2025-07-29T20:24:29.7004734Z [INFO] --- resources:3.3.1:testResources (default-testResources) @ github-api-bridged ---\n2025-07-29T20:24:29.8214547Z [INFO] Copying 80 resources from src/test/resources to target/test-classes\n2025-07-29T20:24:29.8321255Z [INFO] \n2025-07-29T20:24:29.8322203Z [INFO] --- compiler:3.14.0:testCompile (default-testCompile) @ github-api-bridged ---\n2025-07-29T20:24:29.8448238Z [INFO] Recompiling the module because of changed dependency.\n2025-07-29T20:24:29.8464047Z [INFO] Compiling 89 source files with javac [debug release 11] to target/test-classes\n2025-07-29T20:24:33.5592285Z [INFO] /home/runner/work/github-api/github-api/src/test/java/org/kohsuke/github/AbstractGHAppInstallationTest.java: Some input files use or override a deprecated API.\n2025-07-29T20:24:33.5595228Z [INFO] /home/runner/work/github-api/github-api/src/test/java/org/kohsuke/github/AbstractGHAppInstallationTest.java: Recompile with -Xlint:deprecation for details.\n2025-07-29T20:24:33.5597814Z [INFO] /home/runner/work/github-api/github-api/src/test/java/org/kohsuke/github/GitHubWireMockRule.java: Some input files use unchecked or unsafe operations.\n2025-07-29T20:24:33.5600435Z [INFO] /home/runner/work/github-api/github-api/src/test/java/org/kohsuke/github/GitHubWireMockRule.java: Recompile with -Xlint:unchecked for details.\n2025-07-29T20:24:33.5602352Z [INFO] \n2025-07-29T20:24:33.5605120Z [INFO] --- spring-boot:3.3.5:process-test-aot (process-test-aot) @ github-api-bridged ---\n2025-07-29T20:24:33.6745177Z [INFO] Skipping AOT test processing since tests are skipped\n2025-07-29T20:24:33.6751073Z [INFO] \n2025-07-29T20:24:33.6751944Z [INFO] --- surefire:3.5.3:test (default-test) @ github-api-bridged ---\n2025-07-29T20:24:33.7535969Z [INFO] Tests are skipped.\n2025-07-29T20:24:33.7536776Z [INFO] \n2025-07-29T20:24:33.7537563Z [INFO] --- jar:3.4.2:jar (default-jar) @ github-api-bridged ---\n2025-07-29T20:24:33.9589304Z [INFO] Building jar: /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.jar\n2025-07-29T20:24:34.0705411Z [INFO] \n2025-07-29T20:24:34.0706287Z [INFO] --- javadoc:3.11.2:jar (attach-javadocs) @ github-api-bridged ---\n2025-07-29T20:24:34.5637285Z [INFO] No previous run data found, generating javadoc.\n2025-07-29T20:24:40.3755359Z [INFO] Building jar: /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-javadoc.jar\n2025-07-29T20:24:40.5876374Z [INFO] \n2025-07-29T20:24:40.5881032Z [INFO] --- source:3.3.1:jar-no-fork (attach-sources) @ github-api-bridged ---\n2025-07-29T20:24:40.7511753Z [INFO] Building jar: /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-sources.jar\n2025-07-29T20:24:40.8140859Z [INFO] \n2025-07-29T20:24:40.8142525Z [INFO] --- jacoco:0.8.12:prepare-agent-integration (default) @ github-api-bridged ---\n2025-07-29T20:24:40.8461770Z [INFO] jacoco.surefire.argLine set to -javaagent:/home/runner/.m2/repository/org/jacoco/org.jacoco.agent/0.8.12/org.jacoco.agent-0.8.12-runtime.jar=destfile=/home/runner/work/github-api/github-api/target/jacoco-it.exec,excludes=/org/kohsuke/github/example/*\n2025-07-29T20:24:40.8494367Z [INFO] \n2025-07-29T20:24:40.8495616Z [INFO] --- surefire:3.5.3:test (okhttp-test) @ github-api-bridged ---\n2025-07-29T20:24:40.8496881Z [INFO] Tests are skipped.\n2025-07-29T20:24:40.8497800Z [INFO] \n2025-07-29T20:24:40.8498984Z [INFO] --- surefire:3.5.3:test (httpclient-test-tracing) @ github-api-bridged ---\n2025-07-29T20:24:40.8524871Z [INFO] Tests are skipped.\n2025-07-29T20:24:40.8534351Z [INFO] \n2025-07-29T20:24:40.8535275Z [INFO] --- surefire:3.5.3:test (slow-or-flaky-test) @ github-api-bridged ---\n2025-07-29T20:24:40.8550533Z [INFO] Tests are skipped.\n2025-07-29T20:24:40.8557437Z [INFO] \n2025-07-29T20:24:40.8558398Z [INFO] --- surefire:3.5.3:test (slow-or-flaky-test-tracing) @ github-api-bridged ---\n2025-07-29T20:24:40.8572406Z [INFO] Tests are skipped.\n2025-07-29T20:24:40.8575439Z [INFO] \n2025-07-29T20:24:40.8576894Z [INFO] --- surefire:3.5.3:test (jwt0.11.x-test) @ github-api-bridged ---\n2025-07-29T20:24:40.8602410Z [INFO] Tests are skipped.\n2025-07-29T20:24:40.8608154Z [INFO] \n2025-07-29T20:24:40.8609090Z [INFO] --- spotless:2.44.5:check (spotless-check) @ github-api-bridged ---\n2025-07-29T20:24:41.2263304Z [INFO] Index file does not exist. Fallback to an empty index\n2025-07-29T20:24:46.6711821Z [INFO] Spotless.Java is keeping 337 files clean - 0 needs changes to be clean, 337 were already clean, 0 were skipped because caching determined they were already clean\n2025-07-29T20:24:46.6755549Z [INFO] \n2025-07-29T20:24:46.6756409Z [INFO] --- japicmp:0.23.1:cmp (default) @ github-api-bridged ---\n2025-07-29T20:24:46.8656192Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/kohsuke/github-api-bridged/maven-metadata.xml\n2025-07-29T20:24:46.8659827Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/kohsuke/github-api-bridged/maven-metadata.xml\n2025-07-29T20:24:46.8805000Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/kohsuke/github-api-bridged/maven-metadata.xml (379 B at 24 kB/s)\n2025-07-29T20:24:46.8950664Z [INFO] Downloading from repo.jenkins-ci.org: https://repo.jenkins-ci.org/public/org/kohsuke/github-api-bridged/2.0-rc.3/github-api-bridged-2.0-rc.3.jar\n2025-07-29T20:24:46.9134198Z [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/kohsuke/github-api-bridged/2.0-rc.3/github-api-bridged-2.0-rc.3.jar\n2025-07-29T20:24:46.9714434Z [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/kohsuke/github-api-bridged/2.0-rc.3/github-api-bridged-2.0-rc.3.jar (653 kB at 11 MB/s)\n2025-07-29T20:24:47.4514453Z [INFO] Written file '/home/runner/work/github-api/github-api/target/japicmp/japicmp.diff'.\n2025-07-29T20:24:47.4782383Z [INFO] Written file '/home/runner/work/github-api/github-api/target/japicmp/japicmp.md'.\n2025-07-29T20:24:47.7245716Z [INFO] Written file '/home/runner/work/github-api/github-api/target/japicmp/japicmp.xml'.\n2025-07-29T20:24:47.7299099Z [INFO] Written file '/home/runner/work/github-api/github-api/target/japicmp/japicmp.html'.\n2025-07-29T20:24:47.7317925Z [INFO] \n2025-07-29T20:24:47.7318868Z [INFO] >>> spotbugs:4.9.3.0:check (run-spotbugs) > :spotbugs @ github-api-bridged >>>\n2025-07-29T20:24:47.7507293Z [INFO] \n2025-07-29T20:24:47.7508252Z [INFO] --- spotbugs:4.9.3.0:spotbugs (spotbugs) @ github-api-bridged ---\n2025-07-29T20:24:48.6436935Z [INFO] Fork Value is true\n2025-07-29T20:25:00.2299299Z [INFO] Done SpotBugs Analysis....\n2025-07-29T20:25:00.9449363Z [WARNING] Site model of 'org.kohsuke:github-api-bridged:jar:2.0-rc.4' for default locale is still using the old pre-version 2.0.0 model. You MUST migrate to the new model as soon as possible otherwise your build will break in the future!\n2025-07-29T20:25:00.9658654Z [INFO] Rendering content with org.kohsuke:maven-skin:jar:1.2 skin\n2025-07-29T20:25:01.4360715Z [INFO] \n2025-07-29T20:25:01.4361760Z [INFO] <<< spotbugs:4.9.3.0:check (run-spotbugs) < :spotbugs @ github-api-bridged <<<\n2025-07-29T20:25:01.4362774Z [INFO] \n2025-07-29T20:25:01.4363601Z [INFO] \n2025-07-29T20:25:01.4364417Z [INFO] --- spotbugs:4.9.3.0:check (run-spotbugs) @ github-api-bridged ---\n2025-07-29T20:25:01.4877054Z [INFO] BugInstance size is 0\n2025-07-29T20:25:01.4879822Z [INFO] Error size is 0\n2025-07-29T20:25:01.4886452Z [INFO] No errors/warnings found\n2025-07-29T20:25:01.4887183Z [INFO] \n2025-07-29T20:25:01.4887983Z [INFO] --- gpg:3.2.7:sign (sign-artifacts) @ github-api-bridged ---\n2025-07-29T20:25:01.5676590Z [INFO] Signer 'gpg' is signing 4 files with key default\n2025-07-29T20:25:02.5969472Z [INFO] \n2025-07-29T20:25:02.5970416Z [INFO] --- jacoco:0.8.12:report-integration (report) @ github-api-bridged ---\n2025-07-29T20:25:02.5998704Z [INFO] Skipping JaCoCo execution due to missing execution data file.\n2025-07-29T20:25:02.6000035Z [INFO] \n2025-07-29T20:25:02.6001071Z [INFO] --- jacoco:0.8.12:check (check) @ github-api-bridged ---\n2025-07-29T20:25:02.6069572Z [INFO] Skipping JaCoCo execution due to missing execution data file:/home/runner/work/github-api/github-api/target/jacoco-it.exec\n2025-07-29T20:25:02.6076175Z [INFO] \n2025-07-29T20:25:02.6077039Z [INFO] --- install:3.1.2:install (default-install) @ github-api-bridged ---\n2025-07-29T20:25:02.6323580Z [INFO] Installing /home/runner/work/github-api/github-api/pom.xml to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom\n2025-07-29T20:25:02.6332255Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.jar to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar\n2025-07-29T20:25:02.6355514Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-javadoc.jar to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar\n2025-07-29T20:25:02.6376191Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-sources.jar to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar\n2025-07-29T20:25:02.6386456Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.jar.asc to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar.asc\n2025-07-29T20:25:02.6396073Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.pom.asc to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom.asc\n2025-07-29T20:25:02.6399252Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-javadoc.jar.asc to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar.asc\n2025-07-29T20:25:02.6402537Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-sources.jar.asc to /home/runner/.m2/repository/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar.asc\n2025-07-29T20:25:02.6437367Z [INFO] \n2025-07-29T20:25:02.6438347Z [INFO] --- nexus-staging:1.7.0:deploy (injected-nexus-deploy) @ github-api-bridged ---\n2025-07-29T20:25:02.6570971Z [INFO] Performing local staging (local stagingDirectory=\"/home/runner/work/github-api/github-api/target/nexus-staging/staging\")...\n2025-07-29T20:25:02.6591567Z [INFO] + Using server credentials \"sonatype-nexus-staging\" from Maven settings.\n2025-07-29T20:25:03.4301873Z [INFO] * Connected to Nexus at https://ossrh-staging-api.central.sonatype.com:443/, is version 2.15.1-02 and edition \"Professional\"\n2025-07-29T20:25:03.6756020Z [INFO] * Using staging profile ID \"org.kohsuke\" (matched by Nexus).\n2025-07-29T20:25:03.6791917Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.jar to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar\n2025-07-29T20:25:03.6803873Z [INFO] Installing /home/runner/work/github-api/github-api/pom.xml to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom\n2025-07-29T20:25:03.6829619Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-javadoc.jar to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar\n2025-07-29T20:25:03.6863148Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-sources.jar to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar\n2025-07-29T20:25:03.6878197Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.jar.asc to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar.asc\n2025-07-29T20:25:03.6892786Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4.pom.asc to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom.asc\n2025-07-29T20:25:03.6906107Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-javadoc.jar.asc to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar.asc\n2025-07-29T20:25:03.6913739Z [INFO] Installing /home/runner/work/github-api/github-api/target/github-api-bridged-2.0-rc.4-sources.jar.asc to /home/runner/work/github-api/github-api/target/nexus-staging/staging/org.kohsuke/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar.asc\n2025-07-29T20:25:03.6922958Z [INFO] Performing remote staging...\n2025-07-29T20:25:03.6924739Z [INFO] \n2025-07-29T20:25:03.6926171Z [INFO] * Remote staging into staging profile ID \"org.kohsuke\"\n2025-07-29T20:25:04.0610456Z [INFO] * Created staging repository with ID \"org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17\".\n2025-07-29T20:25:04.0612663Z [INFO] * Staging repository at https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17\n2025-07-29T20:25:04.0614508Z [INFO] * Uploading locally staged artifacts to profile org.kohsuke\n2025-07-29T20:25:04.0659242Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar.asc\n2025-07-29T20:25:04.6077033Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar.asc (488 B at 900 B/s)\n2025-07-29T20:25:04.6081763Z [INFO] Downloading from sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/maven-metadata.xml\n2025-07-29T20:25:04.7329231Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/maven-metadata.xml\n2025-07-29T20:25:05.3348018Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/maven-metadata.xml (315 B at 523 B/s)\n2025-07-29T20:25:05.3364339Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar.asc\n2025-07-29T20:25:05.6253859Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar.asc (488 B at 1.7 kB/s)\n2025-07-29T20:25:05.6261209Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom.asc\n2025-07-29T20:25:05.8646568Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom.asc (488 B at 2.0 kB/s)\n2025-07-29T20:25:05.8654406Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar\n2025-07-29T20:25:07.2160449Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar (2.4 MB at 1.8 MB/s)\n2025-07-29T20:25:07.2169227Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar\n2025-07-29T20:25:08.0248105Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.jar (653 kB at 808 kB/s)\n2025-07-29T20:25:08.0251530Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom\n2025-07-29T20:25:08.7545703Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4.pom (36 kB at 50 kB/s)\n2025-07-29T20:25:08.7558010Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar\n2025-07-29T20:25:09.4824315Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-sources.jar (381 kB at 524 kB/s)\n2025-07-29T20:25:09.4830753Z [INFO] Uploading to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar.asc\n2025-07-29T20:25:09.7329585Z [INFO] Uploaded to sonatype-nexus-staging: https://ossrh-staging-api.central.sonatype.com:443/service/local/staging/deployByRepositoryId/org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17/org/kohsuke/github-api-bridged/2.0-rc.4/github-api-bridged-2.0-rc.4-javadoc.jar.asc (488 B at 2.0 kB/s)\n2025-07-29T20:25:09.7332314Z [INFO] * Upload of locally staged artifacts finished.\n2025-07-29T20:25:09.7333893Z [INFO] * Closing staging repository with ID \"org.kohsuke--57d1c35a-41be-4a93-be17-1400acd8fc17\".\n2025-07-29T20:25:21.0027055Z [ERROR] Remote staging finished with a failure: 400 - Bad Request\n2025-07-29T20:25:21.0033011Z [INFO] ------------------------------------------------------------------------\n2025-07-29T20:25:21.0034141Z [INFO] BUILD FAILURE\n2025-07-29T20:25:21.0035177Z [INFO] ------------------------------------------------------------------------\n2025-07-29T20:25:21.0036666Z [INFO] Total time: 58.002 s\n2025-07-29T20:25:21.0037305Z [INFO] Finished at: 2025-07-29T20:25:21Z\n2025-07-29T20:25:21.0038257Z [INFO] ------------------------------------------------------------------------\n2025-07-29T20:25:21.0042398Z [ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.7.0:deploy (injected-nexus-deploy) on project github-api-bridged: Remote staging failed: 400 - Bad Request -> [Help 1]\n2025-07-29T20:25:21.0044028Z [ERROR] \n2025-07-29T20:25:21.0044784Z [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.\n2025-07-29T20:25:21.0045816Z [ERROR] Re-run Maven using the -X switch to enable full debug logging.\n2025-07-29T20:25:21.0046617Z [ERROR] \n2025-07-29T20:25:21.0047546Z [ERROR] For more information about the errors and possible solutions, please read the following articles:\n2025-07-29T20:25:21.0048439Z [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException\n2025-07-29T20:25:21.0544587Z ##[error]Process completed with exit code 1.\n2025-07-29T20:25:21.0652621Z Post job cleanup.\n2025-07-29T20:25:21.2338798Z Removing private key from keychain\n2025-07-29T20:25:21.2639433Z Post job cleanup.\n2025-07-29T20:25:21.3579766Z [command]/usr/bin/git version\n2025-07-29T20:25:21.3623859Z git version 2.50.1\n2025-07-29T20:25:21.3669780Z Temporarily overriding HOME='/home/runner/work/_temp/f63c6d9c-0210-4993-9eab-7c153795d64a' before making global git config changes\n2025-07-29T20:25:21.3671649Z Adding repository directory to the temporary git global config as a safe directory\n2025-07-29T20:25:21.3685669Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/github-api/github-api\n2025-07-29T20:25:21.3725232Z [command]/usr/bin/git config --local --name-only --get-regexp core\\.sshCommand\n2025-07-29T20:25:21.3760717Z [command]/usr/bin/git submodule foreach --recursive sh -c \"git config --local --name-only --get-regexp 'core\\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :\"\n2025-07-29T20:25:21.4023643Z [command]/usr/bin/git config --local --name-only --get-regexp http\\.https\\:\\/\\/github\\.com\\/\\.extraheader\n2025-07-29T20:25:21.4049117Z http.https://github.com/.extraheader\n2025-07-29T20:25:21.4062530Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader\n2025-07-29T20:25:21.4096473Z [command]/usr/bin/git submodule foreach --recursive sh -c \"git config --local --name-only --get-regexp 'http\\.https\\:\\/\\/github\\.com\\/\\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :\"\n2025-07-29T20:25:21.4481669Z Cleaning up orphan processes\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2120/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2120/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2145", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2145/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2145/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2145/events", + "html_url": "https://github.com/hub4j/github-api/issues/2145", + "id": 3451557731, + "node_id": "I_kwDOAAlq-s7Nupdj", + "number": 2145, + "title": "How to extract the dependencies of a repository?", + "user": { + "login": "tohidemyname", + "id": 42423544, + "node_id": "MDQ6VXNlcjQyNDIzNTQ0", + "avatar_url": "https://avatars.githubusercontent.com/u/42423544?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tohidemyname", + "html_url": "https://github.com/tohidemyname", + "followers_url": "https://api.github.com/users/tohidemyname/followers", + "following_url": "https://api.github.com/users/tohidemyname/following{/other_user}", + "gists_url": "https://api.github.com/users/tohidemyname/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tohidemyname/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tohidemyname/subscriptions", + "organizations_url": "https://api.github.com/users/tohidemyname/orgs", + "repos_url": "https://api.github.com/users/tohidemyname/repos", + "events_url": "https://api.github.com/users/tohidemyname/events{/privacy}", + "received_events_url": "https://api.github.com/users/tohidemyname/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2025-09-25T02:12:02Z", + "updated_at": "2025-10-23T18:12:16Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I notice that Github has a rest api to retrieve the dependencies of a repository:\n\nhttps://docs.github.com/en/rest/dependency-graph/sboms?apiVersion=2022-11-28#export-a-software-bill-of-materials-sbom-for-a-repository\n\nHowever, I did not find a corresponding API call in github-api. I tried to implement the api by myself:\n\n```\npublic List getDependGraph() throws IOException {\n\t\tDependence[] list = root().createRequest()\n\t .withUrlPath(getApiTailUrl(\"dependency-graph/sbom\"))\n\t .fetch(Dependence[].class);\n\t return Arrays.asList(list);\n\t\t\n\t}\n```\n\nThe above code returns a 404 error:\n\n```\norg.kohsuke.github.GHFileNotFoundException: https://api.github.com/repos/sgtest/pinned-lucene/stats/dependency-graph/sbom {\n \"message\": \"Not Found\",\n \"documentation_url\": \"https://docs.github.com/rest\",\n \"status\": \"404\"\n}\n```\n\nI tried to call the url:\n`https://api.github.com/repos/sgtest/pinned-lucene/stats/dependency-graph/sbom`\n\nIt also returns a 404 error. \n\nIs this a problem in Github? Would you please give me some suggestions on how to implement the API for github-api?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2145/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2145/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2106", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2106/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2106/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2106/events", + "html_url": "https://github.com/hub4j/github-api/issues/2106", + "id": 3128804786, + "node_id": "I_kwDOAAlq-s66fcWy", + "number": 2106, + "title": "GHPullRequestReviewComment.getLine() always returns -1", + "user": { + "login": "tsantalis", + "id": 1483516, + "node_id": "MDQ6VXNlcjE0ODM1MTY=", + "avatar_url": "https://avatars.githubusercontent.com/u/1483516?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tsantalis", + "html_url": "https://github.com/tsantalis", + "followers_url": "https://api.github.com/users/tsantalis/followers", + "following_url": "https://api.github.com/users/tsantalis/following{/other_user}", + "gists_url": "https://api.github.com/users/tsantalis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tsantalis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tsantalis/subscriptions", + "organizations_url": "https://api.github.com/users/tsantalis/orgs", + "repos_url": "https://api.github.com/users/tsantalis/repos", + "events_url": "https://api.github.com/users/tsantalis/events{/privacy}", + "received_events_url": "https://api.github.com/users/tsantalis/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-06-09T00:16:26Z", + "updated_at": "2025-10-23T18:06:05Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\nGHPullRequestReviewComment.getLine() API does not return accurate value.\nAs a matter of fact it always returns -1\n\n**To Reproduce**\nSteps to reproduce the behavior:\nFor the following PR review comment the line is 422\nhttps://api.github.com/repos/JabRef/jabref/pulls/comments/2127829134\n```java\n//PR URL: https://github.com/JabRef/jabref/pull/11845\nGHRepository repository = ...;\nGHPullRequest pullRequest = repository.getPullRequest(11845);\nPagedIterable reviews = pullRequest.listReviews();\n\nfor (GHPullRequestReview review : reviews) {\n PagedIterable comments = review.listReviewComments();\n for (GHPullRequestReviewComment comment : comments) {\n String path = comment.getPath();\n int lineNumber = comment.getLine();\n }\n}\n```\n\n**Expected behavior**\nThe line number for\nhttps://api.github.com/repos/JabRef/jabref/pulls/comments/2127829134\nshould be 422 instead of -1\n\n**Desktop (please complete the following information):**\n - OS: iOS\n - Browser [Firefox]\n - Version [139]\n\n**Additional context**\nAdd any other context about the problem here.\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2106/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2106/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2126", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2126/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2126/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2126/events", + "html_url": "https://github.com/hub4j/github-api/issues/2126", + "id": 3327323318, + "node_id": "I_kwDOAAlq-s7GUuy2", + "number": 2126, + "title": "Update documentation on pluggable Http Client ", + "user": { + "login": "ErrorxCode", + "id": 65817230, + "node_id": "MDQ6VXNlcjY1ODE3MjMw", + "avatar_url": "https://avatars.githubusercontent.com/u/65817230?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ErrorxCode", + "html_url": "https://github.com/ErrorxCode", + "followers_url": "https://api.github.com/users/ErrorxCode/followers", + "following_url": "https://api.github.com/users/ErrorxCode/following{/other_user}", + "gists_url": "https://api.github.com/users/ErrorxCode/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ErrorxCode/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ErrorxCode/subscriptions", + "organizations_url": "https://api.github.com/users/ErrorxCode/orgs", + "repos_url": "https://api.github.com/users/ErrorxCode/repos", + "events_url": "https://api.github.com/users/ErrorxCode/events{/privacy}", + "received_events_url": "https://api.github.com/users/ErrorxCode/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 2070644911, + "node_id": "MDU6TGFiZWwyMDcwNjQ0OTEx", + "url": "https://api.github.com/repos/hub4j/github-api/labels/documentation", + "name": "documentation", + "color": "6ee5cb", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-08-16T14:21:39Z", + "updated_at": "2025-10-23T18:02:32Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The Library uses Java HttpClient, which was removed in Android 7. Using this library on > Android 7 results in the following error:\n\n`NoClassDefFoundError: Failed resolution of: Ljava/net/http/HttpClient;`\n\n\n**To Reproduce**\nRun `GitHub.connectUsingOAuth()` on android (API > 24)\n\n**Expected behaviour**\nNo error, connection established\n\n**Desktop (please complete the following information):**\n - OS: Android\n - Version 16\n\n\nPlease migrate from java **HttpClient** to OkHttp to keep wider support", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2126/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2126/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2009", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2009/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2009/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2009/events", + "html_url": "https://github.com/hub4j/github-api/issues/2009", + "id": 2789691143, + "node_id": "I_kwDOAAlq-s6mR08H", + "number": 2009, + "title": "`GitHubAbuseLimitHandler#isError` fails to detect some secondary rate limit errors", + "user": { + "login": "yrodiere", + "id": 412878, + "node_id": "MDQ6VXNlcjQxMjg3OA==", + "avatar_url": "https://avatars.githubusercontent.com/u/412878?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/yrodiere", + "html_url": "https://github.com/yrodiere", + "followers_url": "https://api.github.com/users/yrodiere/followers", + "following_url": "https://api.github.com/users/yrodiere/following{/other_user}", + "gists_url": "https://api.github.com/users/yrodiere/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yrodiere/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yrodiere/subscriptions", + "organizations_url": "https://api.github.com/users/yrodiere/orgs", + "repos_url": "https://api.github.com/users/yrodiere/repos", + "events_url": "https://api.github.com/users/yrodiere/events{/privacy}", + "received_events_url": "https://api.github.com/users/yrodiere/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 9, + "created_at": "2025-01-15T12:24:43Z", + "updated_at": "2025-09-05T19:31:30Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "(Maintainer's note: see also #1975 )\n**Describe the bug**\n\n#1895 attempted to detect more errors related to secondary rate limits, but it seems there are more.\n\nIt appears GitHub APIs -- https://api.github.com/search/issues in particular, maybe more -- can hit a secondary limit and just return a 403 error, with no particular header indicating that a limit was reached. No `Retry-After`, no `gh-limited-by`, nothing. Only the body response explains \"You have exceeded a secondary rate limit. Please wait a few minutes before you try again\". (and in fact waiting 30s/1min is enough).\n\nThis, understandably, doesn't get caught by `GitHubAbuseLimitHandler#isError`, and results in the request simply failing.\n\n**To Reproduce**\n\nSend the following request a few dozen times (or just a dozen when unauthenticated):\n\nhttps://api.github.com/search/issues?sort=updated&order=desc&q=repo%3Ayrodiere%2Fquarkus-github-playground+is%3Aissue+is%3Aopen+label%3Atriage%2Fneeds-feedback%2Ctriage%2Fneeds-reproducer+label%3Aarea%2Fhibernate-search+updated%3A%3C2025-01-15T12%3A03%3A47.243460581\n\nObviously my actual use case is not to send the _same_ request over and over, but it's enough to reproduce the problem.\n\nInterestingly, you can just click that URL in your browser, refresh quickly a couple times, and you'll be able to observe the exact error I'm running into: HTTP 403 with no particular retry header.\n\nSee bottom of this messsage for more logs.\n\n**Expected behavior**\n\nIdeally, I'd expect such requests to be detected as secondary rate limit errors, and the client to just wait and retry. For my use case it's fine to wait a minute.\n\nFailing that, I'd settle for a way to override `GitHubAbuseLimitHandler#isError` and implement some dirty logic based on the response body in there. But this method is currently package-protected.\n\n**Desktop (please complete the following information):**\n - OS: Fedora 41\n - Browser [e.g. chrome, safari]: no browser involved\n - Version [e.g. 22]: no browser involved\n\n**Additional context**\n\nHere is a failing request/response with all details/headers. I got it using `-Djdk.httpclient.HttpClient.log=all`.\n\n```\n2025-01-15 13:04:53,295 INFO [jdk.htt.HttpClient] (executor-thread-1) REQUEST: https://api.github.com/search/issues?sort=updated&order=desc&q=repo%3Ayrodiere%2Fquarkus-github-playground+is%3Aissue+is%3Aopen+label%3Atriage%2Fneeds-feedback%2Ctriage%2Fneeds-reproducer+label%3Aarea%2Fhibernate-search+updated%3A%3C2025-01-15T12%3A03%3A47.243460581 GET\n2025-01-15 13:04:53,295 INFO [jdk.htt.HttpClient] (executor-thread-1) HEADERS: REQUEST HEADERS:\nGET /search/issues?sort=updated&order=desc&q=repo%3Ayrodiere%2Fquarkus-github-playground+is%3Aissue+is%3Aopen+label%3Atriage%2Fneeds-feedback%2Ctriage%2Fneeds-reproducer+label%3Aarea%2Fhibernate-search+updated%3A%3C2025-01-15T12%3A03%3A47.243460581 HTTP/1.1\nContent-Length: 0\nHost: api.github.com\nUser-Agent: Java-http-client/17.0.13\nAccept: application/vnd.github+json\nAccept-Encoding: gzip\nAuthorization: token \nX-GitHub-Api-Version: 2022-11-28\n\n\n2025-01-15 13:04:53,422 INFO [jdk.htt.HttpClient] (HttpClient-3-Worker-0) HEADERS: RESPONSE HEADERS:\n access-control-allow-origin: *\n access-control-expose-headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset\n content-encoding: gzip\n content-security-policy: default-src 'none'\n content-type: application/json; charset=utf-8\n date: Wed, 15 Jan 2025 12:04:53 GMT\n referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin\n server: github.com\n strict-transport-security: max-age=31536000; includeSubdomains; preload\n transfer-encoding: chunked\n vary: Accept-Encoding, Accept, X-Requested-With\n x-content-type-options: nosniff\n x-frame-options: deny\n x-github-api-version-selected: 2022-11-28\n x-github-media-type: github.v3; format=json\n x-github-request-id: \n x-ratelimit-limit: 30\n x-ratelimit-remaining: 21\n x-ratelimit-reset: 1736942747\n x-ratelimit-resource: search\n x-ratelimit-used: 9\n x-xss-protection: 0\n\n\n2025-01-15 13:04:53,423 INFO [jdk.htt.HttpClient] (HttpClient-3-Worker-0) RESPONSE: (GET https://api.github.com/search/issues?sort=updated&order=desc&q=repo%3Ayrodiere%2Fquarkus-github-playground+is%3Aissue+is%3Aopen+label%3Atriage%2Fneeds-feedback%2Ctriage%2Fneeds-reproducer+label%3Aarea%2Fhibernate-search+updated%3A%3C2025-01-15T12%3A03%3A47.243460581) 403 HTTP_1_1 Local port: 57158\n```\n\nI end up with this error, proving the secondary limit error wasn't detected:\n\n```\norg.kohsuke.github.GHException: Failed to retrieve https://api.github.com/search/issues?sort=updated&order=desc&q=repo%3Ayrodiere%2Fquarkus-github-playground+is%3Aissue+is%3Aopen+label%3Atriage%2Fneeds-feedback%2Ctriage%2Fneeds-reproducer+label%3Aarea%2Fhibernate-search+updated%3A%3C2025-01-15T12%3A03%3A47.243460581\n at org.kohsuke.github.GitHubPageIterator.fetch(GitHubPageIterator.java:157)\n at org.kohsuke.github.GitHubPageIterator.hasNext(GitHubPageIterator.java:93)\n at org.kohsuke.github.PagedSearchIterable$1.hasNext(PagedSearchIterable.java:111)\n at org.kohsuke.github.PagedIterator.fetch(PagedIterator.java:116)\n at org.kohsuke.github.PagedIterator.hasNext(PagedIterator.java:84)\n at java.base/java.util.Spliterators$IteratorSpliterator.tryAdvance(Spliterators.java:1855)\n at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.lambda$initPartialTraversalState$0(StreamSpliterators.java:292)\n at java.base/java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.fillBuffer(StreamSpliterators.java:206)\n at java.base/java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.doAdvance(StreamSpliterators.java:161)\n at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.tryAdvance(StreamSpliterators.java:298)\n at java.base/java.util.Spliterators$1Adapter.hasNext(Spliterators.java:681)\n at io.quarkus.github.lottery.draw.Lottery$Draw.runSingleRound(Lottery.java:286)\n at io.quarkus.github.lottery.draw.Lottery.draw(Lottery.java:80)\n at io.quarkus.github.lottery.LotteryService.doDrawForRepository(LotteryService.java:109)\n at io.quarkus.github.lottery.LotteryService.drawForRepository(LotteryService.java:82)\n at io.quarkus.github.lottery.LotteryService.draw(LotteryService.java:66)\n at io.quarkus.github.lottery.LotteryService_ClientProxy.draw(Unknown Source)\n at io.quarkus.github.lottery.LotteryCli$DrawCommand.run(LotteryCli.java:27)\n at io.quarkus.github.lottery.LotteryCliCommandDispatcherImpl.dispatch(Unknown Source)\n at io.quarkus.github.lottery.LotteryCliCommandDispatcherImpl_Multiplexer.dispatch_9c21b751bd1c3c76c9e9f8d4cbcacbc05e9e7ed7(Unknown Source)\n at io.quarkus.github.lottery.LotteryCliCommandDispatcherImpl_Multiplexer_Observer_dispatch_9c21b751bd1c3c76c9e9f8d4cbcacbc05e9e7ed7_usg3oRfZFhFtsdK_zfgxrYi5m6Q.notify(Unknown Source)\n at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:351)\n at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:333)\n at io.quarkus.arc.impl.EventImpl$1.get(EventImpl.java:110)\n at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)\n at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:637)\n at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2675)\n at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2654)\n at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1627)\n at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1594)\n at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)\n at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)\n at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n at java.base/java.lang.Thread.run(Thread.java:840)\nCaused by: org.kohsuke.github.HttpException: {\n \"documentation_url\": \"https://docs.github.com/free-pro-team@latest/rest/overview/rate-limits-for-the-rest-api#about-secondary-rate-limits\",\n \"message\": \"You have exceeded a secondary rate limit. Please wait a few minutes before you try again. If you reach out to GitHub Support for help, please include the request ID 6F00:24CFC5:.\"\n}\n at org.kohsuke.github.GitHubConnectorResponseErrorHandler$1.onError(GitHubConnectorResponseErrorHandler.java:83)\n at org.kohsuke.github.GitHubClient.detectKnownErrors(GitHubClient.java:504)\n at org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:464)\n at org.kohsuke.github.GitHubPageIterator.fetch(GitHubPageIterator.java:146)\n ... 33 more\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2009/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2009/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1975", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1975/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1975/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1975/events", + "html_url": "https://github.com/hub4j/github-api/issues/1975", + "id": 2604556081, + "node_id": "I_kwDOAAlq-s6bPl8x", + "number": 1975, + "title": "Implement \"Secondary rate limit\" behavior to internally throttle querying ", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 5, + "created_at": "2024-10-22T07:39:26Z", + "updated_at": "2025-09-04T16:55:29Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "See #1805 \nSee #1842 \nSee #2009\n\nThis docs page describes secondary rate limit behavior: \nhttps://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28#about-secondary-rate-limits\n\nAs of this reading it says: \n> You may encounter a secondary rate limit if you:\n\n> \n> * Make too many concurrent requests. No more than 100 concurrent requests are allowed. This limit is shared across the REST API and GraphQL API.\n> * Make too many requests to a single endpoint per minute. No more than 900 points per minute are allowed for REST API endpoints, and no more than 2,000 points per minute are allowed for the GraphQL API endpoint. For more information about points, see \"[Calculating points for the secondary rate limit](https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28#calculating-points-for-the-secondary-rate-limit).\"\n> * Make too many requests per minute. No more than 90 seconds of CPU time per 60 seconds of real time is allowed. No more than 60 seconds of this CPU time may be for the GraphQL API. You can roughly estimate the CPU time by measuring the total response time for your API requests.\n> * Create too much content on GitHub in a short amount of time. In general, no more than 80 content-generating requests per minute and no more than 500 content-generating requests per hour are allowed. Some endpoints have lower content creation limits. Content creation limits include actions taken on the GitHub web interface as well as via the REST API and GraphQL API.\n> \n> These secondary rate limits are subject to change without notice. You may also encounter a secondary rate limit for undisclosed reasons.\n\nThese are incredibly loosely defined guides and you cannot query for them ahead of time. 👎 It looks like we need to take the path some users have suggested and make rate limiting much more resilient, potentially allowing users to write their own rate limit strategies for handling secondary rate limits. \n\nThe current internal `GitHubRateLimitChecker` would need to be replaced by a `PrimaryGitHubRateLimiter` which extends a new `GitHubRateLimiter` class/interface. Then each of the above bullet points would become a new rate limit tracking/enforcing class. All of them would need to be called before and after each query, and maintain their own configuration and calculated state. `GitHubRateLimiter` would provide the API and possibly helper functions to make that easier to do right. \n\nI think the basic API would be that the method call before a request is sent, would return an `Optional` and if more than one limiter returns a Duration the longest one is used. Or maybe return an optional record that includes a `reason` message and a duration, perhaps also a logLevel/severity. Make it easier to produce meaningful output. \n\n\n ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1975/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1975/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2115", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2115/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2115/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2115/events", + "html_url": "https://github.com/hub4j/github-api/issues/2115", + "id": 3234980989, + "node_id": "I_kwDOAAlq-s7A0eR9", + "number": 2115, + "title": "Search API does not support advanced search will stop working on September 4, 2025", + "user": { + "login": "donce", + "id": 1409983, + "node_id": "MDQ6VXNlcjE0MDk5ODM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1409983?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/donce", + "html_url": "https://github.com/donce", + "followers_url": "https://api.github.com/users/donce/followers", + "following_url": "https://api.github.com/users/donce/following{/other_user}", + "gists_url": "https://api.github.com/users/donce/gists{/gist_id}", + "starred_url": "https://api.github.com/users/donce/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/donce/subscriptions", + "organizations_url": "https://api.github.com/users/donce/orgs", + "repos_url": "https://api.github.com/users/donce/repos", + "events_url": "https://api.github.com/users/donce/events{/privacy}", + "received_events_url": "https://api.github.com/users/donce/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-07-16T08:24:12Z", + "updated_at": "2025-07-16T08:26:16Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "`GHPullRequestSearchBuilder` is built on the previous GitHub API, which does not use advanced search.\n\nOn September 4, 2025, advanced search will be enabled by default, but currently, it's not supported (from [docs](https://docs.github.com/en/rest/search/search?apiVersion=2022-11-28#search-issues-and-pull-requests)):\n\n>Warning\n>Notice: Search for issues and pull requests will be overridden by advanced search on September 4, 2025. You can read more about this change on [the GitHub blog](https://github.blog/changelog/2025-03-06-github-issues-projects-api-support-for-issues-advanced-search-and-more/).\n\nI think the github client should support that - as an opt-in now, but after September 4, it will be the only possible way.\n\n\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2115/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2115/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2102", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2102/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2102/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2102/events", + "html_url": "https://github.com/hub4j/github-api/issues/2102", + "id": 3072490567, + "node_id": "I_kwDOAAlq-s63InxH", + "number": 2102, + "title": "Cannot retrieve author from github release", + "user": { + "login": "solonovamax", + "id": 46940694, + "node_id": "MDQ6VXNlcjQ2OTQwNjk0", + "avatar_url": "https://avatars.githubusercontent.com/u/46940694?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/solonovamax", + "html_url": "https://github.com/solonovamax", + "followers_url": "https://api.github.com/users/solonovamax/followers", + "following_url": "https://api.github.com/users/solonovamax/following{/other_user}", + "gists_url": "https://api.github.com/users/solonovamax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/solonovamax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/solonovamax/subscriptions", + "organizations_url": "https://api.github.com/users/solonovamax/orgs", + "repos_url": "https://api.github.com/users/solonovamax/repos", + "events_url": "https://api.github.com/users/solonovamax/events{/privacy}", + "received_events_url": "https://api.github.com/users/solonovamax/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-05-19T04:52:41Z", + "updated_at": "2025-05-24T16:47:22Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\nAuthor (`GHUser`) is not included in the `GHRelease` object, even though it is present in the api response.\n\nUnsure if this behaviour was changed in some past api update.\n\n**Expected behavior**\nAuthor is included.\n\n**Additional context**\napi docs: https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#list-releases\n\nexample api response:\n```json\n[\n {\n \"url\": \"https://api.github.com/repos/hashicorp/terraform/releases/218598268\",\n \"assets_url\": \"https://api.github.com/repos/hashicorp/terraform/releases/218598268/assets\",\n \"upload_url\": \"https://uploads.github.com/repos/hashicorp/terraform/releases/218598268/assets{?name,label}\",\n \"html_url\": \"https://github.com/hashicorp/terraform/releases/tag/v1.12.0\",\n \"id\": 218598268,\n \"author\": {\n \"login\": \"hc-github-team-es-release-engineering\",\n \"id\": 82989873,\n \"node_id\": \"MDQ6VXNlcjgyOTg5ODcz\",\n \"avatar_url\": \"https://avatars.githubusercontent.com/u/82989873?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/hc-github-team-es-release-engineering\",\n \"html_url\": \"https://github.com/hc-github-team-es-release-engineering\",\n \"followers_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/followers\",\n \"following_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/orgs\",\n \"repos_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/repos\",\n \"events_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/hc-github-team-es-release-engineering/received_events\",\n \"type\": \"User\",\n \"user_view_type\": \"public\",\n \"site_admin\": false\n },\n \"node_id\": \"RE_kwDOAQ6CpM4NB4t8\",\n \"tag_name\": \"v1.12.0\",\n \"target_commitish\": \"f9e9a59d7b5b48acf343e07fab768464bcdde4d7\",\n \"name\": \"v1.12.0\",\n \"draft\": false,\n \"prerelease\": false,\n \"created_at\": \"2025-05-14T14:11:25Z\",\n \"published_at\": \"2025-05-14T15:15:45Z\",\n \"assets\": [],\n \"tarball_url\": \"https://api.github.com/repos/hashicorp/terraform/tarball/v1.12.0\",\n \"zipball_url\": \"https://api.github.com/repos/hashicorp/terraform/zipball/v1.12.0\",\n \"body\": \"[truncated for brevity]\",\n \"reactions\": {\n \"url\": \"https://api.github.com/repos/hashicorp/terraform/releases/218598268/reactions\",\n \"total_count\": 11,\n \"+1\": 1,\n \"-1\": 0,\n \"laugh\": 0,\n \"hooray\": 0,\n \"confused\": 0,\n \"heart\": 0,\n \"rocket\": 10,\n \"eyes\": 0\n }\n }\n]\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2102/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2102/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2083", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2083/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2083/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2083/events", + "html_url": "https://github.com/hub4j/github-api/issues/2083", + "id": 2980993460, + "node_id": "I_kwDOAAlq-s6xrlm0", + "number": 2083, + "title": "OSGi Manifest - add maven plugin", + "user": { + "login": "stbischof", + "id": 33224746, + "node_id": "MDQ6VXNlcjMzMjI0NzQ2", + "avatar_url": "https://avatars.githubusercontent.com/u/33224746?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/stbischof", + "html_url": "https://github.com/stbischof", + "followers_url": "https://api.github.com/users/stbischof/followers", + "following_url": "https://api.github.com/users/stbischof/following{/other_user}", + "gists_url": "https://api.github.com/users/stbischof/gists{/gist_id}", + "starred_url": "https://api.github.com/users/stbischof/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/stbischof/subscriptions", + "organizations_url": "https://api.github.com/users/stbischof/orgs", + "repos_url": "https://api.github.com/users/stbischof/repos", + "events_url": "https://api.github.com/users/stbischof/events{/privacy}", + "received_events_url": "https://api.github.com/users/stbischof/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-04-08T21:30:08Z", + "updated_at": "2025-04-13T06:54:04Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I would like to use this lib in an OSGi Framework. For this i would need some Metadata in the Manifest.MF.\n\nI would create a PR that adds this support using the bnd-maven-plugin.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2083/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2083/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2082", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2082/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2082/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2082/events", + "html_url": "https://github.com/hub4j/github-api/issues/2082", + "id": 2973118122, + "node_id": "I_kwDOAAlq-s6xNi6q", + "number": 2082, + "title": "Update Wiremock to v3 and JUnit5", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-04-04T18:38:07Z", + "updated_at": "2025-04-04T18:38:23Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "See \nhttps://wiremock.org/docs/junit-jupiter/\n\n GithubWireMockRule creates and manages multiple WireMockServers. Need to do the same for JUnit5 but not sure how composable the JUnit5 WireMock extension is. Might need to move to an abstract base test class that instantiates all the servers. \n\nI think v3 is Java 11+ only but if it isn't do that as well. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2082/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2082/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2076", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2076/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2076/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2076/events", + "html_url": "https://github.com/hub4j/github-api/issues/2076", + "id": 2957281274, + "node_id": "I_kwDOAAlq-s6wRIf6", + "number": 2076, + "title": "Inconsistent use of glob imports", + "user": { + "login": "solonovamax", + "id": 46940694, + "node_id": "MDQ6VXNlcjQ2OTQwNjk0", + "avatar_url": "https://avatars.githubusercontent.com/u/46940694?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/solonovamax", + "html_url": "https://github.com/solonovamax", + "followers_url": "https://api.github.com/users/solonovamax/followers", + "following_url": "https://api.github.com/users/solonovamax/following{/other_user}", + "gists_url": "https://api.github.com/users/solonovamax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/solonovamax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/solonovamax/subscriptions", + "organizations_url": "https://api.github.com/users/solonovamax/orgs", + "repos_url": "https://api.github.com/users/solonovamax/repos", + "events_url": "https://api.github.com/users/solonovamax/events{/privacy}", + "received_events_url": "https://api.github.com/users/solonovamax/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-03-28T21:25:41Z", + "updated_at": "2025-03-29T18:00:33Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Some classes use glob imports, while others don't. The use of glob imports across files seems to be rather inconsistent.\n\nCurrently, with spotless, there doesn't seem to be a way to enforce using/disallowing glob imports, however there is an open issue for it: https://github.com/diffplug/spotless/issues/649.\nSome comments on the issue suggest using\n```xml\n\n Remove wildcard imports\n import\\s+(?:static\\s+)?[^\\*\\s]+\\*;(\\r\\n|\\r|\\n)\n $1\n\n```\nto remove all the glob imports, however this solution will simply remove them and won't replace them with the appropriate imports, causing the compile to fail.\n\nOpened due to discussion in #2074", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2076/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2076/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2075", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2075/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2075/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2075/events", + "html_url": "https://github.com/hub4j/github-api/issues/2075", + "id": 2957271743, + "node_id": "I_kwDOAAlq-s6wRGK_", + "number": 2075, + "title": "Inconsistent use of license header", + "user": { + "login": "solonovamax", + "id": 46940694, + "node_id": "MDQ6VXNlcjQ2OTQwNjk0", + "avatar_url": "https://avatars.githubusercontent.com/u/46940694?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/solonovamax", + "html_url": "https://github.com/solonovamax", + "followers_url": "https://api.github.com/users/solonovamax/followers", + "following_url": "https://api.github.com/users/solonovamax/following{/other_user}", + "gists_url": "https://api.github.com/users/solonovamax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/solonovamax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/solonovamax/subscriptions", + "organizations_url": "https://api.github.com/users/solonovamax/orgs", + "repos_url": "https://api.github.com/users/solonovamax/repos", + "events_url": "https://api.github.com/users/solonovamax/events{/privacy}", + "received_events_url": "https://api.github.com/users/solonovamax/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-03-28T21:21:56Z", + "updated_at": "2025-03-29T18:00:16Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "There is an inconsistent use of the license header.\nCurrently, some files have a license header added, but others don't.\n\nSince you're using spotless, it can be used to enforce the license header:\nhttps://github.com/diffplug/spotless/tree/main/plugin-maven#license-header\n\nOpened due to discussion in #2074", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2075/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2075/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2058", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2058/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2058/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2058/events", + "html_url": "https://github.com/hub4j/github-api/issues/2058", + "id": 2913781594, + "node_id": "I_kwDOAAlq-s6trMda", + "number": 2058, + "title": "Enable hiding of comments", + "user": { + "login": "koppor", + "id": 1366654, + "node_id": "MDQ6VXNlcjEzNjY2NTQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/1366654?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/koppor", + "html_url": "https://github.com/koppor", + "followers_url": "https://api.github.com/users/koppor/followers", + "following_url": "https://api.github.com/users/koppor/following{/other_user}", + "gists_url": "https://api.github.com/users/koppor/gists{/gist_id}", + "starred_url": "https://api.github.com/users/koppor/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/koppor/subscriptions", + "organizations_url": "https://api.github.com/users/koppor/orgs", + "repos_url": "https://api.github.com/users/koppor/repos", + "events_url": "https://api.github.com/users/koppor/events{/privacy}", + "received_events_url": "https://api.github.com/users/koppor/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2025-03-12T12:20:51Z", + "updated_at": "2025-03-28T16:33:37Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I have comment count 3, but the PR has much more: https://github.com/JabRef/jabref/pull/12710\n\nI \"deleted\" the other comments using `comment.delete()`. It seems this has no effect on the UI.\n\nIn the UI, one can use \"Hide\"\n\n![Image](https://github.com/user-attachments/assets/5522c8c3-0764-49bf-bcc1-86a472b24d06)\n\n![Image](https://github.com/user-attachments/assets/623772ef-30b7-4b04-bac7-abc174289702)\n\nShould be possible via API, too?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2058/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2058/timeline", + "performed_via_github_app": null, + "state_reason": "reopened", + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1454", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1454/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1454/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1454/events", + "html_url": "https://github.com/hub4j/github-api/issues/1454", + "id": 1229507490, + "node_id": "I_kwDOAAlq-s5JSMui", + "number": 1454, + "title": "Please provide streaming for upload large content ", + "user": { + "login": "Vampire", + "id": 325196, + "node_id": "MDQ6VXNlcjMyNTE5Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/325196?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Vampire", + "html_url": "https://github.com/Vampire", + "followers_url": "https://api.github.com/users/Vampire/followers", + "following_url": "https://api.github.com/users/Vampire/following{/other_user}", + "gists_url": "https://api.github.com/users/Vampire/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Vampire/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Vampire/subscriptions", + "organizations_url": "https://api.github.com/users/Vampire/orgs", + "repos_url": "https://api.github.com/users/Vampire/repos", + "events_url": "https://api.github.com/users/Vampire/events{/privacy}", + "received_events_url": "https://api.github.com/users/Vampire/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 7, + "created_at": "2022-05-09T10:34:22Z", + "updated_at": "2025-03-26T18:56:07Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I have a Gradle build where I build a Docker image tar file which has a size of 166 MiB.\r\nI use the GitHub publish Gradle plugin and tried to upload this Docker image as asset to the release.\r\nThis consistently resulted in an `OutOfMemoryError`.\r\n\r\nThe GitHub publish Gradle plugin under the hood uses this library.\r\nAnd I also easily reproduced it stand-alone.\r\nIn version 1.1xx, you use an `HttpsUrlConnection` without setting it to fixed-length streaming or chunking mode and thus the JRE uses a byte-array output stream to colllect the whole body in RAM to determine the size up-front.\r\nIn version 1.3xx many things changed, but now you use your `GitHubRequest.Builder#with(java.io.InputStream)` method to load the whole file into RAM using `IOUtils.toByteArray`.\r\n\r\nSo at different places both load the whole file into RAM instead of properly streaming it.\r\nPlease support at least giving the size to methods like `uploadAsset` so that the size can be set as HTTP header but the content be streamed, or if GitHub supports it maybe even using chunked mode additionally if no explicit size was given.\r\n\r\nThe problem can pretty easily be reproduced using:\r\n```java\r\ngithub\r\n .getRepository(\"my/repository\")\r\n .listReleases()\r\n .iterator()\r\n .next()\r\n .uploadAsset(\"foo.tar.gz\", new FileInputStream(\"file/that/is/too/large/for/RAM\"), \"application/octet-stream\")\r\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1454/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1454/timeline", + "performed_via_github_app": null, + "state_reason": "reopened", + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1967", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1967/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1967/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1967/events", + "html_url": "https://github.com/hub4j/github-api/issues/1967", + "id": 2564089274, + "node_id": "I_kwDOAAlq-s6Y1OW6", + "number": 1967, + "title": "Branch rename is missing", + "user": { + "login": "sbouchexbellomie-Philips", + "id": 182072604, + "node_id": "U_kgDOCto1HA", + "avatar_url": "https://avatars.githubusercontent.com/u/182072604?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sbouchexbellomie-Philips", + "html_url": "https://github.com/sbouchexbellomie-Philips", + "followers_url": "https://api.github.com/users/sbouchexbellomie-Philips/followers", + "following_url": "https://api.github.com/users/sbouchexbellomie-Philips/following{/other_user}", + "gists_url": "https://api.github.com/users/sbouchexbellomie-Philips/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sbouchexbellomie-Philips/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sbouchexbellomie-Philips/subscriptions", + "organizations_url": "https://api.github.com/users/sbouchexbellomie-Philips/orgs", + "repos_url": "https://api.github.com/users/sbouchexbellomie-Philips/repos", + "events_url": "https://api.github.com/users/sbouchexbellomie-Philips/events{/privacy}", + "received_events_url": "https://api.github.com/users/sbouchexbellomie-Philips/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2024-10-03T13:35:26Z", + "updated_at": "2025-03-23T07:25:04Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Ability to rename a branch is missing\r\n\r\nGHBranch.rename should be added", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1967/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1967/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1965", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1965/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1965/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1965/events", + "html_url": "https://github.com/hub4j/github-api/issues/1965", + "id": 2563920009, + "node_id": "I_kwDOAAlq-s6Y0lCJ", + "number": 1965, + "title": "Deployment deletion is missing", + "user": { + "login": "sbouchexbellomie-Philips", + "id": 182072604, + "node_id": "U_kgDOCto1HA", + "avatar_url": "https://avatars.githubusercontent.com/u/182072604?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sbouchexbellomie-Philips", + "html_url": "https://github.com/sbouchexbellomie-Philips", + "followers_url": "https://api.github.com/users/sbouchexbellomie-Philips/followers", + "following_url": "https://api.github.com/users/sbouchexbellomie-Philips/following{/other_user}", + "gists_url": "https://api.github.com/users/sbouchexbellomie-Philips/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sbouchexbellomie-Philips/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sbouchexbellomie-Philips/subscriptions", + "organizations_url": "https://api.github.com/users/sbouchexbellomie-Philips/orgs", + "repos_url": "https://api.github.com/users/sbouchexbellomie-Philips/repos", + "events_url": "https://api.github.com/users/sbouchexbellomie-Philips/events{/privacy}", + "received_events_url": "https://api.github.com/users/sbouchexbellomie-Philips/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2024-10-03T12:23:11Z", + "updated_at": "2025-03-23T07:24:47Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Ability to delete a deployment is missing\r\n\r\nGHDeployment.delete should be added\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1965/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1965/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2041", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2041/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2041/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2041/events", + "html_url": "https://github.com/hub4j/github-api/issues/2041", + "id": 2871292068, + "node_id": "I_kwDOAAlq-s6rJHCk", + "number": 2041, + "title": "should fromCredentials not be public?", + "user": { + "login": "maxandersen", + "id": 54129, + "node_id": "MDQ6VXNlcjU0MTI5", + "avatar_url": "https://avatars.githubusercontent.com/u/54129?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/maxandersen", + "html_url": "https://github.com/maxandersen", + "followers_url": "https://api.github.com/users/maxandersen/followers", + "following_url": "https://api.github.com/users/maxandersen/following{/other_user}", + "gists_url": "https://api.github.com/users/maxandersen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/maxandersen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/maxandersen/subscriptions", + "organizations_url": "https://api.github.com/users/maxandersen/orgs", + "repos_url": "https://api.github.com/users/maxandersen/repos", + "events_url": "https://api.github.com/users/maxandersen/events{/privacy}", + "received_events_url": "https://api.github.com/users/maxandersen/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 5, + "created_at": "2025-02-22T20:16:12Z", + "updated_at": "2025-03-23T07:21:59Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\nGithubBuilder.fromCredentials is not public and given the auth provider field is not public it is not possible to implement the \"honor .github and env\" manually.\n\nThus should that method not be public? \n\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2041/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2041/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1798", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1798/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1798/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1798/events", + "html_url": "https://github.com/hub4j/github-api/issues/1798", + "id": 2147359719, + "node_id": "I_kwDOAAlq-s5__hvn", + "number": 1798, + "title": "Maven central moving to new publishing model and plugin", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2024-02-21T17:52:31Z", + "updated_at": "2025-03-23T06:52:23Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "It looks like Sonatype is moving to a new model for publishing: \r\nhttps://github.com/sonatype/nexus-public/issues/110#issuecomment-1900500381\r\n\r\nThe project may need to re-register or do some other updates to work in the new system:\r\nhttps://central.sonatype.org/register/central-portal/\r\nhttps://central.sonatype.org/publish/publish-portal-maven/\r\n\r\nIt is still in preview, so this is not urgent. I've started work on this but don't have time to finish it now: \r\nhttps://github.com/hub4j/github-api/tree/feature/new-maven-central-publishing", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1798/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1798/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/521", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/521/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/521/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/521/events", + "html_url": "https://github.com/hub4j/github-api/issues/521", + "id": 447748493, + "node_id": "MDU6SXNzdWU0NDc3NDg0OTM=", + "number": 521, + "title": "GitHub v4 GraphQL API support", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 11, + "created_at": "2019-05-23T16:02:20Z", + "updated_at": "2025-03-19T17:33:15Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The v4 API provides a much more customizable API based on GraphQL. It is out of scope for this library to provide a generalized API the fully leverages the power of GraphQL, but having some way to construct queries for trees of items would be useful. \r\n\r\nhttps://developer.github.com/v4/", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/521/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/521/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2060", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2060/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2060/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2060/events", + "html_url": "https://github.com/hub4j/github-api/issues/2060", + "id": 2922558598, + "node_id": "I_kwDOAAlq-s6uMrSG", + "number": 2060, + "title": "Issues with getMergeCommitSha", + "user": { + "login": "BradPlayerZero", + "id": 172313252, + "node_id": "U_kgDOCkVKpA", + "avatar_url": "https://avatars.githubusercontent.com/u/172313252?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/BradPlayerZero", + "html_url": "https://github.com/BradPlayerZero", + "followers_url": "https://api.github.com/users/BradPlayerZero/followers", + "following_url": "https://api.github.com/users/BradPlayerZero/following{/other_user}", + "gists_url": "https://api.github.com/users/BradPlayerZero/gists{/gist_id}", + "starred_url": "https://api.github.com/users/BradPlayerZero/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/BradPlayerZero/subscriptions", + "organizations_url": "https://api.github.com/users/BradPlayerZero/orgs", + "repos_url": "https://api.github.com/users/BradPlayerZero/repos", + "events_url": "https://api.github.com/users/BradPlayerZero/events{/privacy}", + "received_events_url": "https://api.github.com/users/BradPlayerZero/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-03-15T21:26:52Z", + "updated_at": "2025-03-18T21:06:41Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Two fixes needed for getMergeCommitSha:\n\n /**\n * See GitHub blog post\n *\n * @return the merge commit sha\n * @throws IOException\n * the io exception\n */\n public String getMergeCommitSha() throws IOException {\n populate();\n return merge_commit_sha;\n }\n\nFirst, GitHub has reversed themselves on deprecating merge_commit_id, so the comment should be removed.\n\nSecond, merge_commit_id is part of the list pull request API (get /repos/{owner}/{repo}/pulls), and required, so it should not call populate().\n\n\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2060/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2060/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2061", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2061/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2061/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2061/events", + "html_url": "https://github.com/hub4j/github-api/issues/2061", + "id": 2923132207, + "node_id": "I_kwDOAAlq-s6uO3Uv", + "number": 2061, + "title": "`GHIssue#isPullRequest` is false despite being a PR", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-03-16T15:23:51Z", + "updated_at": "2025-03-17T10:37:01Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\n`isPullRequest` in GHIssue returns false due to `pull_request == null` condition. The PR object was acquired via `payload.getPullRequest()` method of `GHEventPayload.PullRequest` class.\n\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Get an instance of `GHEventPayload.PullRequest` event\n2. Get the pr entity via `payload.getPullRequest()`\n3. Observe that despite object being an instance of `GHPullRequest` the return value of `isPullRequest` method is false.\n\n**Expected behavior**\nexpected true", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2061/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2061/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2062", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2062/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2062/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2062/events", + "html_url": "https://github.com/hub4j/github-api/issues/2062", + "id": 2923159729, + "node_id": "I_kwDOAAlq-s6uO-Cx", + "number": 2062, + "title": "`branch.getProtection()` fails with an exception for ruleset-protected branch", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-03-16T16:11:09Z", + "updated_at": "2025-03-17T10:34:17Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\nIf a branch (`GHBranch`) is protected via rulesets rather than classic (deprecated?) branch protection rules, `GHBranch#isProtected()` returns `true`, but `GHBranch#getProtection` desintegrates with the following exception:\n```\norg.kohsuke.github.GHFileNotFoundException: https://api.github.com/repos/ZooPets/kapybro-demo-dev/branches/main/protection {\"message\":\"Branch not protected\",\"documentation_url\":\"https://docs.github.com/rest/branches/branch-protection#get-branch-protection\",\"status\":\"404\"}\n\tat org.kohsuke.github.GitHubClient.interpretApiError(GitHubClient.java:661) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:480) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:427) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.Requester.fetch(Requester.java:85) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.GHBranch.getProtection(GHBranch.java:112) ~[github-api-unbridged-1.318.jar:na]\n//omitted\nCaused by: java.io.FileNotFoundException: https://api.github.com/repos/ZooPets/kapybro-demo-dev/branches/main/protection\n\tat org.kohsuke.github.GitHubConnectorResponseErrorHandler$1.onError(GitHubConnectorResponseErrorHandler.java:60) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.GitHubClient.detectKnownErrors(GitHubClient.java:504) ~[github-api-unbridged-1.318.jar:na]\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:464) ~[github-api-unbridged-1.318.jar:na]\n\t... 179 common frames omitted\n```\n\nMost likely, `GHBranch#isProtected()` will be true for both protection methods, so we need a way to tell them apart without conflating two different methods and later calling wrong endpoints.\nPerhaps a temp solution could be introduced until #1811 is implemented.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2062/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2062/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1811", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1811/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1811/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1811/events", + "html_url": "https://github.com/hub4j/github-api/issues/1811", + "id": 2177274983, + "node_id": "I_kwDOAAlq-s6BxpRn", + "number": 1811, + "title": "Implement API for retrieving and managing rulesets on a repository", + "user": { + "login": "FHannes", + "id": 915760, + "node_id": "MDQ6VXNlcjkxNTc2MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/915760?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/FHannes", + "html_url": "https://github.com/FHannes", + "followers_url": "https://api.github.com/users/FHannes/followers", + "following_url": "https://api.github.com/users/FHannes/following{/other_user}", + "gists_url": "https://api.github.com/users/FHannes/gists{/gist_id}", + "starred_url": "https://api.github.com/users/FHannes/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/FHannes/subscriptions", + "organizations_url": "https://api.github.com/users/FHannes/orgs", + "repos_url": "https://api.github.com/users/FHannes/repos", + "events_url": "https://api.github.com/users/FHannes/events{/privacy}", + "received_events_url": "https://api.github.com/users/FHannes/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2024-03-09T15:42:36Z", + "updated_at": "2025-03-16T16:04:55Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "As far as I can tell, the library currently supports managing branch protection, but not [rulesets](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets). The use of rulesets has some advantages over using branch protection [as listed in the documentation](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets#about-rulesets-protected-branches-and-protected-tags), so it might be useful to add support for them.\r\nAPI reference: https://docs.github.com/en/rest/repos/rules?apiVersion=2022-11-28", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1811/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1811/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2028", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2028/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2028/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2028/events", + "html_url": "https://github.com/hub4j/github-api/issues/2028", + "id": 2843436852, + "node_id": "I_kwDOAAlq-s6pe2c0", + "number": 2028, + "title": "GHMilestone throws NPE on null state", + "user": { + "login": "rnveach", + "id": 5427943, + "node_id": "MDQ6VXNlcjU0Mjc5NDM=", + "avatar_url": "https://avatars.githubusercontent.com/u/5427943?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rnveach", + "html_url": "https://github.com/rnveach", + "followers_url": "https://api.github.com/users/rnveach/followers", + "following_url": "https://api.github.com/users/rnveach/following{/other_user}", + "gists_url": "https://api.github.com/users/rnveach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rnveach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rnveach/subscriptions", + "organizations_url": "https://api.github.com/users/rnveach/orgs", + "repos_url": "https://api.github.com/users/rnveach/repos", + "events_url": "https://api.github.com/users/rnveach/events{/privacy}", + "received_events_url": "https://api.github.com/users/rnveach/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2025-02-10T19:35:34Z", + "updated_at": "2025-02-27T18:05:14Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The following method is not `null` safe:\nhttps://github.com/hub4j/github-api/blob/055638069ce8299629225be7f39395b16d4fe839/src/main/java/org/kohsuke/github/GHMilestone.java#L137-L138\n\nWhenever it is called to get the state of the milestone, and it (`state` field) is `null`, it will throw a `NullPointerException`.\n\nThere is no other method in this class to ascertain the value of this before calling the method. The field is private. Programmers are forced to wrap this in a try/catch in the case it is null.\n\nIt would ease handling this call if it had a `null` check and returned `null` if there is no state.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2028/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2028/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + } + ] +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/4-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/4-search_issues.json new file mode 100644 index 0000000000..e317840101 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/4-search_issues.json @@ -0,0 +1,2652 @@ +{ + "total_count": 164, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2037", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2037/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2037/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2037/events", + "html_url": "https://github.com/hub4j/github-api/issues/2037", + "id": 2858704844, + "node_id": "I_kwDOAAlq-s6qZF_M", + "number": 2037, + "title": "GHIssueStateReason should add reopened", + "user": { + "login": "rnveach", + "id": 5427943, + "node_id": "MDQ6VXNlcjU0Mjc5NDM=", + "avatar_url": "https://avatars.githubusercontent.com/u/5427943?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rnveach", + "html_url": "https://github.com/rnveach", + "followers_url": "https://api.github.com/users/rnveach/followers", + "following_url": "https://api.github.com/users/rnveach/following{/other_user}", + "gists_url": "https://api.github.com/users/rnveach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rnveach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rnveach/subscriptions", + "organizations_url": "https://api.github.com/users/rnveach/orgs", + "repos_url": "https://api.github.com/users/rnveach/repos", + "events_url": "https://api.github.com/users/rnveach/events{/privacy}", + "received_events_url": "https://api.github.com/users/rnveach/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-02-17T20:07:48Z", + "updated_at": "2025-02-24T17:32:27Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "https://github.com/hub4j/github-api/blob/e14ec3b3677760714cd096ad8157a3e6a6dded65/src/main/java/org/kohsuke/github/GHIssueStateReason.java\n\nhttps://docs.github.com/en/rest/issues/issues?apiVersion=2022-11-28#update-an-issue\n\n> state_reason string or null\n> Can be one of: completed, not_planned, reopened, null \n\n`reopened` is supported and should be added.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2037/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2037/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2035", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2035/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2035/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2035/events", + "html_url": "https://github.com/hub4j/github-api/issues/2035", + "id": 2858255655, + "node_id": "I_kwDOAAlq-s6qXYUn", + "number": 2035, + "title": "GHCommitPointer throws NPE on null repository", + "user": { + "login": "rnveach", + "id": 5427943, + "node_id": "MDQ6VXNlcjU0Mjc5NDM=", + "avatar_url": "https://avatars.githubusercontent.com/u/5427943?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rnveach", + "html_url": "https://github.com/rnveach", + "followers_url": "https://api.github.com/users/rnveach/followers", + "following_url": "https://api.github.com/users/rnveach/following{/other_user}", + "gists_url": "https://api.github.com/users/rnveach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rnveach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rnveach/subscriptions", + "organizations_url": "https://api.github.com/users/rnveach/orgs", + "repos_url": "https://api.github.com/users/rnveach/repos", + "events_url": "https://api.github.com/users/rnveach/events{/privacy}", + "received_events_url": "https://api.github.com/users/rnveach/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2025-02-17T16:04:48Z", + "updated_at": "2025-02-24T17:32:12Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\n\nI receive an NPE on `GHCommitPointer#getCommit` because `getRepository()` returns `null`.\n\nI assume `getRepository()` should always be populated as I need a `GHRepository` to even get the initial PR/issue in the first place.\n\n**To Reproduce**\n\nWhile scanning https://github.com/checkstyle/checkstyle/pulls , I pick up PR 1.\nI call `GHPullRequest#getHead()` and get the `GHCommitPointer`.\nI call `GHCommitPointer#getCommit()` and receive an NPE.\n`getRepository()` returns `null`.\n\n**Expected behavior**\n\nNo NPE.\n\n**Additional context**\n\n`GHPullRequest#getBase()` doesn't seem to have this issue.\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2035/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2035/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2032", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2032/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2032/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2032/events", + "html_url": "https://github.com/hub4j/github-api/issues/2032", + "id": 2854448657, + "node_id": "I_kwDOAAlq-s6qI24R", + "number": 2032, + "title": "Add more methods to QueryBuilder", + "user": { + "login": "rnveach", + "id": 5427943, + "node_id": "MDQ6VXNlcjU0Mjc5NDM=", + "avatar_url": "https://avatars.githubusercontent.com/u/5427943?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rnveach", + "html_url": "https://github.com/rnveach", + "followers_url": "https://api.github.com/users/rnveach/followers", + "following_url": "https://api.github.com/users/rnveach/following{/other_user}", + "gists_url": "https://api.github.com/users/rnveach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rnveach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rnveach/subscriptions", + "organizations_url": "https://api.github.com/users/rnveach/orgs", + "repos_url": "https://api.github.com/users/rnveach/repos", + "events_url": "https://api.github.com/users/rnveach/events{/privacy}", + "received_events_url": "https://api.github.com/users/rnveach/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2025-02-14T18:22:40Z", + "updated_at": "2025-02-18T05:58:24Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "1)\n`GHPullRequestQueryBuilder` doesn't seem to support `pageSize(int)` but `GHIssueQueryBuilder` does.\n\nI don't know if there is a technical reason, but it would help to support repos with a large number of PRs. I didn't realize this was a possibility at first and took a long time to start iterating through issues.\n\n2)\n`GHIssueQueryBuilder` seems to still pull in PRs. Is it possible to add another method to the query to drop PRs from Issue queries and the same for Issues from PR queries. It would help the amount of data to transfer from the server if the server supported it.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2032/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2032/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1997", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1997/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1997/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1997/events", + "html_url": "https://github.com/hub4j/github-api/issues/1997", + "id": 2745371503, + "node_id": "I_kwDOAAlq-s6jowtv", + "number": 1997, + "title": "enhancement: add app support for GHBranchProtectionBuilder Restrictions", + "user": { + "login": "akt-penklera", + "id": 182738397, + "node_id": "U_kgDOCuRd3Q", + "avatar_url": "https://avatars.githubusercontent.com/u/182738397?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/akt-penklera", + "html_url": "https://github.com/akt-penklera", + "followers_url": "https://api.github.com/users/akt-penklera/followers", + "following_url": "https://api.github.com/users/akt-penklera/following{/other_user}", + "gists_url": "https://api.github.com/users/akt-penklera/gists{/gist_id}", + "starred_url": "https://api.github.com/users/akt-penklera/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/akt-penklera/subscriptions", + "organizations_url": "https://api.github.com/users/akt-penklera/orgs", + "repos_url": "https://api.github.com/users/akt-penklera/repos", + "events_url": "https://api.github.com/users/akt-penklera/events{/privacy}", + "received_events_url": "https://api.github.com/users/akt-penklera/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2024-12-17T16:12:55Z", + "updated_at": "2025-02-13T22:53:44Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hi,\r\nAs it stands the api offers, restrictions for users, teams, but app slugs cannot be added to the definition.\r\nWould it be possible to add this?\r\nI checked and currently other endpoints for gihub apps do exist.\r\n\r\nSorry if this is out of place, and thank you for an awsome project.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1997/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1997/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2007", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2007/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2007/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2007/events", + "html_url": "https://github.com/hub4j/github-api/issues/2007", + "id": 2788128469, + "node_id": "I_kwDOAAlq-s6mL3bV", + "number": 2007, + "title": "GHRespository.getTemplateRepository() should call populate() if null", + "user": { + "login": "kkroner8451", + "id": 14809736, + "node_id": "MDQ6VXNlcjE0ODA5NzM2", + "avatar_url": "https://avatars.githubusercontent.com/u/14809736?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kkroner8451", + "html_url": "https://github.com/kkroner8451", + "followers_url": "https://api.github.com/users/kkroner8451/followers", + "following_url": "https://api.github.com/users/kkroner8451/following{/other_user}", + "gists_url": "https://api.github.com/users/kkroner8451/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kkroner8451/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kkroner8451/subscriptions", + "organizations_url": "https://api.github.com/users/kkroner8451/orgs", + "repos_url": "https://api.github.com/users/kkroner8451/repos", + "events_url": "https://api.github.com/users/kkroner8451/events{/privacy}", + "received_events_url": "https://api.github.com/users/kkroner8451/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-01-14T19:32:50Z", + "updated_at": "2025-02-13T22:53:01Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nA clear and concise description of what the bug is.\r\n\r\nWhen calling the GitHub API to get a [list of repositories](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#list-organization-repositories) the `template_repository` field is not included in the response. Thus if using this library to get a list of repositories (i.e. `GHOrganization.listRepositories()`) that field will always be null when mapped onto the GHRepository object constructed as introduced in [PR#1817](https://github.com/hub4j/github-api/pull/1817/). Under a different proposal I saw [PR#1579](https://github.com/hub4j/github-api/pull/1579) it had a check \r\n\r\n```java\r\n if this.template_repository == null \r\n populate()\r\n```\r\nThis has its own performance concerns as there is no flag that `populate()` isn't called more than once which would happen if this was not a child of a template repository and the `getTemplateRepository()` method was called multiple times. All works as expected when getting a single repository via `GitHub.getRepository()` as the[ GitHub API](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#get-a-repository) includes the template_repository field in that case.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Go to '...'\r\n2. Click on '....'\r\n3. Scroll down to '....'\r\n4. See error\r\n\r\n```java\r\nGHRepositories[] repos = gitHub.getOrganization(\"SAMPLE\").listRepositories(10);\r\nfor (GHRepository repo : repos){\r\n if (repo.getTemplateRepository() != null) {\r\n // BUG: This will never hit as underlying template_repository field isn't ever populated when using list vs single get methods\r\n doSomethingWithTemplate();\r\n }\r\n}\r\n```\r\n\r\n**Expected behavior**\r\nA clear and concise description of what you expected to happen.\r\n\r\nI expect the GHRepository.getTemplateRepository() to return the value assuming the repo is a child of a template regardless of if it was originally constructed by a method to get the single repo (working) versus getting a list of repositories (not working) and believe making the delayed load `populate()` call as seen in other places is an established behavior that would be expected.\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: [e.g. iOS]\r\n - Browser [e.g. chrome, safari]\r\n - Version [e.g. 22]\r\n\r\n**Additional context**\r\nAdd any other context about the problem here.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2007/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2007/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2013", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2013/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2013/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2013/events", + "html_url": "https://github.com/hub4j/github-api/issues/2013", + "id": 2797786767, + "node_id": "I_kwDOAAlq-s6mwtaP", + "number": 2013, + "title": "`GHPullRequestReviewComment` should extend `GHIssueComment`", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-01-19T19:18:39Z", + "updated_at": "2025-01-21T06:39:37Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "It seems that `GHPullRequestReviewComment` should extend `GHIssueComment`, the same way `GHPullRequest` extends `GHIssue`. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2013/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2013/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2004", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2004/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2004/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2004/events", + "html_url": "https://github.com/hub4j/github-api/issues/2004", + "id": 2766043832, + "node_id": "I_kwDOAAlq-s6k3nq4", + "number": 2004, + "title": "Issues to get all the retryAttemps of an workflow", + "user": { + "login": "ananta-code", + "id": 30434147, + "node_id": "MDQ6VXNlcjMwNDM0MTQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/30434147?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ananta-code", + "html_url": "https://github.com/ananta-code", + "followers_url": "https://api.github.com/users/ananta-code/followers", + "following_url": "https://api.github.com/users/ananta-code/following{/other_user}", + "gists_url": "https://api.github.com/users/ananta-code/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ananta-code/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ananta-code/subscriptions", + "organizations_url": "https://api.github.com/users/ananta-code/orgs", + "repos_url": "https://api.github.com/users/ananta-code/repos", + "events_url": "https://api.github.com/users/ananta-code/events{/privacy}", + "received_events_url": "https://api.github.com/users/ananta-code/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2025-01-02T13:33:43Z", + "updated_at": "2025-01-06T14:22:07Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nI have a runner and which was retried 5 times and each runner has almost 25 jobs so when i use \r\n repository.getWorkflowRun(runnerId/workflow_id), it is returning the ghWorkFlowRunner but newWorkFlowRun.listJobs().toList() doesn't have all the retried job info\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Create a PR\r\n2. Cancel the first runner\r\n3. Retry the runner again and again\r\n4. newWorkFlowRun.listJobs().toList() should contain all the jobs irrespective of the retry attemps\r\n\r\n**Expected behavior**\r\nnewWorkFlowRun.listJobs().toList() is only returning most recent retried jobs\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: iOS\r\n - Version 1.326\r\n\r\n**Additional context**\r\nIs there any way to get the runner specific to a runner id and retryAttempt.\r\nI have monorepo so repository.queryWorkflowRuns().list() and then filter by runnerId and retry attempt is not feasible for me since we have more than 3000 runners getting executed everyday.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2004/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2004/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1973", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1973/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1973/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1973/events", + "html_url": "https://github.com/hub4j/github-api/issues/1973", + "id": 2586640889, + "node_id": "I_kwDOAAlq-s6aLQH5", + "number": 1973, + "title": "Extract `parseWaitTime` method to shared utility", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2024-10-14T17:28:56Z", + "updated_at": "2025-01-02T22:47:12Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "`GitHubAbuseLimitHander` and `GitHubRateLimitHandler` both implement `parseWaitTime`. Most of the code is the same and could also be useful to consumers of this library. \r\n\r\nExtract `parseWaitTime` to a utility class and consider exposing as `public`. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1973/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1973/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1964", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1964/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1964/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1964/events", + "html_url": "https://github.com/hub4j/github-api/issues/1964", + "id": 2563506909, + "node_id": "I_kwDOAAlq-s6YzALd", + "number": 1964, + "title": "allowSquashMerge : \"Default commit message\" parameters are missing", + "user": { + "login": "sbouchexbellomie-Philips", + "id": 182072604, + "node_id": "U_kgDOCto1HA", + "avatar_url": "https://avatars.githubusercontent.com/u/182072604?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sbouchexbellomie-Philips", + "html_url": "https://github.com/sbouchexbellomie-Philips", + "followers_url": "https://api.github.com/users/sbouchexbellomie-Philips/followers", + "following_url": "https://api.github.com/users/sbouchexbellomie-Philips/following{/other_user}", + "gists_url": "https://api.github.com/users/sbouchexbellomie-Philips/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sbouchexbellomie-Philips/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sbouchexbellomie-Philips/subscriptions", + "organizations_url": "https://api.github.com/users/sbouchexbellomie-Philips/orgs", + "repos_url": "https://api.github.com/users/sbouchexbellomie-Philips/repos", + "events_url": "https://api.github.com/users/sbouchexbellomie-Philips/events{/privacy}", + "received_events_url": "https://api.github.com/users/sbouchexbellomie-Philips/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2024-10-03T09:04:14Z", + "updated_at": "2025-01-02T22:46:06Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "allowSquashMerge is only accepting an \"enabled\" parameter whereas the GitHub API is gving the ability to set the \"Default commit message\" (default message, PR title, PR title + commit details, PR title + description)\r\n\r\nAny plan to add it ? Need a PR ?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1964/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1964/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1899", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1899/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1899/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1899/events", + "html_url": "https://github.com/hub4j/github-api/issues/1899", + "id": 2435118334, + "node_id": "I_kwDOAAlq-s6RJPT-", + "number": 1899, + "title": "Missing endpoint for adding a repo to an app installation", + "user": { + "login": "deliaconstantinescu", + "id": 175299067, + "node_id": "U_kgDOCnLZ-w", + "avatar_url": "https://avatars.githubusercontent.com/u/175299067?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/deliaconstantinescu", + "html_url": "https://github.com/deliaconstantinescu", + "followers_url": "https://api.github.com/users/deliaconstantinescu/followers", + "following_url": "https://api.github.com/users/deliaconstantinescu/following{/other_user}", + "gists_url": "https://api.github.com/users/deliaconstantinescu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/deliaconstantinescu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/deliaconstantinescu/subscriptions", + "organizations_url": "https://api.github.com/users/deliaconstantinescu/orgs", + "repos_url": "https://api.github.com/users/deliaconstantinescu/repos", + "events_url": "https://api.github.com/users/deliaconstantinescu/events{/privacy}", + "received_events_url": "https://api.github.com/users/deliaconstantinescu/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2024-07-29T11:05:41Z", + "updated_at": "2024-12-11T22:13:29Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I can't seem to find the implementation of [this endpoint](https://docs.github.com/en/rest/apps/installations?apiVersion=2022-11-28#add-a-repository-to-an-app-installation).\r\n\r\nWhat I want to do is be able to create a repository and add it to an already existing app in my github organization. I want to achieve this by only using the app installation ID and personal access token.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1899/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1899/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1847", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1847/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1847/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1847/events", + "html_url": "https://github.com/hub4j/github-api/issues/1847", + "id": 2318655614, + "node_id": "I_kwDOAAlq-s6KM-B-", + "number": 1847, + "title": "Custom properties missing in GHRepository", + "user": { + "login": "nardew", + "id": 28791551, + "node_id": "MDQ6VXNlcjI4NzkxNTUx", + "avatar_url": "https://avatars.githubusercontent.com/u/28791551?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nardew", + "html_url": "https://github.com/nardew", + "followers_url": "https://api.github.com/users/nardew/followers", + "following_url": "https://api.github.com/users/nardew/following{/other_user}", + "gists_url": "https://api.github.com/users/nardew/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nardew/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nardew/subscriptions", + "organizations_url": "https://api.github.com/users/nardew/orgs", + "repos_url": "https://api.github.com/users/nardew/repos", + "events_url": "https://api.github.com/users/nardew/events{/privacy}", + "received_events_url": "https://api.github.com/users/nardew/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 7, + "created_at": "2024-05-27T09:10:49Z", + "updated_at": "2024-12-09T03:48:22Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\n`GHRepository` class (interface to `repos/org/repo_name` GitHub endpoint) is missing custom properties. They are mentioned in the GitHub documentation at the root level as\r\n\r\n```\r\n\"custom_properties\": {\r\n \"type\": \"object\",\r\n \"description\": \"The custom properties that were defined for the repository. The keys are the custom property names, and the values are the corresponding custom property values.\",\r\n \"additionalProperties\": true\r\n }\r\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1847/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1847/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1983", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1983/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1983/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1983/events", + "html_url": "https://github.com/hub4j/github-api/issues/1983", + "id": 2631489077, + "node_id": "I_kwDOAAlq-s6c2VY1", + "number": 1983, + "title": "`getReleaseByTagName` does not find draft releases", + "user": { + "login": "MattSturgeon", + "id": 5046562, + "node_id": "MDQ6VXNlcjUwNDY1NjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/5046562?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MattSturgeon", + "html_url": "https://github.com/MattSturgeon", + "followers_url": "https://api.github.com/users/MattSturgeon/followers", + "following_url": "https://api.github.com/users/MattSturgeon/following{/other_user}", + "gists_url": "https://api.github.com/users/MattSturgeon/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MattSturgeon/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MattSturgeon/subscriptions", + "organizations_url": "https://api.github.com/users/MattSturgeon/orgs", + "repos_url": "https://api.github.com/users/MattSturgeon/repos", + "events_url": "https://api.github.com/users/MattSturgeon/events{/privacy}", + "received_events_url": "https://api.github.com/users/MattSturgeon/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2024-11-03T21:33:06Z", + "updated_at": "2024-11-04T07:20:47Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\n`getReleaseByTagName` is only able to find published releases, not draft releases.\r\n\r\nThis is caused by draft releases not being accessible via the `GET /repos/:owner/:repo/releases/tags/:tag` endpoint.\r\n\r\nDraft releases do have the `tag_name` attribute set correctly, however they are only accessible via:\r\n- `GET /repos/:owner/:repo/releases`\r\n- `GET /repos/:owner/:repo/releases/:id`\r\n- GraphQL\r\n\r\nWithout this, the only way I am able to find draft releases is by iterating over `listReleases()`.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Create a draft release on a GitHub repo\r\n2. Attempt to use `getReleaseByTagName` to retrieve the release information\r\n3. See that `null` is returned instead\r\n\r\n**Expected behavior**\r\nI expect either `getReleaseByTagName` to lookup draft releases, or an alternative method be added to do so.\r\n\r\nIf a new method is added, I'm not sure the best name for it.\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: NixOS 24.11\r\n - Browser Firefox 131\r\n - Version github-api 1.318\r\n\r\n**Additional context**\r\n`getReleaseByTagName` was added in https://github.com/hub4j/github-api/pull/411\r\n\r\nThe `gh` CLI implements its [`FetchReleases`](https://github.com/cli/cli/blob/30066b0042d0c5928d959e288144300cb28196c9/pkg/cmd/release/shared/fetch.go#L134-L161) function as first using the `GET /repos/:owner/:repo/releases/tags/:tag` endpoint, and then falling back to a [`fetchDraftRelease`](https://github.com/cli/cli/blob/30066b0042d0c5928d959e288144300cb28196c9/pkg/cmd/release/shared/fetch.go#L169-L200) function which finds the release via a GraphQL qurey and then gets all the data via a `GET /repos/:owner/:repo/releases/:id` request.\r\n\r\nIn the `gh` CLI implementation, fetching a draft release requires three requests:\r\n1. Lookup `GET /repos/:owner/:repo/releases/tags/:tag` (404)\r\n2. Lookup GraphQL query\r\n3. Lookup `GET /repos/:owner/:repo/releases/:id`\r\n\r\nThe first request is not strictly necessary, since the GraphQL query will also find non-draft releases.\r\n\r\nI was able to use the following query to get the tag's id for draft tags:\r\n```graphql\r\nquery($owner:String!, $repo:String!, $tagName:String!){\r\n repository(owner: $owner, name: $repo) {\r\n release(tagName: $tagName) {\r\n databaseId,\r\n isDraft\r\n }\r\n }\r\n}\r\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1983/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1983/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1974", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1974/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1974/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1974/events", + "html_url": "https://github.com/hub4j/github-api/issues/1974", + "id": 2597968075, + "node_id": "I_kwDOAAlq-s6a2djL", + "number": 1974, + "title": "Calling getRef().delete() does not respect the base URL set in .withEndpoint()", + "user": { + "login": "ajmalab", + "id": 90693406, + "node_id": "MDQ6VXNlcjkwNjkzNDA2", + "avatar_url": "https://avatars.githubusercontent.com/u/90693406?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ajmalab", + "html_url": "https://github.com/ajmalab", + "followers_url": "https://api.github.com/users/ajmalab/followers", + "following_url": "https://api.github.com/users/ajmalab/following{/other_user}", + "gists_url": "https://api.github.com/users/ajmalab/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ajmalab/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ajmalab/subscriptions", + "organizations_url": "https://api.github.com/users/ajmalab/orgs", + "repos_url": "https://api.github.com/users/ajmalab/repos", + "events_url": "https://api.github.com/users/ajmalab/events{/privacy}", + "received_events_url": "https://api.github.com/users/ajmalab/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2024-10-18T16:43:11Z", + "updated_at": "2024-10-26T08:23:20Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nCalling `getRef().delete()` does not respect the base URL set in .withEndpoint() when creating the OAuth client. It uses `api.github.com` by default. While this would work in production, it blocks the ability to test this endpoint using local mock servers.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Create an OAuth client as follows\r\n```\r\nvar githubClient = new GitHubBuilder().withOAuthToken(\"my-token\").withEndpoint(\"http://localhost:8080\").build();\r\n```\r\n3. Call the method to delete a ref:\r\n```\r\ngithubClient.getRepo(\"owner/repo\").getRef(\"heads/my-branch\").delete()\r\n```\r\n4. If you inspect the request in a debugger, you will see that the constructed URL has the host `https://api.github.com` and not `http://localhost:8080`.\r\n\r\n\r\n**Expected behavior**\r\nThe `getRef().delete()` method should respect the base URL passed in via `withEndpoint()` like the other chained methods of `getRepository()`.\r\n\r\n\r\n**Additional context**\r\nLibrary version: 1.321\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1974/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1974/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/601", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/601/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/601/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/601/events", + "html_url": "https://github.com/hub4j/github-api/issues/601", + "id": 520420353, + "node_id": "MDU6SXNzdWU1MjA0MjAzNTM=", + "number": 601, + "title": "Document this library's approach to GitHub API rate limit", + "user": { + "login": "PauloMigAlmeida", + "id": 1011868, + "node_id": "MDQ6VXNlcjEwMTE4Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/1011868?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/PauloMigAlmeida", + "html_url": "https://github.com/PauloMigAlmeida", + "followers_url": "https://api.github.com/users/PauloMigAlmeida/followers", + "following_url": "https://api.github.com/users/PauloMigAlmeida/following{/other_user}", + "gists_url": "https://api.github.com/users/PauloMigAlmeida/gists{/gist_id}", + "starred_url": "https://api.github.com/users/PauloMigAlmeida/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/PauloMigAlmeida/subscriptions", + "organizations_url": "https://api.github.com/users/PauloMigAlmeida/orgs", + "repos_url": "https://api.github.com/users/PauloMigAlmeida/repos", + "events_url": "https://api.github.com/users/PauloMigAlmeida/events{/privacy}", + "received_events_url": "https://api.github.com/users/PauloMigAlmeida/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 2070644911, + "node_id": "MDU6TGFiZWwyMDcwNjQ0OTEx", + "url": "https://api.github.com/repos/hub4j/github-api/labels/documentation", + "name": "documentation", + "color": "6ee5cb", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2019-11-09T13:00:41Z", + "updated_at": "2024-10-22T08:19:14Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Even for people that know certain bits and pieces of this library's source code, it still not trivial to understand how this library deals with GitHub's API rate limit.\r\n\r\nI'm planning to write something about it as soon as the #595 is merged (as it may introduce the custom api rates)\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/601/reactions", + "total_count": 2, + "+1": 2, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/601/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1658", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1658/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1658/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1658/events", + "html_url": "https://github.com/hub4j/github-api/issues/1658", + "id": 1708875207, + "node_id": "I_kwDOAAlq-s5l213H", + "number": 1658, + "title": "Convert methods with checked exceptions to unchecked (support streaming and functional programming)", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 20, + "created_at": "2023-05-14T09:18:13Z", + "updated_at": "2024-10-01T08:57:45Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hi,\r\n`GHObject#getCreatedAt` and `GHObject#getUpdatedAt` throw unnecessary `IOException` which is not being thrown by an underlying code. Is there a reason for this?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1658/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1658/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1916", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1916/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1916/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1916/events", + "html_url": "https://github.com/hub4j/github-api/issues/1916", + "id": 2492554383, + "node_id": "I_kwDOAAlq-s6UkVyP", + "number": 1916, + "title": "Support /repos/{owner}/{repo}/automated-security-fixes", + "user": { + "login": "ranma2913", + "id": 4295880, + "node_id": "MDQ6VXNlcjQyOTU4ODA=", + "avatar_url": "https://avatars.githubusercontent.com/u/4295880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ranma2913", + "html_url": "https://github.com/ranma2913", + "followers_url": "https://api.github.com/users/ranma2913/followers", + "following_url": "https://api.github.com/users/ranma2913/following{/other_user}", + "gists_url": "https://api.github.com/users/ranma2913/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ranma2913/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ranma2913/subscriptions", + "organizations_url": "https://api.github.com/users/ranma2913/orgs", + "repos_url": "https://api.github.com/users/ranma2913/repos", + "events_url": "https://api.github.com/users/ranma2913/events{/privacy}", + "received_events_url": "https://api.github.com/users/ranma2913/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2024-08-28T16:36:56Z", + "updated_at": "2024-09-10T07:07:05Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Support Endpoints:\r\n\r\n- https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#check-if-automated-security-fixes-are-enabled-for-a-repository\r\n- https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#enable-automated-security-fixes\r\n- https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#disable-automated-security-fixes", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1916/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1916/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/901", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/901/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/901/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/901/events", + "html_url": "https://github.com/hub4j/github-api/issues/901", + "id": 666061684, + "node_id": "MDU6SXNzdWU2NjYwNjE2ODQ=", + "number": 901, + "title": "Commit bigger file failed", + "user": { + "login": "laboratorys", + "id": 53255535, + "node_id": "MDQ6VXNlcjUzMjU1NTM1", + "avatar_url": "https://avatars.githubusercontent.com/u/53255535?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/laboratorys", + "html_url": "https://github.com/laboratorys", + "followers_url": "https://api.github.com/users/laboratorys/followers", + "following_url": "https://api.github.com/users/laboratorys/following{/other_user}", + "gists_url": "https://api.github.com/users/laboratorys/gists{/gist_id}", + "starred_url": "https://api.github.com/users/laboratorys/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/laboratorys/subscriptions", + "organizations_url": "https://api.github.com/users/laboratorys/orgs", + "repos_url": "https://api.github.com/users/laboratorys/repos", + "events_url": "https://api.github.com/users/laboratorys/events{/privacy}", + "received_events_url": "https://api.github.com/users/laboratorys/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + }, + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 5, + "created_at": "2020-07-27T07:34:42Z", + "updated_at": "2024-09-06T04:03:42Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Error when I upload a 60M file.\r\nThis is my code.\r\n```\r\nGHRepository repo = github.getRepository(user+\"/\"+GithubUploader.repo);\r\n\t\t\tGHRef masterRef = repo.getRef(\"heads/master\");\r\n\t String masterTreeSha = repo.getTreeRecursive(\"master\", 1).getSha();\r\n\t GHTreeBuilder treeBuilder = repo.createTree().baseTree(masterTreeSha);\r\n\t\t\ttreeBuilder.add(uploadPath+\"/\"+file.getName(), FileUtil.readBytes(file), true);\r\n\t\t\tString treeSha = treeBuilder.create().getSha();\r\n\t String commitSha = repo.createCommit()\r\n\t \t .message(username + \" updates\")\r\n\t .tree(treeSha)\r\n\t .parent(masterRef.getObject().getSha())\r\n\t .create()\r\n\t .getSHA1();\r\n\t masterRef.updateTo(commitSha);\r\n```\r\nAnd the error:\r\n```\r\njava.lang.OutOfMemoryError: Java heap space\r\n\tat java.util.Base64$Encoder.encode(Base64.java:262) ~[na:1.8.0_262]\r\n\tat java.util.Base64$Encoder.encodeToString(Base64.java:315) ~[na:1.8.0_262]\r\n\tat org.kohsuke.github.GHBlobBuilder.binaryContent(GHBlobBuilder.java:39) ~[github-api-1.115.jar!/:na]\r\n\tat org.kohsuke.github.GHTreeBuilder.add(GHTreeBuilder.java:136) ~[github-api-1.115.jar!/:na]\r\n```\r\nRefer to this link\r\nhttps://github.com/hub4j/github-api/issues/878#issuecomment-655047530", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/901/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/901/timeline", + "performed_via_github_app": null, + "state_reason": "reopened", + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/513", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/513/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/513/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/513/events", + "html_url": "https://github.com/hub4j/github-api/issues/513", + "id": 432772736, + "node_id": "MDU6SXNzdWU0MzI3NzI3MzY=", + "number": 513, + "title": "Make low-level Requester and GitHubClient APIs public", + "user": { + "login": "Vampire", + "id": 325196, + "node_id": "MDQ6VXNlcjMyNTE5Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/325196?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Vampire", + "html_url": "https://github.com/Vampire", + "followers_url": "https://api.github.com/users/Vampire/followers", + "following_url": "https://api.github.com/users/Vampire/following{/other_user}", + "gists_url": "https://api.github.com/users/Vampire/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Vampire/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Vampire/subscriptions", + "organizations_url": "https://api.github.com/users/Vampire/orgs", + "repos_url": "https://api.github.com/users/Vampire/repos", + "events_url": "https://api.github.com/users/Vampire/events{/privacy}", + "received_events_url": "https://api.github.com/users/Vampire/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2019-04-12T22:51:43Z", + "updated_at": "2024-08-28T16:50:23Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "For being able to use missing API functionality it would be nice if the `Requester` would be accessible, so that the low-level requests can be done manually or e. g. with Kotlin extension functions, but still having the lib do rate limiting and so on.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/513/reactions", + "total_count": 8, + "+1": 8, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/513/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1712", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1712/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1712/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1712/events", + "html_url": "https://github.com/hub4j/github-api/issues/1712", + "id": 1903371311, + "node_id": "I_kwDOAAlq-s5xcyQv", + "number": 1712, + "title": "Missing support for deployment environments", + "user": { + "login": "charlie-collard", + "id": 11244353, + "node_id": "MDQ6VXNlcjExMjQ0MzUz", + "avatar_url": "https://avatars.githubusercontent.com/u/11244353?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/charlie-collard", + "html_url": "https://github.com/charlie-collard", + "followers_url": "https://api.github.com/users/charlie-collard/followers", + "following_url": "https://api.github.com/users/charlie-collard/following{/other_user}", + "gists_url": "https://api.github.com/users/charlie-collard/gists{/gist_id}", + "starred_url": "https://api.github.com/users/charlie-collard/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/charlie-collard/subscriptions", + "organizations_url": "https://api.github.com/users/charlie-collard/orgs", + "repos_url": "https://api.github.com/users/charlie-collard/repos", + "events_url": "https://api.github.com/users/charlie-collard/events{/privacy}", + "received_events_url": "https://api.github.com/users/charlie-collard/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2023-09-19T16:45:20Z", + "updated_at": "2024-07-10T07:52:06Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Deployment environments are missing from the library. For example, I can't get, list, create, update, or delete deployment environments.\r\n\r\n[GitHub REST API documentation for deployment environments](https://docs.github.com/en/rest/deployments/environments?apiVersion=2022-11-28)\r\n\r\nNote: Deployment environments may be indirectly created via creating a deployment and specifying a string in the environment field:\r\n\r\n```java\r\nimport org.kohsuke.github.GitHub\r\n\r\nprivate void createDeployment() {\r\n GitHub.connectUsingOAuth(\"githubToken\")\r\n .getRepository(\"user/repo\")\r\n .createDeployment(\"1.0\")\r\n .environment(\"production\")\r\n .create()\r\n}\r\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1712/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1712/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1891", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1891/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1891/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1891/events", + "html_url": "https://github.com/hub4j/github-api/issues/1891", + "id": 2384471476, + "node_id": "I_kwDOAAlq-s6OICW0", + "number": 1891, + "title": "Improve EnumTest to enforce `UNKNOWN` value for all API enums", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2024-07-01T18:24:14Z", + "updated_at": "2024-07-01T18:24:20Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "#1885 showed that we haven't been checking the count of all enum values. At the same time I noticed that we do not have `UNKNOWN` values for all API `enum`. \r\n\r\nAdding new values is not considered a breaking change by GitHub. This has caused `hub4j/github-api` calls to start failing unexpectedly in the the past - the new value is not recognized and we throw an exception during deserialization. No good. \r\n\r\nWe need to add `UNKNOWN` to all `enum` types that are returned from GitHub and enforce it. The test will include an exclude list to allow `enum` types only used during sending but not retrieving data. \r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1891/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1891/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1846", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1846/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1846/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1846/events", + "html_url": "https://github.com/hub4j/github-api/issues/1846", + "id": 2315222969, + "node_id": "I_kwDOAAlq-s6J_3-5", + "number": 1846, + "title": "how to use issuePayload.getIssue().deleteReaction?", + "user": { + "login": "maxandersen", + "id": 54129, + "node_id": "MDQ6VXNlcjU0MTI5", + "avatar_url": "https://avatars.githubusercontent.com/u/54129?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/maxandersen", + "html_url": "https://github.com/maxandersen", + "followers_url": "https://api.github.com/users/maxandersen/followers", + "following_url": "https://api.github.com/users/maxandersen/following{/other_user}", + "gists_url": "https://api.github.com/users/maxandersen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/maxandersen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/maxandersen/subscriptions", + "organizations_url": "https://api.github.com/users/maxandersen/orgs", + "repos_url": "https://api.github.com/users/maxandersen/repos", + "events_url": "https://api.github.com/users/maxandersen/events{/privacy}", + "received_events_url": "https://api.github.com/users/maxandersen/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1686290078, + "node_id": "MDU6TGFiZWwxNjg2MjkwMDc4", + "url": "https://api.github.com/repos/hub4j/github-api/labels/external", + "name": "external", + "color": "a0a0a0", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2024-05-24T11:57:24Z", + "updated_at": "2024-06-20T02:45:44Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "how is `issuePayload.getIssue().deleteReaction` intended to be used when its not possible to create a GHReaction with bot nor user + reaction as parameter?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1846/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1846/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1583", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1583/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1583/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1583/events", + "html_url": "https://github.com/hub4j/github-api/issues/1583", + "id": 1508284810, + "node_id": "I_kwDOAAlq-s5Z5pmK", + "number": 1583, + "title": "Enhancement: Support configuring GHE pre-receive hooks", + "user": { + "login": "michaelpigg", + "id": 8850, + "node_id": "MDQ6VXNlcjg4NTA=", + "avatar_url": "https://avatars.githubusercontent.com/u/8850?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/michaelpigg", + "html_url": "https://github.com/michaelpigg", + "followers_url": "https://api.github.com/users/michaelpigg/followers", + "following_url": "https://api.github.com/users/michaelpigg/following{/other_user}", + "gists_url": "https://api.github.com/users/michaelpigg/gists{/gist_id}", + "starred_url": "https://api.github.com/users/michaelpigg/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/michaelpigg/subscriptions", + "organizations_url": "https://api.github.com/users/michaelpigg/orgs", + "repos_url": "https://api.github.com/users/michaelpigg/repos", + "events_url": "https://api.github.com/users/michaelpigg/events{/privacy}", + "received_events_url": "https://api.github.com/users/michaelpigg/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2022-12-22T17:29:19Z", + "updated_at": "2024-06-06T03:16:17Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Self-hosted GitHub Enterprise supports configuring pre-receive hooks at the [organization](https://docs.github.com/en/enterprise-server@3.6/rest/enterprise-admin/org-pre-receive-hooks) and [repository](https://docs.github.com/en/enterprise-server@3.6/rest/enterprise-admin/repo-pre-receive-hooks). I would like github-api to support configuring these hooks.\r\n\r\nI needed to configure pre-receive hooks on several GHE repos, and extended github-api to support doing so. My enhancement mirrors the existing GHHook implementation because the two are similar in some ways, but the details are quite different.\r\n\r\nI would like to contribute that enhancement if it would be welcomed. I know the enhancement works and is valuable to me. However, I'm not sure if the project wants to go down the path of supporting a relatively niche feature that not all users would have access to. So I wanted to check before putting in the work to write tests and put together a good PR.\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1583/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1583/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1843", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1843/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1843/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1843/events", + "html_url": "https://github.com/hub4j/github-api/issues/1843", + "id": 2277296676, + "node_id": "I_kwDOAAlq-s6HvMok", + "number": 1843, + "title": "GHHook id is long, but webhook operations require int", + "user": { + "login": "karlhendrikindrikson", + "id": 32715760, + "node_id": "MDQ6VXNlcjMyNzE1NzYw", + "avatar_url": "https://avatars.githubusercontent.com/u/32715760?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/karlhendrikindrikson", + "html_url": "https://github.com/karlhendrikindrikson", + "followers_url": "https://api.github.com/users/karlhendrikindrikson/followers", + "following_url": "https://api.github.com/users/karlhendrikindrikson/following{/other_user}", + "gists_url": "https://api.github.com/users/karlhendrikindrikson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/karlhendrikindrikson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/karlhendrikindrikson/subscriptions", + "organizations_url": "https://api.github.com/users/karlhendrikindrikson/orgs", + "repos_url": "https://api.github.com/users/karlhendrikindrikson/repos", + "events_url": "https://api.github.com/users/karlhendrikindrikson/events{/privacy}", + "received_events_url": "https://api.github.com/users/karlhendrikindrikson/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2024-05-03T09:36:29Z", + "updated_at": "2024-06-06T03:06:58Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hi.\r\n\r\nWhen creating user and organization specific webhooks, the webhook id type is long, but find and delete operations accept an integer. This seems like a minor problem, since webhook ids start incrementing from 1, but isn't this a type safety problem in the long run?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1843/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1843/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1498", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1498/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1498/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1498/events", + "html_url": "https://github.com/hub4j/github-api/issues/1498", + "id": 1327616944, + "node_id": "I_kwDOAAlq-s5PIdOw", + "number": 1498, + "title": "Add an option to generate release notes", + "user": { + "login": "aalmiray", + "id": 13969, + "node_id": "MDQ6VXNlcjEzOTY5", + "avatar_url": "https://avatars.githubusercontent.com/u/13969?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/aalmiray", + "html_url": "https://github.com/aalmiray", + "followers_url": "https://api.github.com/users/aalmiray/followers", + "following_url": "https://api.github.com/users/aalmiray/following{/other_user}", + "gists_url": "https://api.github.com/users/aalmiray/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aalmiray/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aalmiray/subscriptions", + "organizations_url": "https://api.github.com/users/aalmiray/orgs", + "repos_url": "https://api.github.com/users/aalmiray/repos", + "events_url": "https://api.github.com/users/aalmiray/events{/privacy}", + "received_events_url": "https://api.github.com/users/aalmiray/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2022-08-03T18:15:41Z", + "updated_at": "2024-05-30T06:18:51Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "GitHub offers an option to generate release notes based on issues and PRs -> https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes\r\n\r\nThe API call is described at https://docs.github.com/en/rest/releases/releases#generate-release-notes-content-for-a-release", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1498/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1498/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1771", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1771/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1771/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1771/events", + "html_url": "https://github.com/hub4j/github-api/issues/1771", + "id": 2044899947, + "node_id": "I_kwDOAAlq-s554rJr", + "number": 1771, + "title": "`GHEventPayload` should not contain `repository` as a root level property", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2023-12-16T18:43:30Z", + "updated_at": "2024-03-18T20:39:52Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Probly a candidate for a breaking change for v2:\r\n`GHEventPayload` probably should not contain `repository` as a root level property as it might not be present in every webhook payload. An example would be `installation` event, which is evident from `org/kohsuke/github/GHEventPayloadTest/installation.json` contents.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1771/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1771/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1458", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1458/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1458/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1458/events", + "html_url": "https://github.com/hub4j/github-api/issues/1458", + "id": 1241532782, + "node_id": "I_kwDOAAlq-s5KAElu", + "number": 1458, + "title": "Error getting notification", + "user": { + "login": "DeveloperSantosh", + "id": 100271188, + "node_id": "U_kgDOBfoEVA", + "avatar_url": "https://avatars.githubusercontent.com/u/100271188?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/DeveloperSantosh", + "html_url": "https://github.com/DeveloperSantosh", + "followers_url": "https://api.github.com/users/DeveloperSantosh/followers", + "following_url": "https://api.github.com/users/DeveloperSantosh/following{/other_user}", + "gists_url": "https://api.github.com/users/DeveloperSantosh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/DeveloperSantosh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/DeveloperSantosh/subscriptions", + "organizations_url": "https://api.github.com/users/DeveloperSantosh/orgs", + "repos_url": "https://api.github.com/users/DeveloperSantosh/repos", + "events_url": "https://api.github.com/users/DeveloperSantosh/events{/privacy}", + "received_events_url": "https://api.github.com/users/DeveloperSantosh/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 5, + "created_at": "2022-05-19T10:01:22Z", + "updated_at": "2024-03-15T23:38:19Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "While retrieving notifications it's throwing errors described below for the code listed below.\r\n```bash\r\norg.kohsuke.github.HttpException: {\"message\":\"Unable to parse If-Modified-Since request header. Please make sure value is in an acceptable format.\",\"documentation_url\":\"https://docs.github.com/rest/reference/activity#list-notifications-for-the-authenticated-user\"}\r\n\tat org.kohsuke.github.GitHubConnectorResponseErrorHandler$1.onError(GitHubConnectorResponseErrorHandler.java:56) ~[github-api-1.306.jar:na]\r\n\tat org.kohsuke.github.GitHubClient.detectKnownErrors(GitHubClient.java:424) ~[github-api-1.306.jar:na]\r\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:386) ~[github-api-1.306.jar:na]\r\n\tat org.kohsuke.github.GitHubPageIterator.fetch(GitHubPageIterator.java:142) ~[github-api-1.306.jar:na]\r\n\tat org.kohsuke.github.GitHubPageIterator.hasNext(GitHubPageIterator.java:89) ~[github-api-1.306.jar:na]\r\n\tat org.kohsuke.github.PagedIterator.fetch(PagedIterator.java:106) ~[github-api-1.306.jar:na]\r\n\tat org.kohsuke.github.PagedIterator.nextPageArray(PagedIterator.java:134) ~[github-api-1.306.jar:na]\r\n\tat org.kohsuke.github.PagedIterable.toArray(PagedIterable.java:78) ~[github-api-1.306.jar:na]\r\n\tat org.kohsuke.github.GitHubPageContentsIterable.toResponse(GitHubPageContentsIterable.java:58) ~[github-api-1.306.jar:na]\r\n\tat org.kohsuke.github.GHNotificationStream$1.fetch(GHNotificationStream.java:183) ~[github-api-1.306.jar:na]\r\n\tat org.kohsuke.github.GHNotificationStream$1.hasNext(GHNotificationStream.java:149) ~[github-api-1.306.jar:na]\r\n```\r\n**The line of code where I am getting error is\r\n```code\r\nGHNotificationStream notificationStream = gitHub.listNotifications();\r\nfor (GHThread ghThread : notificationStream){\r\n Map notification = new HashMap<>();\r\n notification.put(\"type\", ghThread.getType());\r\n notification.put(\"title\", ghThread.getTitle());\r\n notification.put(\"reason\", ghThread.getReason());\r\n notification.put(\"createdAt\", String.valueOf(ghThread.getCreatedAt()));\r\n notification.put(\"updatedAt\", String.valueOf(ghThread.getUpdatedAt()));\r\n notification.put(\"repository\", ghThread.getRepository().getName());\r\n notificationList.add(notification);\r\n }\r\n```\r\nI am not sure about the real cause of it but it's maybe caused due to the 'null' value passing in lastModified variable in org.kohsuke.github.GHNotificationStream class line number: 107 of below snippet,\r\n\r\n```\r\nif (this.nextCheckTime < now) {\r\n req.setHeader(\"If-Modified-Since\", `this.lastModified);\r\n Requester requester = (Requester)req.withUrlPath(GHNotificationStream.this.apiUrl, new String[0]);\r\n GitHubResponse response = ((GitHubPageContentsIterable)requester.toIterable(GHThread[].class, (Consumer)null)).toResponse();\r\n this.threads = (GHThread[])response.body();\r\n if (this.threads == null) {\r\n this.threads = GHNotificationStream.EMPTY_ARRAY;\r\n } else {\r\n ++this.lastUpdated;\r\n }\r\n```\r\n**Expected behavior**\r\nA GHThread value should be given in return but throwing HttpException indicating the value of the header \"If-Modified-Since\" is null.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1458/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1458/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1035", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1035/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1035/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1035/events", + "html_url": "https://github.com/hub4j/github-api/issues/1035", + "id": 806598555, + "node_id": "MDU6SXNzdWU4MDY1OTg1NTU=", + "number": 1035, + "title": "Add serialization JSON output ", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2021-02-11T17:33:16Z", + "updated_at": "2024-03-15T22:28:12Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Several users have filed issues around serializing objects to JSON: #1034, #971. \r\n\r\nConsider adding a `toJSON()` method to objects, `readRawJSON()` method to `GitHub`, or documenting a supported way to do this using the existing `ObjectMapper` returning methods.\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1035/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1035/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1815", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1815/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1815/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1815/events", + "html_url": "https://github.com/hub4j/github-api/issues/1815", + "id": 2180302354, + "node_id": "I_kwDOAAlq-s6B9MYS", + "number": 1815, + "title": "Ban use of `Thread.sleep()` in tests unless specifically approved", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2024-03-11T21:38:43Z", + "updated_at": "2024-03-11T23:35:15Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "We add `await`-based pauses the don't slow down CI testing: \r\n\r\nhttps://github.com/hub4j/github-api/blob/main/src/test/java/org/kohsuke/github/GHWorkflowRunTest.java#L574-L584\r\n\r\nThere are some timing based tests, but they are the exception. Most tests don't need to care. \r\nWe need to make `await()` an easily used test helper, enforce not calling `Thread.sleep()` unless specifically approved, and provide a helpful failure message regarding using `await`. \r\n\r\nPerhaps also a `sleepWhenTakingSnapshot()` method. See #1810 for example of why. \r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1815/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1815/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1263", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1263/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1263/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1263/events", + "html_url": "https://github.com/hub4j/github-api/issues/1263", + "id": 1015548992, + "node_id": "I_kwDOAAlq-s48iAxA", + "number": 1263, + "title": "Consider how to use OpenAPI information to improve testing and verification", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + }, + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2021-10-04T19:26:53Z", + "updated_at": "2024-03-11T22:47:10Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "See https://github.com/github/rest-api-description\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1263/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1263/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1768", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1768/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1768/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1768/events", + "html_url": "https://github.com/hub4j/github-api/issues/1768", + "id": 2025917953, + "node_id": "I_kwDOAAlq-s54wQ4B", + "number": 1768, + "title": "pr.listReviews().toList(); throws GHFileNotFoundException ", + "user": { + "login": "daniel-b2c2", + "id": 94372198, + "node_id": "U_kgDOBaABZg", + "avatar_url": "https://avatars.githubusercontent.com/u/94372198?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/daniel-b2c2", + "html_url": "https://github.com/daniel-b2c2", + "followers_url": "https://api.github.com/users/daniel-b2c2/followers", + "following_url": "https://api.github.com/users/daniel-b2c2/following{/other_user}", + "gists_url": "https://api.github.com/users/daniel-b2c2/gists{/gist_id}", + "starred_url": "https://api.github.com/users/daniel-b2c2/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/daniel-b2c2/subscriptions", + "organizations_url": "https://api.github.com/users/daniel-b2c2/orgs", + "repos_url": "https://api.github.com/users/daniel-b2c2/repos", + "events_url": "https://api.github.com/users/daniel-b2c2/events{/privacy}", + "received_events_url": "https://api.github.com/users/daniel-b2c2/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2023-12-05T11:00:56Z", + "updated_at": "2024-03-09T13:34:39Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\n`List ghPullRequestReviews = pr.listReviews().toList();`\r\nThe above code should return an empty list if no reviews exist, instead it throws GHFileNotFoundException \r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Create a pull request (but do not review it)\r\n2. Search for that pull request, and then list reviews as shown in the code snippet above.\r\n3. Observe the exception thrown.\r\n\r\n**Expected behavior**\r\nReturn an empty list when there are no reviews.\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: mac\r\n - Browser NA\r\n - Version 1.318\r\n\r\n**Additional context**\r\nI think this is a regression and this behaviour wasn't like this in previous versions?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1768/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1768/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + } + ] +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/5-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/5-search_issues.json new file mode 100644 index 0000000000..7717d61fe8 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/5-search_issues.json @@ -0,0 +1,2634 @@ +{ + "total_count": 164, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/494", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/494/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/494/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/494/events", + "html_url": "https://github.com/hub4j/github-api/issues/494", + "id": 407625055, + "node_id": "MDU6SXNzdWU0MDc2MjUwNTU=", + "number": 494, + "title": "Default branch is always null for repos accessed with GHContentSearchBuilder", + "user": { + "login": "fwdekker", + "id": 13442533, + "node_id": "MDQ6VXNlcjEzNDQyNTMz", + "avatar_url": "https://avatars.githubusercontent.com/u/13442533?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fwdekker", + "html_url": "https://github.com/fwdekker", + "followers_url": "https://api.github.com/users/fwdekker/followers", + "following_url": "https://api.github.com/users/fwdekker/following{/other_user}", + "gists_url": "https://api.github.com/users/fwdekker/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fwdekker/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fwdekker/subscriptions", + "organizations_url": "https://api.github.com/users/fwdekker/orgs", + "repos_url": "https://api.github.com/users/fwdekker/repos", + "events_url": "https://api.github.com/users/fwdekker/events{/privacy}", + "received_events_url": "https://api.github.com/users/fwdekker/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2019-02-07T10:14:51Z", + "updated_at": "2024-03-08T12:57:04Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "When information on a repository is downloaded using the `GHContentSearchBuilder`, the `defaultBranch` property is always `null`, regardless of whether the repository in question has a default branch. On the other hand, if the same repository is accessed using a simple `getRepository` call, the `defaultBranch` is set correctly.\r\n\r\n## Sample setup\r\n[This repository](https://github.com/Stargator/koskela_sourcecode) has a non-standard default branch, and does not have a `master` branch. I think it's a good example for this issue.\r\n\r\n### Correct behaviour\r\nThe following code returns `\"original\"`, as expected:\r\n```java\r\nGitHub gh = GitHub.connectUsingOAuth(/* insert your token here */);\r\nreturn gh.getRepository(\"Stargator/koskela_sourcecode\").getDefaultBranch();\r\n```\r\n\r\n### Incorrect behaviour\r\nThe following code always returns `null`:\r\n```java\r\nGitHub gh = GitHub.connectUsingOAuth(/* insert your token here */);\r\nGHContentSearchBuilder sb = gh.searchContent().user(\"Stargator\")\r\n .repo(\"Stargator/koskela_sourcecode\")\r\n .q(\"koskela\");\r\nGHContent repo = sb.list().asList().get(0);\r\nreturn repo.getOwner().getDefaultBranch();\r\n```\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/494/reactions", + "total_count": 2, + "+1": 2, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/494/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1782", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1782/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1782/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1782/events", + "html_url": "https://github.com/hub4j/github-api/issues/1782", + "id": 2088750334, + "node_id": "I_kwDOAAlq-s58f8z-", + "number": 1782, + "title": "Updating a label with a question mark results in an error", + "user": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2024-01-18T17:28:46Z", + "updated_at": "2024-01-19T00:26:28Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\n\r\nIn the Quarkus project, we used to have labels like `triage/backport?` (i.e. something that should be considered for backport but is not certain to be backported).\r\n\r\nWhen working on some automation, I stumbled upon the fact that updating the label name via the API was not possible as the `?` is not correctly escaped in the URI, thus the label not being found when fetched.\r\n\r\n```\r\nrepository.getLabel(\"triage/backport?\").update().name(\"triage/backport-3.6?\").done();\r\n```\r\nwould fail.\r\n\r\nI wanted to log the problem so that we don't forget about it.\r\nI renamed our labels for the time being.\r\n\r\nI'll try to contribute a fix soon but feel free to beat me to it :).\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1782/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1782/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1767", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1767/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1767/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1767/events", + "html_url": "https://github.com/hub4j/github-api/issues/1767", + "id": 2022024107, + "node_id": "I_kwDOAAlq-s54haOr", + "number": 1767, + "title": "List pending team invitations API", + "user": { + "login": "allburov", + "id": 4376814, + "node_id": "MDQ6VXNlcjQzNzY4MTQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/4376814?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/allburov", + "html_url": "https://github.com/allburov", + "followers_url": "https://api.github.com/users/allburov/followers", + "following_url": "https://api.github.com/users/allburov/following{/other_user}", + "gists_url": "https://api.github.com/users/allburov/gists{/gist_id}", + "starred_url": "https://api.github.com/users/allburov/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/allburov/subscriptions", + "organizations_url": "https://api.github.com/users/allburov/orgs", + "repos_url": "https://api.github.com/users/allburov/repos", + "events_url": "https://api.github.com/users/allburov/events{/privacy}", + "received_events_url": "https://api.github.com/users/allburov/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2023-12-02T12:34:42Z", + "updated_at": "2023-12-08T12:49:55Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hi!\r\nAs I can see there's no API for [List pending team invitations](https://docs.github.com/ru/rest/teams/members?apiVersion=2022-11-28#list-pending-team-invitations).\r\nIt'd be great to have it!", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1767/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1767/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1587", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1587/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1587/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1587/events", + "html_url": "https://github.com/hub4j/github-api/issues/1587", + "id": 1512344293, + "node_id": "I_kwDOAAlq-s5aJIrl", + "number": 1587, + "title": "Enhancement: support name update for GitHub Check Run", + "user": { + "login": "igorsmotto", + "id": 48068670, + "node_id": "MDQ6VXNlcjQ4MDY4Njcw", + "avatar_url": "https://avatars.githubusercontent.com/u/48068670?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/igorsmotto", + "html_url": "https://github.com/igorsmotto", + "followers_url": "https://api.github.com/users/igorsmotto/followers", + "following_url": "https://api.github.com/users/igorsmotto/following{/other_user}", + "gists_url": "https://api.github.com/users/igorsmotto/gists{/gist_id}", + "starred_url": "https://api.github.com/users/igorsmotto/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/igorsmotto/subscriptions", + "organizations_url": "https://api.github.com/users/igorsmotto/orgs", + "repos_url": "https://api.github.com/users/igorsmotto/repos", + "events_url": "https://api.github.com/users/igorsmotto/events{/privacy}", + "received_events_url": "https://api.github.com/users/igorsmotto/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2022-12-28T02:52:37Z", + "updated_at": "2023-12-04T11:07:19Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Currently, both create and update of a GitHub Check Run are handled by [GHCheckRunBuilder](https://github.com/hub4j/github-api/blob/main/src/main/java/org/kohsuke/github/GHCheckRunBuilder.java) class. \r\nFor the update, this is done by constructing an instance with the [checkId](https://github.com/hub4j/github-api/blob/main/src/main/java/org/kohsuke/github/GHCheckRunBuilder.java#L96)\r\n\r\nFollowing the latest GitHub documentation about the [GitHub Check Run Update API](https://docs.github.com/en/rest/checks/runs?apiVersion=2022-11-28#update-a-check-run) it's possible to update the name of the Check Run through it, however, `GHCheckRunBuilder` doesn't expose a method for it. \r\n\r\nThis is probably because the builder is currently handling both create (which doesn't allow it) and update.\r\n\r\nHowever, not sure what's the best approach to enable this, the easiest option that I could think of is by creating a new method `withName` to the Builder that throws an exception (a simple `GHException`) if the instance was created with a name - which means it's not an update.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1587/reactions", + "total_count": 3, + "+1": 3, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1587/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1179", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1179/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1179/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1179/events", + "html_url": "https://github.com/hub4j/github-api/issues/1179", + "id": 916680790, + "node_id": "MDU6SXNzdWU5MTY2ODA3OTA=", + "number": 1179, + "title": "Consumers of Preview APIs should have to explicitly enable the Previews they want", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2021-06-09T21:17:33Z", + "updated_at": "2023-11-30T18:22:32Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Related #1017 #1003\r\n\r\nCurrently, we mark preview APIs as deprecated. Instead we should require consumers to enable the specific Preview endpoints they want and by doing so they accept that those methods may change. \r\n\r\nWe can do this now. In v1, we can log warnings the first time a Preview endpoint is used without being enabled, but otherwise do not change behavior. For v2 we'll actually fail if a preview is used when it hasn't been enabled. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1179/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1179/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1506", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1506/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1506/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1506/events", + "html_url": "https://github.com/hub4j/github-api/issues/1506", + "id": 1344481883, + "node_id": "I_kwDOAAlq-s5QIypb", + "number": 1506, + "title": "GHRepository#isDeleteBranchOnMerge alway returns false", + "user": { + "login": "alexsuter", + "id": 7498380, + "node_id": "MDQ6VXNlcjc0OTgzODA=", + "avatar_url": "https://avatars.githubusercontent.com/u/7498380?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/alexsuter", + "html_url": "https://github.com/alexsuter", + "followers_url": "https://api.github.com/users/alexsuter/followers", + "following_url": "https://api.github.com/users/alexsuter/following{/other_user}", + "gists_url": "https://api.github.com/users/alexsuter/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alexsuter/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alexsuter/subscriptions", + "organizations_url": "https://api.github.com/users/alexsuter/orgs", + "repos_url": "https://api.github.com/users/alexsuter/repos", + "events_url": "https://api.github.com/users/alexsuter/events{/privacy}", + "received_events_url": "https://api.github.com/users/alexsuter/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 10, + "created_at": "2022-08-19T13:58:14Z", + "updated_at": "2023-11-22T17:30:53Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nGHRepository#isDeleteBranchOnMerge alway returns false even if it's true\r\n\r\n**To Reproduce**\r\nCall GHRepository#isDeleteBranchOnMerge\r\n\r\n**Expected behavior**\r\nGHRepository#isDeleteBranchOnMerge should return true if its true\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1506/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1506/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1710", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1710/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1710/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1710/events", + "html_url": "https://github.com/hub4j/github-api/issues/1710", + "id": 1901098392, + "node_id": "I_kwDOAAlq-s5xUHWY", + "number": 1710, + "title": "Missing /admin/ldap/teams/:team_id/mapping call", + "user": { + "login": "Fuzzo", + "id": 6161201, + "node_id": "MDQ6VXNlcjYxNjEyMDE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6161201?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Fuzzo", + "html_url": "https://github.com/Fuzzo", + "followers_url": "https://api.github.com/users/Fuzzo/followers", + "following_url": "https://api.github.com/users/Fuzzo/following{/other_user}", + "gists_url": "https://api.github.com/users/Fuzzo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fuzzo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fuzzo/subscriptions", + "organizations_url": "https://api.github.com/users/Fuzzo/orgs", + "repos_url": "https://api.github.com/users/Fuzzo/repos", + "events_url": "https://api.github.com/users/Fuzzo/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fuzzo/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 7, + "created_at": "2023-09-18T14:41:20Z", + "updated_at": "2023-11-19T07:06:48Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I'd like to know if is planned to have the call **/admin/ldap/teams/:team_id/mapping** (which takes `ldap_dn` as body parameter) implemented.\r\nThank you for developing this library.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1710/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1710/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1738", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1738/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1738/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1738/events", + "html_url": "https://github.com/hub4j/github-api/issues/1738", + "id": 1984733821, + "node_id": "I_kwDOAAlq-s52TKJ9", + "number": 1738, + "title": "Meta: Consider squash merges instead of rebase", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2023-11-09T03:04:26Z", + "updated_at": "2023-11-10T19:48:33Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hi!\r\n\r\nJust a minor issue I've observed while scanning the git log, it seems that current PR merges into the master are being done via rebase strategy. \r\nI wanted to propose considering switching to a squash strategy, with that there won't be multiple commits for a single PR, which can be distracting.\r\nLike it is now:\r\n\"image\"\r\nPlus this commit:\r\n\"image\"\r\n\r\nWith squash, there would be just one commit like the second one.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1738/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1738/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1717", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1717/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1717/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1717/events", + "html_url": "https://github.com/hub4j/github-api/issues/1717", + "id": 1907081687, + "node_id": "I_kwDOAAlq-s5xq8HX", + "number": 1717, + "title": "Add Option to disable SSL verification", + "user": { + "login": "HelvetiaAppDev", + "id": 55525429, + "node_id": "MDQ6VXNlcjU1NTI1NDI5", + "avatar_url": "https://avatars.githubusercontent.com/u/55525429?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/HelvetiaAppDev", + "html_url": "https://github.com/HelvetiaAppDev", + "followers_url": "https://api.github.com/users/HelvetiaAppDev/followers", + "following_url": "https://api.github.com/users/HelvetiaAppDev/following{/other_user}", + "gists_url": "https://api.github.com/users/HelvetiaAppDev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/HelvetiaAppDev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/HelvetiaAppDev/subscriptions", + "organizations_url": "https://api.github.com/users/HelvetiaAppDev/orgs", + "repos_url": "https://api.github.com/users/HelvetiaAppDev/repos", + "events_url": "https://api.github.com/users/HelvetiaAppDev/events{/privacy}", + "received_events_url": "https://api.github.com/users/HelvetiaAppDev/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2023-09-21T14:11:48Z", + "updated_at": "2023-10-20T20:54:51Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "We are behind a corporate firewall proxy, that decrypts and encrypts every traffic. Despite having the root certificate registered in Java, this library fails to connect to github.\r\n\r\n```\r\nCaused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target\r\n\tat java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:578)\r\n\tat java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)\r\n\tat org.kohsuke.github.extras.HttpClientGitHubConnector.send(HttpClientGitHubConnector.java:72)\r\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:431)\r\n\t... 6 more\r\nCaused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target\r\n\tat java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)\r\n\tat java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:371)\r\n\tat java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:314)\r\n\tat java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:309)\r\n\tat java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(CertificateMessage.java:1357)\r\n\tat java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(CertificateMessage.java:1232)\r\n\tat java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(CertificateMessage.java:1175)\r\n\tat java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:396)\r\n\tat java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:480)\r\n\tat java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1277)\r\n\tat java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1264)\r\n\tat java.base/java.security.AccessController.doPrivileged(AccessController.java:712)\r\n\tat java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:1209)\r\n\tat java.base/java.util.ArrayList.forEach(ArrayList.java:1511)\r\n\tat java.net.http/jdk.internal.net.http.common.SSLFlowDelegate.lambda$executeTasks$3(SSLFlowDelegate.java:1118)\r\n\tat java.net.http/jdk.internal.net.http.HttpClientImpl$DelegatingExecutor.execute(HttpClientImpl.java:157)\r\n\tat java.net.http/jdk.internal.net.http.common.SSLFlowDelegate.executeTasks(SSLFlowDelegate.java:1113)\r\n\tat java.net.http/jdk.internal.net.http.common.SSLFlowDelegate.doHandshake(SSLFlowDelegate.java:1079)\r\n\tat java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:484)\r\n\tat java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(SSLFlowDelegate.java:268)\r\n\tat java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:205)\r\n\tat java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)\r\n\tat java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:230)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\r\n\tat java.base/java.lang.Thread.run(Thread.java:833)\r\nCaused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target\r\n\tat java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439)\r\n\tat java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)\r\n\tat java.base/sun.security.validator.Validator.validate(Validator.java:264)\r\n\tat java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:285)\r\n\tat java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:144)\r\n\tat java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(CertificateMessage.java:1335)\r\n\t... 21 more\r\nCaused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target\r\n\tat java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)\r\n\tat java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)\r\n\tat java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)\r\n\tat java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434)\r\n\t... 26 more\r\n\r\n```\r\n\r\nOur current Solution is to provide a custom connector that ignores all checks, but as setConnector is deprecated it would be appreciated, if there was some option to do this e.g. disableSSLVerification.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1717/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1717/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/348", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/348/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/348/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/348/events", + "html_url": "https://github.com/hub4j/github-api/issues/348", + "id": 215463892, + "node_id": "MDU6SXNzdWUyMTU0NjM4OTI=", + "number": 348, + "title": "Skip and page selection support in PagedIterator/PagedIterable", + "user": { + "login": "JakubKahovec", + "id": 32606, + "node_id": "MDQ6VXNlcjMyNjA2", + "avatar_url": "https://avatars.githubusercontent.com/u/32606?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/JakubKahovec", + "html_url": "https://github.com/JakubKahovec", + "followers_url": "https://api.github.com/users/JakubKahovec/followers", + "following_url": "https://api.github.com/users/JakubKahovec/following{/other_user}", + "gists_url": "https://api.github.com/users/JakubKahovec/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JakubKahovec/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JakubKahovec/subscriptions", + "organizations_url": "https://api.github.com/users/JakubKahovec/orgs", + "repos_url": "https://api.github.com/users/JakubKahovec/repos", + "events_url": "https://api.github.com/users/JakubKahovec/events{/privacy}", + "received_events_url": "https://api.github.com/users/JakubKahovec/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + }, + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 11, + "created_at": "2017-03-20T15:47:54Z", + "updated_at": "2023-10-20T17:18:49Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hello,\r\n\r\nwhen listing users the GitHub Api provides a parameter _since_ which allows you to specify an id of the user you've seen the last, when you start listing again (i.e after a crash) you skip the users you've seen. It'd great to have this parameter in the api i.e github.listUsers(sinceUserId). Do you think it would be feasible to add it there ?\r\n\r\nThank you\r\n\r\nJakub", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/348/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/348/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1614", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1614/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1614/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1614/events", + "html_url": "https://github.com/hub4j/github-api/issues/1614", + "id": 1571359526, + "node_id": "I_kwDOAAlq-s5dqQsm", + "number": 1614, + "title": "Feature Request - Total Count for PagedIterable", + "user": { + "login": "bchenghi", + "id": 57175876, + "node_id": "MDQ6VXNlcjU3MTc1ODc2", + "avatar_url": "https://avatars.githubusercontent.com/u/57175876?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bchenghi", + "html_url": "https://github.com/bchenghi", + "followers_url": "https://api.github.com/users/bchenghi/followers", + "following_url": "https://api.github.com/users/bchenghi/following{/other_user}", + "gists_url": "https://api.github.com/users/bchenghi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bchenghi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bchenghi/subscriptions", + "organizations_url": "https://api.github.com/users/bchenghi/orgs", + "repos_url": "https://api.github.com/users/bchenghi/repos", + "events_url": "https://api.github.com/users/bchenghi/events{/privacy}", + "received_events_url": "https://api.github.com/users/bchenghi/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2023-02-05T09:23:12Z", + "updated_at": "2023-10-14T07:49:04Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I believe the GitHub API provides total number of pages in the response's Link header.\r\n\r\nThis could be useful, for instance, counting total number of commits in a repository. We can set page_size to 1 for listing commits on a GHRepository. Obtaining the total number of pages would tell us the total number of commits.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1614/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1614/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/988", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/988/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/988/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/988/events", + "html_url": "https://github.com/hub4j/github-api/issues/988", + "id": 753040877, + "node_id": "MDU6SXNzdWU3NTMwNDA4Nzc=", + "number": 988, + "title": "Updating branch protection details is very cumbersome", + "user": { + "login": "Vampire", + "id": 325196, + "node_id": "MDQ6VXNlcjMyNTE5Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/325196?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Vampire", + "html_url": "https://github.com/Vampire", + "followers_url": "https://api.github.com/users/Vampire/followers", + "following_url": "https://api.github.com/users/Vampire/following{/other_user}", + "gists_url": "https://api.github.com/users/Vampire/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Vampire/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Vampire/subscriptions", + "organizations_url": "https://api.github.com/users/Vampire/orgs", + "repos_url": "https://api.github.com/users/Vampire/repos", + "events_url": "https://api.github.com/users/Vampire/events{/privacy}", + "received_events_url": "https://api.github.com/users/Vampire/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2020-11-29T23:14:31Z", + "updated_at": "2023-08-14T19:39:15Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I have a project where I have various branch protections enabled like linear history, required status checks, and so on and those restrictions should also be valid for administrators usually to not have a broken state on `master`.\r\n\r\nBut when creating a release, I actually want to push one merge commit to `master` and also without having the status checks run before as this would need manual intervention.\r\n\r\nSo I thought I simply make a Gradle task that removes the \"also for administrators\" flag before the push and another task that again enables that flag that is run after the task that pushes to `master`.\r\n\r\nThe problem is, that this lib does not allow to change only one detail, but you always have to supply the full set of protection rules. When I just did `....enableProtection().includeAdmins(false).enable()`, all other properties were unset.\r\nBut I also don't want to maintain the restrictions in the code.\r\nAnd taking the protections from the current protection object, setting them on the builder is extremely cumbersome and boiler-platey and also if some attributes get added, suddenly the logic will be wrong as it will not be copied over along except if you use reflection for this, which also would not work anyway due to inconsistencies in naming (e. g. `requiredChecks` vs. `contexts`).\r\n\r\nIt would be nice if this could be enhanced, for example by having some `copy attributes from this protection instance` method, or maybe even better an additional `updateProtection()` method that has all properties set like they currently are and then allows to update only the things that should be changed.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/988/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/988/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1640", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1640/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1640/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1640/events", + "html_url": "https://github.com/hub4j/github-api/issues/1640", + "id": 1662049369, + "node_id": "I_kwDOAAlq-s5jENxZ", + "number": 1640, + "title": "Missing feature: detete an issue", + "user": { + "login": "sivantoledo", + "id": 1524989, + "node_id": "MDQ6VXNlcjE1MjQ5ODk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1524989?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sivantoledo", + "html_url": "https://github.com/sivantoledo", + "followers_url": "https://api.github.com/users/sivantoledo/followers", + "following_url": "https://api.github.com/users/sivantoledo/following{/other_user}", + "gists_url": "https://api.github.com/users/sivantoledo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sivantoledo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sivantoledo/subscriptions", + "organizations_url": "https://api.github.com/users/sivantoledo/orgs", + "repos_url": "https://api.github.com/users/sivantoledo/repos", + "events_url": "https://api.github.com/users/sivantoledo/events{/privacy}", + "received_events_url": "https://api.github.com/users/sivantoledo/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2023-04-11T08:59:01Z", + "updated_at": "2023-07-13T00:17:07Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hi, I am using the library, thank you very much! Works great.\r\n\r\nI am using it mostly to manage issues, and I need a method to completely delete an issue, not only to close it. On the GitHub web interface there is a button to delete an issue, so I assume that this is possible via the API. However, there is no method in GHIssue to delete an issue.\r\n\r\nThe CLI tool \"gh\" does allow deleting an issue, so I assume that this is possible through the API. \r\n\r\nCan you please add a delete or removeIssue to GHIssue.java?\r\n\r\nThank you very much, Sivan", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1640/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1640/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1558", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1558/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1558/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1558/events", + "html_url": "https://github.com/hub4j/github-api/issues/1558", + "id": 1428248411, + "node_id": "I_kwDOAAlq-s5VIVdb", + "number": 1558, + "title": "GHRepository.getContent does not handle properly files bigger than 1MB", + "user": { + "login": "blacelle", + "id": 2117911, + "node_id": "MDQ6VXNlcjIxMTc5MTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/2117911?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/blacelle", + "html_url": "https://github.com/blacelle", + "followers_url": "https://api.github.com/users/blacelle/followers", + "following_url": "https://api.github.com/users/blacelle/following{/other_user}", + "gists_url": "https://api.github.com/users/blacelle/gists{/gist_id}", + "starred_url": "https://api.github.com/users/blacelle/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/blacelle/subscriptions", + "organizations_url": "https://api.github.com/users/blacelle/orgs", + "repos_url": "https://api.github.com/users/blacelle/repos", + "events_url": "https://api.github.com/users/blacelle/events{/privacy}", + "received_events_url": "https://api.github.com/users/blacelle/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2022-10-29T12:44:40Z", + "updated_at": "2023-07-02T18:09:58Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nWhen considering a file with size >= 1MB, the library fails with `Unrecognized encoding: none` in org.kohsuke.github.GHContent.read()\r\n\r\n**To Reproduce**\r\nPush a file > 1MB, and try `GHRepository.getContent().read()`\r\n\r\n**Expected behavior**\r\nProperly fetching of the file content\r\n\r\n**Additional context**\r\nGitHub API has a specific behavior on large files: see https://docs.github.com/en/rest/repos/contents#size-limits.\r\n\r\n> Between 1-100 MB: Only the raw or object [custom media types](https://docs.github.com/rest/repos/contents#custom-media-types-for-repository-contents) are supported. Both will work as normal, except that when using the object media type, the content field will be an empty string and the encoding field will be \"none\". To get the contents of these larger files, use the raw media type.\r\n\r\n![image](https://user-images.githubusercontent.com/2117911/198832024-30c90bcf-cbb4-4e8a-bf72-77cf9c229f71.png)\r\n\r\nI suppose we would have in such a edge-case to rely on `Accept: application/vnd.github.v3.raw` header.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1558/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1558/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1657", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1657/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1657/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1657/events", + "html_url": "https://github.com/hub4j/github-api/issues/1657", + "id": 1708788874, + "node_id": "I_kwDOAAlq-s5l2gyK", + "number": 1657, + "title": "createCommitStatus method return status success but the update is not happening in GITHUB ", + "user": { + "login": "bostsnow", + "id": 54145796, + "node_id": "MDQ6VXNlcjU0MTQ1Nzk2", + "avatar_url": "https://avatars.githubusercontent.com/u/54145796?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bostsnow", + "html_url": "https://github.com/bostsnow", + "followers_url": "https://api.github.com/users/bostsnow/followers", + "following_url": "https://api.github.com/users/bostsnow/following{/other_user}", + "gists_url": "https://api.github.com/users/bostsnow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bostsnow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bostsnow/subscriptions", + "organizations_url": "https://api.github.com/users/bostsnow/orgs", + "repos_url": "https://api.github.com/users/bostsnow/repos", + "events_url": "https://api.github.com/users/bostsnow/events{/privacy}", + "received_events_url": "https://api.github.com/users/bostsnow/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2023-05-14T01:50:36Z", + "updated_at": "2023-06-30T19:58:42Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Description**\r\nWe are using the version 1.307 and we call the createCommitStatus like below. \r\n\r\n```\r\nGHRepository repository = gitHub.getRepository(\r\n SLASH_JOINER.join(request.getOrg(), request.getRepo())\r\n );\r\n\r\nString headSha = repository\r\n .getPullRequest(request.getPullNumber())\r\n .getHead()\r\n .getSha();\r\n\r\nGHCommitStatus commitStatus = repository.createCommitStatus(\r\n headSha,\r\n GHCommitState.SUCCESS,\r\n someUrl,\r\n someDescription,\r\n context()\r\n );\r\n```\r\n\r\nThe response commitStatus status is '**SUCCESS**' but Github is still not updated.\r\nWhat really can go wrong here ? \r\n\r\n**Note**: Its not consistent, out of 10 call, 1 update is not happening.\r\n\r\n**Additional Detail**\r\nOn each commit we re-evaluate the logic and call the createCommitStatus. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1657/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1657/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1656", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1656/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1656/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1656/events", + "html_url": "https://github.com/hub4j/github-api/issues/1656", + "id": 1699052410, + "node_id": "I_kwDOAAlq-s5lRXt6", + "number": 1656, + "title": "Reattaching an entity to another client instance", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2023-05-07T12:53:01Z", + "updated_at": "2023-05-22T16:30:17Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hi,\r\n\r\nI've got a situation like this:\r\n\r\n1. My app does listen to incoming webhooks, I parse the payload with an instance of a client authenticated **as an app** with a JWT token.\r\n2. After that, once I realize which type of payload I have I fetch some info, like an issue from the payload and I have to do additional things which require **app installation** authentication.\r\n\r\nWith this approach I get stuck with an instance of `GHIssue` fetch via and tied to a client instance authenticated as an app, but in order to do other things I have to reauthenticate as an app installation. I couldn't find a way to do this. A dirty approach would be changing `root` of the issue instance's `GitHubInteractiveObject`, but the field is r/o. \r\nIs there a way to do this now, am I missing something?\r\nif not, mind any suggestions? I'd suggest implementing a method to \"rebind\" an entity (`GitHubInteractiveObject`) to another provided instance of a github client. Any possible issues with that approach?\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1656/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1656/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/126", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/126/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/126/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/126/events", + "html_url": "https://github.com/hub4j/github-api/issues/126", + "id": 42053515, + "node_id": "MDU6SXNzdWU0MjA1MzUxNQ==", + "number": 126, + "title": "github-api does in not correctly distinguish between user and organisation ownership", + "user": { + "login": "msperisen", + "id": 2448228, + "node_id": "MDQ6VXNlcjI0NDgyMjg=", + "avatar_url": "https://avatars.githubusercontent.com/u/2448228?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/msperisen", + "html_url": "https://github.com/msperisen", + "followers_url": "https://api.github.com/users/msperisen/followers", + "following_url": "https://api.github.com/users/msperisen/following{/other_user}", + "gists_url": "https://api.github.com/users/msperisen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/msperisen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/msperisen/subscriptions", + "organizations_url": "https://api.github.com/users/msperisen/orgs", + "repos_url": "https://api.github.com/users/msperisen/repos", + "events_url": "https://api.github.com/users/msperisen/events{/privacy}", + "received_events_url": "https://api.github.com/users/msperisen/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2014-09-05T14:45:51Z", + "updated_at": "2023-05-05T13:48:03Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "owners are always returned as GHUsers instead of GHOrganizations or GHUsers. Many github api calls return users and organisations alike and the distinction is made based on the type field. Making GHPerson reflect that:\n\n``` java\n@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,\n include=JsonTypeInfo.As.PROPERTY,\n property=\"type\")\n@JsonSubTypes({\n @JsonSubTypes.Type(value=GHUser.class, name=\"User\"),\n @JsonSubTypes.Type(value=GHOrganization.class, name=\"Organization\"),\n})\npublic abstract class GHPerson {\n```\n\nwill break a lot of owner related githup-api calls \n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/126/reactions", + "total_count": 2, + "+1": 2, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/126/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1645", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1645/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1645/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1645/events", + "html_url": "https://github.com/hub4j/github-api/issues/1645", + "id": 1679337516, + "node_id": "I_kwDOAAlq-s5kGKgs", + "number": 1645, + "title": "Allow creation of comments using line number, rather than position", + "user": { + "login": "alexec", + "id": 1142830, + "node_id": "MDQ6VXNlcjExNDI4MzA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1142830?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/alexec", + "html_url": "https://github.com/alexec", + "followers_url": "https://api.github.com/users/alexec/followers", + "following_url": "https://api.github.com/users/alexec/following{/other_user}", + "gists_url": "https://api.github.com/users/alexec/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alexec/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alexec/subscriptions", + "organizations_url": "https://api.github.com/users/alexec/orgs", + "repos_url": "https://api.github.com/users/alexec/repos", + "events_url": "https://api.github.com/users/alexec/events{/privacy}", + "received_events_url": "https://api.github.com/users/alexec/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2023-04-22T05:02:43Z", + "updated_at": "2023-04-30T10:00:43Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "#1463 allowed you to list PR review comments with `line`. It did not allow you to create a comment using `line`. This is much easier than using position as it avoids a complex calculation.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1645/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1645/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1615", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1615/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1615/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1615/events", + "html_url": "https://github.com/hub4j/github-api/issues/1615", + "id": 1591180009, + "node_id": "I_kwDOAAlq-s5e13rp", + "number": 1615, + "title": "Feature Request: List Organization app installations", + "user": { + "login": "Har-sha-256", + "id": 56919509, + "node_id": "MDQ6VXNlcjU2OTE5NTA5", + "avatar_url": "https://avatars.githubusercontent.com/u/56919509?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Har-sha-256", + "html_url": "https://github.com/Har-sha-256", + "followers_url": "https://api.github.com/users/Har-sha-256/followers", + "following_url": "https://api.github.com/users/Har-sha-256/following{/other_user}", + "gists_url": "https://api.github.com/users/Har-sha-256/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Har-sha-256/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Har-sha-256/subscriptions", + "organizations_url": "https://api.github.com/users/Har-sha-256/orgs", + "repos_url": "https://api.github.com/users/Har-sha-256/repos", + "events_url": "https://api.github.com/users/Har-sha-256/events{/privacy}", + "received_events_url": "https://api.github.com/users/Har-sha-256/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2023-02-20T05:40:39Z", + "updated_at": "2023-04-27T01:14:38Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Feature Request: GET /orgs/{org}/installations\r\n\r\nhttps://docs.github.com/en/rest/orgs/orgs?apiVersion=2022-11-28#list-app-installations-for-an-organization\r\n\r\nRequesting this api for an Organization object", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1615/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1615/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1646", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1646/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1646/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1646/events", + "html_url": "https://github.com/hub4j/github-api/issues/1646", + "id": 1680231459, + "node_id": "I_kwDOAAlq-s5kJkwj", + "number": 1646, + "title": "Enhancement: ParseEventPayload: Parse the event type automatically", + "user": { + "login": "Haarolean", + "id": 1494347, + "node_id": "MDQ6VXNlcjE0OTQzNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1494347?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Haarolean", + "html_url": "https://github.com/Haarolean", + "followers_url": "https://api.github.com/users/Haarolean/followers", + "following_url": "https://api.github.com/users/Haarolean/following{/other_user}", + "gists_url": "https://api.github.com/users/Haarolean/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Haarolean/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Haarolean/subscriptions", + "organizations_url": "https://api.github.com/users/Haarolean/orgs", + "repos_url": "https://api.github.com/users/Haarolean/repos", + "events_url": "https://api.github.com/users/Haarolean/events{/privacy}", + "received_events_url": "https://api.github.com/users/Haarolean/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2023-04-24T00:06:56Z", + "updated_at": "2023-04-27T01:13:19Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hi, I noticed the following documentation on `GitHub#parseEventPayload`:\r\n\r\n```\r\n[...] Unfortunately, hook script payloads aren't self-descriptive, so you need to know the type of payload you are expecting.\r\n```\r\n\r\nAs far as I see, the event type is present within `x-github-event` header of the incoming hook request. \r\n\r\nAs stated [here](https://docs.github.com/webhooks-and-events/webhooks/webhook-events-and-payloads#installation):\r\n\"image\"\r\n\r\nI've checked the request and the event name does really match the ones available on the aforementioned page. \r\n\r\nCould we match the event type strings to `GHEventPayload` implementations so we don't have to provide the type?\r\n\r\nP.S. Thanks for the great library! ❤️\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1646/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1646/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/837", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/837/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/837/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/837/events", + "html_url": "https://github.com/hub4j/github-api/issues/837", + "id": 631036684, + "node_id": "MDU6SXNzdWU2MzEwMzY2ODQ=", + "number": 837, + "title": "API should expose ability to create and delete impersonation OAuth token", + "user": { + "login": "bmuschko", + "id": 440872, + "node_id": "MDQ6VXNlcjQ0MDg3Mg==", + "avatar_url": "https://avatars.githubusercontent.com/u/440872?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bmuschko", + "html_url": "https://github.com/bmuschko", + "followers_url": "https://api.github.com/users/bmuschko/followers", + "following_url": "https://api.github.com/users/bmuschko/following{/other_user}", + "gists_url": "https://api.github.com/users/bmuschko/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bmuschko/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bmuschko/subscriptions", + "organizations_url": "https://api.github.com/users/bmuschko/orgs", + "repos_url": "https://api.github.com/users/bmuschko/repos", + "events_url": "https://api.github.com/users/bmuschko/events{/privacy}", + "received_events_url": "https://api.github.com/users/bmuschko/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2020-06-04T18:00:57Z", + "updated_at": "2023-04-15T22:49:23Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Currently, this library does not expose methods for the API that can [Create an impersonation OAuth token](https://developer.github.com/enterprise/2.20/v3/enterprise-admin/users/#create-an-impersonation-oauth-token) or [Delete an impersonation OAuth token](https://developer.github.com/enterprise/2.20/v3/enterprise-admin/users/#delete-an-impersonation-oauth-token).", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/837/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/837/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1631", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1631/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1631/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1631/events", + "html_url": "https://github.com/hub4j/github-api/issues/1631", + "id": 1632667135, + "node_id": "I_kwDOAAlq-s5hUIX_", + "number": 1631, + "title": "Add support for GitHub REST API versioning", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2023-03-20T18:38:35Z", + "updated_at": "2023-03-20T18:39:05Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "GitHub REST API is now versioned. https://docs.github.com/en/rest/overview/api-versions?apiVersion=2022-11-28\r\n\r\nI've already filed another issue around supporting different versions of GitHub Server. This is related. \r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1631/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1631/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1598", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1598/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1598/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1598/events", + "html_url": "https://github.com/hub4j/github-api/issues/1598", + "id": 1527710615, + "node_id": "I_kwDOAAlq-s5bDwOX", + "number": 1598, + "title": "GHInvitation getId always returns 0", + "user": { + "login": "noah-lawrence", + "id": 35925330, + "node_id": "MDQ6VXNlcjM1OTI1MzMw", + "avatar_url": "https://avatars.githubusercontent.com/u/35925330?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/noah-lawrence", + "html_url": "https://github.com/noah-lawrence", + "followers_url": "https://api.github.com/users/noah-lawrence/followers", + "following_url": "https://api.github.com/users/noah-lawrence/following{/other_user}", + "gists_url": "https://api.github.com/users/noah-lawrence/gists{/gist_id}", + "starred_url": "https://api.github.com/users/noah-lawrence/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/noah-lawrence/subscriptions", + "organizations_url": "https://api.github.com/users/noah-lawrence/orgs", + "repos_url": "https://api.github.com/users/noah-lawrence/repos", + "events_url": "https://api.github.com/users/noah-lawrence/events{/privacy}", + "received_events_url": "https://api.github.com/users/noah-lawrence/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2023-01-10T16:49:56Z", + "updated_at": "2023-01-31T20:32:33Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nGHInvitation getId returns 'id' from GHObject, which defaults to 0. However, the correct invitation id is available in the private 'id' field on GHInvitation.\r\n\r\n**To Reproduce**\r\n1. Create a GitHub repository\r\n2. Add a collaborator (an invitation will be sent)\r\n3. Run below code: \r\n```java\r\nghRepository.listInvitations().forEach(invitation -> System.out.println(invitation.getId()));\r\n```\r\n4. 0 is printed for each invitation, rather than the invitation id.\r\n\r\n**Expected behavior**\r\nThe correct invitation id is printed, instead of 0.\r\n\r\n**Additional context**\r\nI would like to be able to delete a GitHub invitation as an account owner of a repository.\r\nGitHub's API has [this](https://docs.github.com/en/rest/collaborators/invitations?apiVersion=2022-11-28#delete-a-repository-invitation) endpoint to delete an invitation manually, but the invitation id is required.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1598/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1598/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1580", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1580/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1580/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1580/events", + "html_url": "https://github.com/hub4j/github-api/issues/1580", + "id": 1501841928, + "node_id": "I_kwDOAAlq-s5ZhEoI", + "number": 1580, + "title": "URISyntaxException when I search in repository", + "user": { + "login": "turbanoff", + "id": 741251, + "node_id": "MDQ6VXNlcjc0MTI1MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/741251?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/turbanoff", + "html_url": "https://github.com/turbanoff", + "followers_url": "https://api.github.com/users/turbanoff/followers", + "following_url": "https://api.github.com/users/turbanoff/following{/other_user}", + "gists_url": "https://api.github.com/users/turbanoff/gists{/gist_id}", + "starred_url": "https://api.github.com/users/turbanoff/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/turbanoff/subscriptions", + "organizations_url": "https://api.github.com/users/turbanoff/orgs", + "repos_url": "https://api.github.com/users/turbanoff/repos", + "events_url": "https://api.github.com/users/turbanoff/events{/privacy}", + "received_events_url": "https://api.github.com/users/turbanoff/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2022-12-18T09:57:57Z", + "updated_at": "2023-01-25T17:52:55Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nI noticed that search in repositories is unreliable sometimes and could fail with `URISyntaxException`.\r\nExample:\r\n```\r\nException in thread \"main\" org.kohsuke.github.HttpException: Server returned HTTP response code: -1, message: 'null' for URL: https://api.github.com/repositories/376556942/contents/tasks/]?ref=bbdc0107c309ee7c340b99d537b0db460e30bdf4\r\n\tat org.kohsuke.github.GitHubClient.interpretApiError(GitHubClient.java:596)\r\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:449)\r\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:403)\r\n\tat org.kohsuke.github.Requester.fetchInto(Requester.java:102)\r\n\tat org.kohsuke.github.GHContent.refresh(GHContent.java:423)\r\n\tat org.kohsuke.github.Refreshable.refresh(Refreshable.java:30)\r\n\tat org.kohsuke.github.GHContent.read(GHContent.java:188)\r\n\tat org.christmas.token.GithubApi.main(GithubApi.java:21)\r\nCaused by: java.io.IOException: Invalid URL\r\n\tat org.kohsuke.github.extras.HttpClientGitHubConnector.send(HttpClientGitHubConnector.java:53)\r\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:432)\r\n\t... 6 more\r\nCaused by: java.net.URISyntaxException: Illegal character in path at index 61: https://api.github.com/repositories/376556942/contents/tasks/]?ref=bbdc0107c309ee7c340b99d537b0db460e30bdf4\r\n\tat java.base/java.net.URI$Parser.fail(URI.java:2974)\r\n\tat java.base/java.net.URI$Parser.checkChars(URI.java:3145)\r\n\tat java.base/java.net.URI$Parser.parseHierarchical(URI.java:3227)\r\n\tat java.base/java.net.URI$Parser.parse(URI.java:3175)\r\n\tat java.base/java.net.URI.(URI.java:623)\r\n\tat java.base/java.net.URL.toURI(URL.java:1056)\r\n\tat org.kohsuke.github.extras.HttpClientGitHubConnector.send(HttpClientGitHubConnector.java:51)\r\n\t... 7 more\r\n```\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\nRun following program:\r\n```\r\n public static void main(String[] args) throws Exception {\r\n GitHub gitHub = GitHub.connectUsingOAuth(GITHUB_TOKEN);\r\n PagedSearchIterable iterable = gitHub.searchContent()\r\n .q(\"print\")\r\n .repo(\"worlddeleteRin/vkproj\")\r\n .list();\r\n for (GHContent content : iterable) {\r\n try (InputStream read = content.read()) {\r\n ByteArrayOutputStream baos = new ByteArrayOutputStream();\r\n read.transferTo(baos);\r\n System.out.println(baos.toString(StandardCharsets.UTF_8));\r\n }\r\n }\r\n }\r\n```\r\nand check errors in the output\r\n\r\n**Expected behavior**\r\nLibrary could handle unexpected symbols in URLs better. Escape them?\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1580/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1580/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1582", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1582/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1582/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1582/events", + "html_url": "https://github.com/hub4j/github-api/issues/1582", + "id": 1503158949, + "node_id": "I_kwDOAAlq-s5ZmGKl", + "number": 1582, + "title": "Enhancement: support GitHub API to `rerun-failed-jobs`", + "user": { + "login": "ahus1", + "id": 3957921, + "node_id": "MDQ6VXNlcjM5NTc5MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/3957921?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ahus1", + "html_url": "https://github.com/ahus1", + "followers_url": "https://api.github.com/users/ahus1/followers", + "following_url": "https://api.github.com/users/ahus1/following{/other_user}", + "gists_url": "https://api.github.com/users/ahus1/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ahus1/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ahus1/subscriptions", + "organizations_url": "https://api.github.com/users/ahus1/orgs", + "repos_url": "https://api.github.com/users/ahus1/repos", + "events_url": "https://api.github.com/users/ahus1/events{/privacy}", + "received_events_url": "https://api.github.com/users/ahus1/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2022-12-19T15:35:48Z", + "updated_at": "2023-01-25T17:51:11Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "When looking at `GHWorkflowRun`, there is the method `rerun()` but no method to rerun only failed tests. \r\n\r\nIt's documented in the API here: https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#re-run-failed-jobs-from-a-workflow-run\r\n\r\nThis has been added to the octokit client in June 15, see https://github.com/octokit/plugin-rest-endpoint-methods.js/releases/tag/v5.14.0\r\n\r\nIt would be great to have this in the Java API as well. \r\n\r\nThanks!", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1582/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1582/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/452", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/452/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/452/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/452/events", + "html_url": "https://github.com/hub4j/github-api/issues/452", + "id": 354016699, + "node_id": "MDU6SXNzdWUzNTQwMTY2OTk=", + "number": 452, + "title": "Support for attachments on Issues (Add, Get, and Remove)", + "user": { + "login": "GaborCsikos", + "id": 5442111, + "node_id": "MDQ6VXNlcjU0NDIxMTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/5442111?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/GaborCsikos", + "html_url": "https://github.com/GaborCsikos", + "followers_url": "https://api.github.com/users/GaborCsikos/followers", + "following_url": "https://api.github.com/users/GaborCsikos/following{/other_user}", + "gists_url": "https://api.github.com/users/GaborCsikos/gists{/gist_id}", + "starred_url": "https://api.github.com/users/GaborCsikos/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/GaborCsikos/subscriptions", + "organizations_url": "https://api.github.com/users/GaborCsikos/orgs", + "repos_url": "https://api.github.com/users/GaborCsikos/repos", + "events_url": "https://api.github.com/users/GaborCsikos/events{/privacy}", + "received_events_url": "https://api.github.com/users/GaborCsikos/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1686290078, + "node_id": "MDU6TGFiZWwxNjg2MjkwMDc4", + "url": "https://api.github.com/repos/hub4j/github-api/labels/external", + "name": "external", + "color": "a0a0a0", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2018-08-25T14:28:54Z", + "updated_at": "2023-01-02T21:30:41Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I want to download attachments added to Github issue.\r\nUsually an attachment is added to in Issue into the body of the comment.\r\n\r\nMy problem is the GHIssueComment has a body as a String. So i can not get the attachments.\r\n\r\nI could see that the GHRepository has a method getBlob(String blobSha)\r\nBut I do not know that this is what i need, also i do not know the blobSha.\r\n\r\nHow could I get the attachments uploaded to issues?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/452/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/452/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1549", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1549/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1549/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1549/events", + "html_url": "https://github.com/hub4j/github-api/issues/1549", + "id": 1414681945, + "node_id": "I_kwDOAAlq-s5UUlVZ", + "number": 1549, + "title": "Feature Request: Get template repo details from created repository", + "user": { + "login": "AmyShields-EN0085", + "id": 82226842, + "node_id": "MDQ6VXNlcjgyMjI2ODQy", + "avatar_url": "https://avatars.githubusercontent.com/u/82226842?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/AmyShields-EN0085", + "html_url": "https://github.com/AmyShields-EN0085", + "followers_url": "https://api.github.com/users/AmyShields-EN0085/followers", + "following_url": "https://api.github.com/users/AmyShields-EN0085/following{/other_user}", + "gists_url": "https://api.github.com/users/AmyShields-EN0085/gists{/gist_id}", + "starred_url": "https://api.github.com/users/AmyShields-EN0085/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/AmyShields-EN0085/subscriptions", + "organizations_url": "https://api.github.com/users/AmyShields-EN0085/orgs", + "repos_url": "https://api.github.com/users/AmyShields-EN0085/repos", + "events_url": "https://api.github.com/users/AmyShields-EN0085/events{/privacy}", + "received_events_url": "https://api.github.com/users/AmyShields-EN0085/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2022-10-19T10:06:04Z", + "updated_at": "2022-12-14T14:04:23Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "It would be great to be able to get the template repository details from a created repo - so you could know what repository the created repo is based off.\r\n\r\nThis information is available through the rest API. \r\n\r\nExample on a simple GET request to https://api.github.com/repos/org/reponame - I would love to expose the template_repository json object\r\n```\r\n{\r\n \"id\":xxxx,\r\n \"node_id\": \"R_kgDOIQCw0A\",\r\n \"name\": \"test-generic-repo\",\r\n \"full_name\": \"orgt/test-generic-repo\",\r\n \"private\": true,\r\n \"**template_repository**\": {\r\n \"id\": 470521023,\r\n \"node_id\": \"R_kgDOHAuUvw\",\r\n \"name\": \"my-template\",\r\n \"full_name\": \"org/my-template\",\r\n \"private\": true,\r\n \"owner\": {\r\n \"login\": \"org\",\r\n \"id\": 69310803,\r\n \"avatar_url\": \"https://avatars.githubusercontent.com/u/69310803?v=4\",\r\n \"gravatar_id\": \"\",\r\n \"url\": \"https://api.github.com/users/org\",\r\n \"html_url\": \"https://github.com/org\",\r\n \"followers_url\": \"https://api.github.com/users/org/followers\",\r\n \"following_url\": \"https://api.github.com/users/org/following{/other_user}\",\r\n \"gists_url\": \"https://api.github.com/users/org/gists{/gist_id}\",\r\n \"starred_url\": \"https://api.github.com/users/org/starred{/owner}{/repo}\",\r\n \"subscriptions_url\": \"https://api.github.com/users/orgt/subscriptions\",\r\n \"organizations_url\": \"https://api.github.com/users/org/orgs\",\r\n \"repos_url\": \"https://api.github.com/users/org/repos\",\r\n \"events_url\": \"https://api.github.com/users/org/events{/privacy}\",\r\n \"received_events_url\": \"https://api.github.com/users/org/received_events\",\r\n \"type\": \"Organization\",\r\n \"site_admin\": false\r\n }\r\n \"network_count\": 0,\r\n \"subscribers_count\": 0\r\n}\r\n```", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1549/reactions", + "total_count": 2, + "+1": 2, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1549/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1569", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1569/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1569/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1569/events", + "html_url": "https://github.com/hub4j/github-api/issues/1569", + "id": 1457757937, + "node_id": "I_kwDOAAlq-s5W457x", + "number": 1569, + "title": "GHHooks does not get all the hooks with pagination", + "user": { + "login": "sundergopalsingh", + "id": 8762655, + "node_id": "MDQ6VXNlcjg3NjI2NTU=", + "avatar_url": "https://avatars.githubusercontent.com/u/8762655?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sundergopalsingh", + "html_url": "https://github.com/sundergopalsingh", + "followers_url": "https://api.github.com/users/sundergopalsingh/followers", + "following_url": "https://api.github.com/users/sundergopalsingh/following{/other_user}", + "gists_url": "https://api.github.com/users/sundergopalsingh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sundergopalsingh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sundergopalsingh/subscriptions", + "organizations_url": "https://api.github.com/users/sundergopalsingh/orgs", + "repos_url": "https://api.github.com/users/sundergopalsingh/repos", + "events_url": "https://api.github.com/users/sundergopalsingh/events{/privacy}", + "received_events_url": "https://api.github.com/users/sundergopalsingh/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2022-11-21T11:14:16Z", + "updated_at": "2022-11-21T23:29:53Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**getHooks() does not get all the hooks and only gets the first page of the response**\r\nGHHooks getHooks() method does not get all the hooks when called and only retrieves the first page from the github call.\r\n\r\nhttps://github.com/hub4j/github-api/blob/github-api-1.115/src/main/java/org/kohsuke/github/GHHooks.java#L29\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behaviour:\r\n1. Create a repository with more than 30 webhooks , say 100\r\n2. Using Github api plugin call the getHooks() method on the above repository and you would realise that only first 30 hooks are being fetched.\r\n\r\n**Expected behavior**\r\ngetHooks() should return all the hooks available even if it has multiple pages or provide an option to paginate through the response.\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: Linux\r\n - Version 1.115\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1569/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1569/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1491", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1491/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1491/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1491/events", + "html_url": "https://github.com/hub4j/github-api/issues/1491", + "id": 1318769079, + "node_id": "I_kwDOAAlq-s5OmtG3", + "number": 1491, + "title": "Add `state_reason` for `GHIssue`", + "user": { + "login": "piotrooo", + "id": 2005054, + "node_id": "MDQ6VXNlcjIwMDUwNTQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/2005054?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/piotrooo", + "html_url": "https://github.com/piotrooo", + "followers_url": "https://api.github.com/users/piotrooo/followers", + "following_url": "https://api.github.com/users/piotrooo/following{/other_user}", + "gists_url": "https://api.github.com/users/piotrooo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/piotrooo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/piotrooo/subscriptions", + "organizations_url": "https://api.github.com/users/piotrooo/orgs", + "repos_url": "https://api.github.com/users/piotrooo/repos", + "events_url": "https://api.github.com/users/piotrooo/events{/privacy}", + "received_events_url": "https://api.github.com/users/piotrooo/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2022-07-26T21:25:47Z", + "updated_at": "2022-11-12T01:19:20Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "There is missing property `state_reason`, should be added with appropriate enum.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1491/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1491/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1545", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1545/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1545/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1545/events", + "html_url": "https://github.com/hub4j/github-api/issues/1545", + "id": 1407753565, + "node_id": "I_kwDOAAlq-s5T6J1d", + "number": 1545, + "title": "ghRepositoryStatistics.getCodeFrequency() always report a null pointer error", + "user": { + "login": "JasonWu0506", + "id": 104332592, + "node_id": "U_kgDOBjf9MA", + "avatar_url": "https://avatars.githubusercontent.com/u/104332592?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/JasonWu0506", + "html_url": "https://github.com/JasonWu0506", + "followers_url": "https://api.github.com/users/JasonWu0506/followers", + "following_url": "https://api.github.com/users/JasonWu0506/following{/other_user}", + "gists_url": "https://api.github.com/users/JasonWu0506/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JasonWu0506/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JasonWu0506/subscriptions", + "organizations_url": "https://api.github.com/users/JasonWu0506/orgs", + "repos_url": "https://api.github.com/users/JasonWu0506/repos", + "events_url": "https://api.github.com/users/JasonWu0506/events{/privacy}", + "received_events_url": "https://api.github.com/users/JasonWu0506/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2022-10-13T12:55:24Z", + "updated_at": "2022-10-21T18:54:30Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nA clear and concise description of what the bug is.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Go to '...'\r\n2. Click on '....'\r\n3. Scroll down to '....'\r\n4. See error\r\n```\r\n GitHub github = new GitHubBuilder().withOAuthToken(strOAuthToken).build();\r\n ghRepository = github.getUser(strOrg).getRepository(strRepo);\r\n \r\n \r\n GHRepositoryStatistics ghRepositoryStatistics = ghRepository.getStatistics();\r\n List codeFrequencies = ghRepositoryStatistics.getCodeFrequency();\r\n```\r\n\r\nResult:\r\n```\r\nException in thread \"main\" java.lang.NullPointerException\r\n\tat java.base/java.util.Objects.requireNonNull(Objects.java:208)\r\n\tat java.base/java.util.Arrays$ArrayList.(Arrays.java:4137)\r\n\tat java.base/java.util.Arrays.asList(Arrays.java:4122)\r\n\tat org.kohsuke.github.GHRepositoryStatistics.getCodeFrequency(GHRepositoryStatistics.java:319)\r\n```\r\n\r\n \r\n org.kohsuke \r\n github-api \r\n 1.313 \r\n \r\n\r\n**Expected behavior**\r\nA clear and concise description of what you expected to happen.\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: [e.g. iOS]\r\n - Browser [e.g. chrome, safari]\r\n - Version [e.g. 22]\r\n\r\n**Additional context**\r\nAdd any other context about the problem here.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1545/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1545/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + } + ] +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/6-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/6-search_issues.json new file mode 100644 index 0000000000..4011efaf38 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/6-search_issues.json @@ -0,0 +1,2709 @@ +{ + "total_count": 164, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1547", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1547/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1547/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1547/events", + "html_url": "https://github.com/hub4j/github-api/issues/1547", + "id": 1411783746, + "node_id": "I_kwDOAAlq-s5UJhxC", + "number": 1547, + "title": "Feature Request: expose shallow event data", + "user": { + "login": "devinrsmith", + "id": 6764691, + "node_id": "MDQ6VXNlcjY3NjQ2OTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6764691?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/devinrsmith", + "html_url": "https://github.com/devinrsmith", + "followers_url": "https://api.github.com/users/devinrsmith/followers", + "following_url": "https://api.github.com/users/devinrsmith/following{/other_user}", + "gists_url": "https://api.github.com/users/devinrsmith/gists{/gist_id}", + "starred_url": "https://api.github.com/users/devinrsmith/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/devinrsmith/subscriptions", + "organizations_url": "https://api.github.com/users/devinrsmith/orgs", + "repos_url": "https://api.github.com/users/devinrsmith/repos", + "events_url": "https://api.github.com/users/devinrsmith/events{/privacy}", + "received_events_url": "https://api.github.com/users/devinrsmith/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "devinrsmith", + "id": 6764691, + "node_id": "MDQ6VXNlcjY3NjQ2OTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6764691?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/devinrsmith", + "html_url": "https://github.com/devinrsmith", + "followers_url": "https://api.github.com/users/devinrsmith/followers", + "following_url": "https://api.github.com/users/devinrsmith/following{/other_user}", + "gists_url": "https://api.github.com/users/devinrsmith/gists{/gist_id}", + "starred_url": "https://api.github.com/users/devinrsmith/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/devinrsmith/subscriptions", + "organizations_url": "https://api.github.com/users/devinrsmith/orgs", + "repos_url": "https://api.github.com/users/devinrsmith/repos", + "events_url": "https://api.github.com/users/devinrsmith/events{/privacy}", + "received_events_url": "https://api.github.com/users/devinrsmith/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "assignees": [ + { + "login": "devinrsmith", + "id": 6764691, + "node_id": "MDQ6VXNlcjY3NjQ2OTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6764691?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/devinrsmith", + "html_url": "https://github.com/devinrsmith", + "followers_url": "https://api.github.com/users/devinrsmith/followers", + "following_url": "https://api.github.com/users/devinrsmith/following{/other_user}", + "gists_url": "https://api.github.com/users/devinrsmith/gists{/gist_id}", + "starred_url": "https://api.github.com/users/devinrsmith/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/devinrsmith/subscriptions", + "organizations_url": "https://api.github.com/users/devinrsmith/orgs", + "repos_url": "https://api.github.com/users/devinrsmith/repos", + "events_url": "https://api.github.com/users/devinrsmith/events{/privacy}", + "received_events_url": "https://api.github.com/users/devinrsmith/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + } + ], + "milestone": null, + "comments": 1, + "created_at": "2022-10-17T15:26:34Z", + "updated_at": "2022-10-21T18:54:05Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "First time user at `github-api`...\r\n\r\nI'm interested in consuming the GH event API for organizations. I see that `org.kohsuke.github.GHOrganization#listEvents` returns `org.kohsuke.github.GHEventInfo`s.\r\n\r\nOf particular importance for my use case is minimizing API requests. I see some fields in `GHEventInfo` that are commented as \"shallow\"; I'm assuming this means they have been partially filled in via the GH event response? Is there any reason these shallow objects can't / shouldn't be exposed to the end user?\r\n\r\nI'm hoping all of the commons properties listed https://docs.github.com/en/developers/webhooks-and-events/events/github-event-types#event-object-common-properties can be accessible without additional API calls. It looks like the field `public` can be added as well?\r\n\r\nHappy to follow up with a PR if this sounds appropriate. Thanks!", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1547/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1547/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1520", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1520/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1520/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1520/events", + "html_url": "https://github.com/hub4j/github-api/issues/1520", + "id": 1361648807, + "node_id": "I_kwDOAAlq-s5RKRyn", + "number": 1520, + "title": "List check runs in a check suite", + "user": { + "login": "lppedd", + "id": 19871649, + "node_id": "MDQ6VXNlcjE5ODcxNjQ5", + "avatar_url": "https://avatars.githubusercontent.com/u/19871649?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/lppedd", + "html_url": "https://github.com/lppedd", + "followers_url": "https://api.github.com/users/lppedd/followers", + "following_url": "https://api.github.com/users/lppedd/following{/other_user}", + "gists_url": "https://api.github.com/users/lppedd/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lppedd/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lppedd/subscriptions", + "organizations_url": "https://api.github.com/users/lppedd/orgs", + "repos_url": "https://api.github.com/users/lppedd/repos", + "events_url": "https://api.github.com/users/lppedd/events{/privacy}", + "received_events_url": "https://api.github.com/users/lppedd/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2022-09-05T09:22:00Z", + "updated_at": "2022-10-21T18:23:54Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "As of now it doesn't seem possible to list check runs under a specific suite.\r\nThis is particularly useful when a user request an entire suite to be re-run.\r\nSee https://docs.github.com/en/rest/checks/runs#list-check-runs-in-a-check-suite\r\n\r\nIs there some workaround?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1520/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1520/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1543", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1543/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1543/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1543/events", + "html_url": "https://github.com/hub4j/github-api/issues/1543", + "id": 1400158233, + "node_id": "I_kwDOAAlq-s5TdLgZ", + "number": 1543, + "title": "Should support `parent` team objects", + "user": { + "login": "Callek", + "id": 1415602, + "node_id": "MDQ6VXNlcjE0MTU2MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1415602?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Callek", + "html_url": "https://github.com/Callek", + "followers_url": "https://api.github.com/users/Callek/followers", + "following_url": "https://api.github.com/users/Callek/following{/other_user}", + "gists_url": "https://api.github.com/users/Callek/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Callek/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Callek/subscriptions", + "organizations_url": "https://api.github.com/users/Callek/orgs", + "repos_url": "https://api.github.com/users/Callek/repos", + "events_url": "https://api.github.com/users/Callek/events{/privacy}", + "received_events_url": "https://api.github.com/users/Callek/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2022-10-06T18:54:09Z", + "updated_at": "2022-10-21T18:20:12Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "In `GHTeam` objects, there should be support exposing the result of the `parent` return from `/user/teams` .\r\n\r\nIdeally this would be another `GHTeam` object, and bonus points if `getMyTeams()` [1] supports fetching all parents as well (possibly with an arg for consumers to request that functionality).\r\n\r\nA clear and concise description of what the bug is.\r\n\r\n**Expected behavior**\r\nA clear and concise description of what you expected to happen.\r\n\r\n`.getMyTeams()` returns an `GHTeam` objects with references to their parent team.\r\nBonus: `.getMyTeams(True)` (or some such) gets not only my *direct* teams, but any parent teams I'm a part of.\r\n\r\n[1] - https://github.com/hub4j/github-api/blob/4bba9680706785d6385ed69243f41a5f36757463/src/main/java/org/kohsuke/github/GitHub.java#L870\r\n\r\n** Extra Context **\r\nThe lack of `parent` being exposed makes https://issues.jenkins.io/browse/JENKINS-63051 harder to solve.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1543/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1543/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1540", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1540/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1540/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1540/events", + "html_url": "https://github.com/hub4j/github-api/issues/1540", + "id": 1395378016, + "node_id": "I_kwDOAAlq-s5TK8dg", + "number": 1540, + "title": "Issue with GHRepositoryStatistics.getContibutorStats(true)", + "user": { + "login": "goldbal330", + "id": 62764301, + "node_id": "MDQ6VXNlcjYyNzY0MzAx", + "avatar_url": "https://avatars.githubusercontent.com/u/62764301?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/goldbal330", + "html_url": "https://github.com/goldbal330", + "followers_url": "https://api.github.com/users/goldbal330/followers", + "following_url": "https://api.github.com/users/goldbal330/following{/other_user}", + "gists_url": "https://api.github.com/users/goldbal330/gists{/gist_id}", + "starred_url": "https://api.github.com/users/goldbal330/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/goldbal330/subscriptions", + "organizations_url": "https://api.github.com/users/goldbal330/orgs", + "repos_url": "https://api.github.com/users/goldbal330/repos", + "events_url": "https://api.github.com/users/goldbal330/events{/privacy}", + "received_events_url": "https://api.github.com/users/goldbal330/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2022-10-03T21:49:18Z", + "updated_at": "2022-10-04T07:45:35Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "https://github.com/hub4j/github-api/blob/4bba9680706785d6385ed69243f41a5f36757463/src/main/java/org/kohsuke/github/GHRepositoryStatistics.java#L67\r\n\r\nThis method will never invoke Thread.sleep if the data is not ready.\r\n\r\n ```\nif (stats == null && waitTillReady) {\r\n for (int i = 0; i < MAX_WAIT_ITERATIONS; i += 1) {\r\n // Wait a few seconds and try again.\r\n Thread.sleep(WAIT_SLEEP_INTERVAL);\r\n stats = getContributorStatsImpl();\r\n if (stats != null) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\nstats = getContributorStatsImpl() will never return null.\r\n```\n\r\nhttps://github.com/hub4j/github-api/blob/4bba9680706785d6385ed69243f41a5f36757463/src/main/java/org/kohsuke/github/Requester.java#L169\r\n\r\nwill always create a new instance of GitHubPageContentsIterable.\r\nHence, if the data is still being cached by the server, the blocking will never happen and empty result will be returned back.\r\n\r\n**Expected behavior**\r\nBased on GitHub API documentation: https://docs.github.com/en/rest/metrics/statistics#a-word-about-caching code 202 is returned back when the statistics data is not ready. Ideally status code of 202 returned by the REST call would be driving sleep and retry in GHRepositoryStatistics class. If the data is not ready, the method would block till the data is ready and return then.\r\n\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1540/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1540/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/423", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/423/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/423/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/423/events", + "html_url": "https://github.com/hub4j/github-api/issues/423", + "id": 302121839, + "node_id": "MDU6SXNzdWUzMDIxMjE4Mzk=", + "number": 423, + "title": "Upgrade documentation and supply examples", + "user": { + "login": "adam-arold", + "id": 1253248, + "node_id": "MDQ6VXNlcjEyNTMyNDg=", + "avatar_url": "https://avatars.githubusercontent.com/u/1253248?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/adam-arold", + "html_url": "https://github.com/adam-arold", + "followers_url": "https://api.github.com/users/adam-arold/followers", + "following_url": "https://api.github.com/users/adam-arold/following{/other_user}", + "gists_url": "https://api.github.com/users/adam-arold/gists{/gist_id}", + "starred_url": "https://api.github.com/users/adam-arold/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/adam-arold/subscriptions", + "organizations_url": "https://api.github.com/users/adam-arold/orgs", + "repos_url": "https://api.github.com/users/adam-arold/repos", + "events_url": "https://api.github.com/users/adam-arold/events{/privacy}", + "received_events_url": "https://api.github.com/users/adam-arold/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 2070644911, + "node_id": "MDU6TGFiZWwyMDcwNjQ0OTEx", + "url": "https://api.github.com/repos/hub4j/github-api/labels/documentation", + "name": "documentation", + "color": "6ee5cb", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2018-03-04T21:03:09Z", + "updated_at": "2022-09-30T15:03:33Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The documentation of this library is **extremely lacking**. There are no examples for even the simplest case of OAuth-based authentication for a GitHub app. The javadoc is basically non-existent. I can't figure out for example how can I use a `client_id` and `client_secret` for authentication.\r\n\r\nPlease improve this!", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/423/reactions", + "total_count": 7, + "+1": 7, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/423/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1532", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1532/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1532/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1532/events", + "html_url": "https://github.com/hub4j/github-api/issues/1532", + "id": 1389612266, + "node_id": "I_kwDOAAlq-s5S08zq", + "number": 1532, + "title": "GHMyself fails with Github enterprise", + "user": { + "login": "familrodrigues", + "id": 96345373, + "node_id": "U_kgDOBb4dHQ", + "avatar_url": "https://avatars.githubusercontent.com/u/96345373?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/familrodrigues", + "html_url": "https://github.com/familrodrigues", + "followers_url": "https://api.github.com/users/familrodrigues/followers", + "following_url": "https://api.github.com/users/familrodrigues/following{/other_user}", + "gists_url": "https://api.github.com/users/familrodrigues/gists{/gist_id}", + "starred_url": "https://api.github.com/users/familrodrigues/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/familrodrigues/subscriptions", + "organizations_url": "https://api.github.com/users/familrodrigues/orgs", + "repos_url": "https://api.github.com/users/familrodrigues/repos", + "events_url": "https://api.github.com/users/familrodrigues/events{/privacy}", + "received_events_url": "https://api.github.com/users/familrodrigues/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2022-09-28T16:05:35Z", + "updated_at": "2022-09-29T07:53:26Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Trying to connect to Github enterprise with User name & PAT token. GHMyself throws a 401 unauthorized error\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\n\r\n```\nGitHub github = GitHub.connectToEnterpriseWithOAuth(gitURL, aUsername, aPassword);\r\nGHMyself aUser = github.getMyself();\r\n```\n\r\nIssue seems to be in GHMyself u = retrieve().to(\"/user\", GHMyself.class);\n Expects the token as part of this API call\r\n\r\n\r\n**Expected behavior**\r\nWould need GHmyself to be successfully populated.\r\n\r\n**Additional context**\r\nConnect to Git hub enterprise with PAT token. The same code works fine with Github, ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1532/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1532/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1507", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1507/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1507/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1507/events", + "html_url": "https://github.com/hub4j/github-api/issues/1507", + "id": 1350549876, + "node_id": "I_kwDOAAlq-s5Qf8F0", + "number": 1507, + "title": "PagedSearchIterable returns a subset of the searched results and has non-deterministic behaviour.", + "user": { + "login": "tassiluca", + "id": 39587905, + "node_id": "MDQ6VXNlcjM5NTg3OTA1", + "avatar_url": "https://avatars.githubusercontent.com/u/39587905?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tassiluca", + "html_url": "https://github.com/tassiluca", + "followers_url": "https://api.github.com/users/tassiluca/followers", + "following_url": "https://api.github.com/users/tassiluca/following{/other_user}", + "gists_url": "https://api.github.com/users/tassiluca/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tassiluca/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tassiluca/subscriptions", + "organizations_url": "https://api.github.com/users/tassiluca/orgs", + "repos_url": "https://api.github.com/users/tassiluca/repos", + "events_url": "https://api.github.com/users/tassiluca/events{/privacy}", + "received_events_url": "https://api.github.com/users/tassiluca/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2022-08-25T08:44:37Z", + "updated_at": "2022-09-02T06:14:57Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nSearching for repositories and getting the results via the `PagedSearchIterable` returns a subset of the results with duplicate `GHRepository` objects and has non-deterministic behavior.\r\n\r\n**To Reproduce**\r\nThe problem is reproducible with the following JUnit tests. \r\n```Java\r\nmatchingRepos = github.searchRepositories()\r\n .user(\"DanySK\")\r\n .fork(GHFork.PARENT_AND_FORKS)\r\n .q(\"Student-Project-OOP\")\r\n .list();\r\n``` \r\n```Java\r\n@Test\r\npublic void testDuplicates() throws IOException {\r\n assertEquals(matchingRepos.toList().size(), matchingRepos.toSet().size());\r\n}\r\n\r\n@Test\r\npublic void testDeterminism() throws IOException {\r\n var set1 = matchingRepos.toSet();\r\n var set2 = matchingRepos.toSet();\r\n assertEquals(set1, set2);\r\n}\r\n```\r\n\r\n**Expected behavior**\r\nThe list of `GHRepository` returned by `PagedSearchIterable` should contains all the expected results.\r\n\r\n**Desktop:**\r\n - OS: [MacOS]\r\n - Browser [firefox]\r\n - Version [1.308]\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1507/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1507/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1497", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1497/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1497/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1497/events", + "html_url": "https://github.com/hub4j/github-api/issues/1497", + "id": 1325595081, + "node_id": "I_kwDOAAlq-s5PAvnJ", + "number": 1497, + "title": "GHUser even when event comes from Organization type", + "user": { + "login": "Jalmeida1994", + "id": 26606265, + "node_id": "MDQ6VXNlcjI2NjA2MjY1", + "avatar_url": "https://avatars.githubusercontent.com/u/26606265?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Jalmeida1994", + "html_url": "https://github.com/Jalmeida1994", + "followers_url": "https://api.github.com/users/Jalmeida1994/followers", + "following_url": "https://api.github.com/users/Jalmeida1994/following{/other_user}", + "gists_url": "https://api.github.com/users/Jalmeida1994/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Jalmeida1994/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Jalmeida1994/subscriptions", + "organizations_url": "https://api.github.com/users/Jalmeida1994/orgs", + "repos_url": "https://api.github.com/users/Jalmeida1994/repos", + "events_url": "https://api.github.com/users/Jalmeida1994/events{/privacy}", + "received_events_url": "https://api.github.com/users/Jalmeida1994/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2022-08-02T09:48:15Z", + "updated_at": "2022-08-16T08:02:26Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nA `GHUser` type is returned even when in the payload the account type is `Organization`.\r\n\r\nMore precisely in the event `installation.created` when the `installation.account.type` is set to `Organization` (app installed in organization) the `installation.account` in the `@Installation.Created` payload returns a `GHUser`.\r\n\r\n```yaml\r\n{\r\n \"action\": \"created\",\r\n \"installation\": {\r\n \"id\": 12345,\r\n \"account\": {\r\n \"login\": \"org-name\",\r\n <...>\r\n \"type\": \"Organization\",\r\n \"site_admin\": false\r\n },\r\n<...>\r\n```\r\n\r\n```kotlin\r\nfun onInstall(@Installation.Created installationPayload: GHEventPayload.Installation) {\r\n val tenantGHOrganization = installationPayload.installation.account // <-- GHUser instance\r\n}\r\n```\r\n\r\nAlso tried to use the `installationPayload.organization` object but it always returned null (probably it's used in other events):\r\n\r\n```kotlin\r\nfun onInstall(@Installation.Created installationPayload: GHEventPayload.Installation) {\r\n LOG.info(\"org: \" + installationPayload.organization.name) // <-- Cannot invoke \"org.kohsuke.github.GHOrganization.getName()\" because the return value of \"org.kohsuke.github.GHEventPayload$Installation.getOrganization()\" is null\r\n}\r\n```\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Create an event with `installation.created` in an organization (install app in an organization)\r\n2. Catch the event\r\n3. Retrieve the `installationPayload.installation.account` object\r\n4. Or retrieve the `installationPayload.organization` object\r\n\r\n**Expected behavior**\r\nIf the payload has the `installation.account.type` set to `Organization` the `installationPayload.installation.account`should return a GHOrganization object or the `installationPayload.organization` should not return null.\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: macOS Monterey v12.4 (Apple M1)\r\n\r\n**Additional context**\r\nUsing Kotlin and [Quarkus GitHub App](https://github.com/quarkiverse/quarkus-github-app)\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1497/reactions", + "total_count": 2, + "+1": 2, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1497/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1468", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1468/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1468/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1468/events", + "html_url": "https://github.com/hub4j/github-api/issues/1468", + "id": 1257088797, + "node_id": "I_kwDOAAlq-s5K7acd", + "number": 1468, + "title": "Adding support for rerequesting check-suites/check runs", + "user": { + "login": "xocasdashdash", + "id": 6722159, + "node_id": "MDQ6VXNlcjY3MjIxNTk=", + "avatar_url": "https://avatars.githubusercontent.com/u/6722159?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/xocasdashdash", + "html_url": "https://github.com/xocasdashdash", + "followers_url": "https://api.github.com/users/xocasdashdash/followers", + "following_url": "https://api.github.com/users/xocasdashdash/following{/other_user}", + "gists_url": "https://api.github.com/users/xocasdashdash/gists{/gist_id}", + "starred_url": "https://api.github.com/users/xocasdashdash/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/xocasdashdash/subscriptions", + "organizations_url": "https://api.github.com/users/xocasdashdash/orgs", + "repos_url": "https://api.github.com/users/xocasdashdash/repos", + "events_url": "https://api.github.com/users/xocasdashdash/events{/privacy}", + "received_events_url": "https://api.github.com/users/xocasdashdash/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2022-06-01T21:31:58Z", + "updated_at": "2022-08-08T16:41:52Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "So for a project i want to be able to rerun a checksuite that another app already configured (something like travis/jenkins app). \r\n\r\nI see that github's API supports this: \r\n\r\n- https://docs.github.com/en/rest/checks/runs#rerequest-a-check-run\r\n- https://docs.github.com/en/rest/checks/suites#rerequest-a-check-suite\r\n\r\nBut i haven't been able to find how to do that with this library. Is this supported? I'd love to add these two calls (seems like it should be a couple of POST requests) but I might struggle with testing. Is there any example of adding support for something like this? \r\n\r\nLet me know if I missed something and this is actually possible with this library, I've checked on the GHCheckSuite and GHCheckRun classes", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1468/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1468/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1471", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1471/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1471/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1471/events", + "html_url": "https://github.com/hub4j/github-api/issues/1471", + "id": 1270012702, + "node_id": "I_kwDOAAlq-s5Lstse", + "number": 1471, + "title": "Could not fetch branches from source ", + "user": { + "login": "noellowry", + "id": 19227294, + "node_id": "MDQ6VXNlcjE5MjI3Mjk0", + "avatar_url": "https://avatars.githubusercontent.com/u/19227294?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/noellowry", + "html_url": "https://github.com/noellowry", + "followers_url": "https://api.github.com/users/noellowry/followers", + "following_url": "https://api.github.com/users/noellowry/following{/other_user}", + "gists_url": "https://api.github.com/users/noellowry/gists{/gist_id}", + "starred_url": "https://api.github.com/users/noellowry/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/noellowry/subscriptions", + "organizations_url": "https://api.github.com/users/noellowry/orgs", + "repos_url": "https://api.github.com/users/noellowry/repos", + "events_url": "https://api.github.com/users/noellowry/events{/privacy}", + "received_events_url": "https://api.github.com/users/noellowry/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1686290078, + "node_id": "MDU6TGFiZWwxNjg2MjkwMDc4", + "url": "https://api.github.com/repos/hub4j/github-api/labels/external", + "name": "external", + "color": "a0a0a0", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2022-06-13T22:10:34Z", + "updated_at": "2022-06-22T02:52:51Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nScan Repository Now fails branch\r\n```\r\nChecking branch [release/v1.9.0.0](repo-name/branch-name)\r\n ‘jenkins/Jenkinsfile.selenium’ found\r\n Met criteria\r\nERROR: [Mon Jun 13 22:05:43 UTC 2022] Could not fetch branches from source a4e4fa47-7b9a-49de-a5b8-56e68cfb2e08\r\n[Mon Jun 13 22:05:43 UTC 2022] Finished branch indexing. Indexing took 1 min 17 sec\r\nFATAL: Failed to recompute children of resilient-selenium\r\njava.lang.IllegalStateException: JENKINS-42511: attempted to redundantly create release%2Fv1.9.0.0 in org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject@17a57a09[resilient-selenium]\r\n\tat jenkins.branch.MultiBranchProject$SCMHeadObserverImpl.observeNew(MultiBranchProject.java:2055)\r\n\tat jenkins.branch.MultiBranchProject$SCMHeadObserverImpl.observe(MultiBranchProject.java:1990)\r\n\tat jenkins.scm.api.trait.SCMSourceRequest.process(SCMSourceRequest.java:357)\r\n\tat jenkins.scm.api.trait.SCMSourceRequest.process(SCMSourceRequest.java:249)\r\n\tat org.jenkinsci.plugins.github_branch_source.GitHubSCMSource.retrieve(GitHubSCMSource.java:1055)\r\n\tat jenkins.scm.api.SCMSource._retrieve(SCMSource.java:373)\r\n\tat jenkins.scm.api.SCMSource.fetch(SCMSource.java:283)\r\n\tat jenkins.branch.MultiBranchProject.computeChildren(MultiBranchProject.java:641)\r\n\tat com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.updateChildren(ComputedFolder.java:278)\r\n\tat com.cloudbees.hudson.plugins.folder.computed.FolderComputation.run(FolderComputation.java:166)\r\n\tat jenkins.branch.MultiBranchProject$BranchIndexing.run(MultiBranchProject.java:1032)\r\n\tat hudson.model.ResourceController.execute(ResourceController.java:101)\r\n\tat hudson.model.Executor.run(Executor.java:442)\r\nFinished: FAILURE\r\n```\r\nDeleted the cache in `$JENKINS_HOME/org.jenkinsci.plugins.github_branch_source.GitHubSCMProbe.cache/*`\r\nbut the issue still persists\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n\r\n1. Click on 'Scan Repository Now'\r\n2. Go to 'Scan Repository Log'\r\n3. See error\r\n\r\n**Expected behavior**\r\nRepository to be scanned successfully\r\nNot sure if the %2F in branch name is causing issues? Though it worked for a similarly named branch\r\nBranch name is release/v1.9.0.0\r\n`java.lang.IllegalStateException: JENKINS-42511: attempted to redundantly create release%2Fv1.9.0.0 in org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject@17a57a09[resilient-selenium]`", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1471/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1471/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/937", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/937/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/937/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/937/events", + "html_url": "https://github.com/hub4j/github-api/issues/937", + "id": 686155949, + "node_id": "MDU6SXNzdWU2ODYxNTU5NDk=", + "number": 937, + "title": "Adding public key to user", + "user": { + "login": "vmax", + "id": 499267, + "node_id": "MDQ6VXNlcjQ5OTI2Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/499267?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vmax", + "html_url": "https://github.com/vmax", + "followers_url": "https://api.github.com/users/vmax/followers", + "following_url": "https://api.github.com/users/vmax/following{/other_user}", + "gists_url": "https://api.github.com/users/vmax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vmax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vmax/subscriptions", + "organizations_url": "https://api.github.com/users/vmax/orgs", + "repos_url": "https://api.github.com/users/vmax/repos", + "events_url": "https://api.github.com/users/vmax/events{/privacy}", + "received_events_url": "https://api.github.com/users/vmax/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2020-08-26T09:15:37Z", + "updated_at": "2022-06-02T10:45:59Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\n\r\nIt currently seems to be impossible to add a new public key to user's account using `GHMyself`. [`POST /user/keys`](https://developer.github.com/v3/users/keys/#create-a-public-ssh-key-for-the-authenticated-user) is the relevant GitHub API endpoint.\r\n\r\n**To Reproduce**\r\nRead docs on `GHMyself` and observe the method not being present\r\n\r\n**Expected behavior**\r\n`GHMyself::addKey` to be available, with an interface similar to `GHRepository::addDeployKey`\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/937/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/937/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1267", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1267/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1267/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1267/events", + "html_url": "https://github.com/hub4j/github-api/issues/1267", + "id": 1031601401, + "node_id": "I_kwDOAAlq-s49fPz5", + "number": 1267, + "title": "GHFileNotFoundException is thrown for any HTTP 4xx or 5xx error", + "user": { + "login": "Typraeurion", + "id": 36168707, + "node_id": "MDQ6VXNlcjM2MTY4NzA3", + "avatar_url": "https://avatars.githubusercontent.com/u/36168707?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Typraeurion", + "html_url": "https://github.com/Typraeurion", + "followers_url": "https://api.github.com/users/Typraeurion/followers", + "following_url": "https://api.github.com/users/Typraeurion/following{/other_user}", + "gists_url": "https://api.github.com/users/Typraeurion/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Typraeurion/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Typraeurion/subscriptions", + "organizations_url": "https://api.github.com/users/Typraeurion/orgs", + "repos_url": "https://api.github.com/users/Typraeurion/repos", + "events_url": "https://api.github.com/users/Typraeurion/events{/privacy}", + "received_events_url": "https://api.github.com/users/Typraeurion/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2021-10-20T16:23:20Z", + "updated_at": "2022-05-24T20:00:57Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nObsoleteUrlFactory.getInputStream() throws FileNotFoundException regardless of the type of client-side or server-side error response from an HTTP request. GitHubClient.interpretApiError(IOException, GitHubRequest, ResponseInfo) then _assumes_ this exception is due to a 404 response and wraps that exception in a GHFileNotFoundException. This makes in impossible for the caller to distinguish what kind of error we’re dealing with. In the particular case I’m troubleshooting right now, it’s an expired auth token which _should_ cause the application to delete its session cookie and redirect the user to the auth flow; instead it’s showing the user a 500 Internal Server Error because it doesn’t know how to handle this exception.\r\n\r\nThe getInputStream code is:\r\n```\r\n Response response = getResponse(false);\r\n if (response.code() >= HTTP_BAD_REQUEST)\r\n throw new FileNotFoundException(url.toString());\r\n return new ResponseBodyInputStream(response.body());\r\n```\r\nThe offending code in interpretApiError is:\r\n```\r\n if (errorMessage != null) {\r\n if (e instanceof FileNotFoundException) { // MISTAKEN ASSUMPTION HERE!\r\n // pass through 404 Not Found to allow the caller to handle it intelligently\r\n e = new GHFileNotFoundException(e.getMessage() + \" \" + errorMessage, e)\r\n .withResponseHeaderFields(headers);\r\n } else if (statusCode >= 0) {\r\n e = new HttpException(errorMessage, statusCode, message, request.url().toString(), e);\r\n } else {\r\n e = new GHIOException(errorMessage).withResponseHeaderFields(headers);\r\n }\r\n } else if (!(e instanceof FileNotFoundException)) {\r\n e = new HttpException(statusCode, message, request.url().toString(), e);\r\n }\r\n return e;\r\n```\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Set `authToken` to an old authentication token (e.g. one obtained yesterday)\r\n2.\r\n```\r\n GitHub connection = new GitHubBuilder()\r\n .withConnector(new OkHttpConnector(new OkHttpClient.Builder().build()))\r\n .withOAuthToken(authToken)\r\n .build();\r\n GHMyself me = connection.getMyself();\r\n```\r\n\r\n**Expected behavior**\r\nThe call should throw GHFileNotFoundException only `if (statusCode == 404)`; it should throw HttpException `if (statusCode >= 400)` and throw GHIOException in any other case. _(Status codes 2xx or 3xx should not be throwing exceptions.)_\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: MacOS 11.4\r\n - Browser: Chrome 94.0.4606.81\r\n - Version: 1.133\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1267/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1267/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1232", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1232/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1232/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1232/events", + "html_url": "https://github.com/hub4j/github-api/issues/1232", + "id": 1002874718, + "node_id": "I_kwDOAAlq-s47xqde", + "number": 1232, + "title": "open your objects for extension", + "user": { + "login": "tynutsu", + "id": 5890846, + "node_id": "MDQ6VXNlcjU4OTA4NDY=", + "avatar_url": "https://avatars.githubusercontent.com/u/5890846?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tynutsu", + "html_url": "https://github.com/tynutsu", + "followers_url": "https://api.github.com/users/tynutsu/followers", + "following_url": "https://api.github.com/users/tynutsu/following{/other_user}", + "gists_url": "https://api.github.com/users/tynutsu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tynutsu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tynutsu/subscriptions", + "organizations_url": "https://api.github.com/users/tynutsu/orgs", + "repos_url": "https://api.github.com/users/tynutsu/repos", + "events_url": "https://api.github.com/users/tynutsu/events{/privacy}", + "received_events_url": "https://api.github.com/users/tynutsu/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 7, + "created_at": "2021-09-21T17:00:52Z", + "updated_at": "2022-05-24T19:35:09Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "this is a very weird model which has business logic coupled with pojo, setters should not actually perform the github rest calls, instead a dedicated service should do that.\r\n\r\nwhile i understand is a lot work to re-model, what you could do at least is to allow the classes in the library to be further extended, so they should not be sealed or marked as final.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1232/reactions", + "total_count": 2, + "+1": 2, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1232/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1404", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1404/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1404/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1404/events", + "html_url": "https://github.com/hub4j/github-api/issues/1404", + "id": 1169422956, + "node_id": "I_kwDOAAlq-s5Fs_ps", + "number": 1404, + "title": "GitHub App Webhook Deliveries support", + "user": { + "login": "Georgeforman3", + "id": 100565446, + "node_id": "U_kgDOBf6Bxg", + "avatar_url": "https://avatars.githubusercontent.com/u/100565446?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Georgeforman3", + "html_url": "https://github.com/Georgeforman3", + "followers_url": "https://api.github.com/users/Georgeforman3/followers", + "following_url": "https://api.github.com/users/Georgeforman3/following{/other_user}", + "gists_url": "https://api.github.com/users/Georgeforman3/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Georgeforman3/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Georgeforman3/subscriptions", + "organizations_url": "https://api.github.com/users/Georgeforman3/orgs", + "repos_url": "https://api.github.com/users/Georgeforman3/repos", + "events_url": "https://api.github.com/users/Georgeforman3/events{/privacy}", + "received_events_url": "https://api.github.com/users/Georgeforman3/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2022-03-15T09:46:38Z", + "updated_at": "2022-04-05T15:50:16Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Is there any way to list webhook deliveries for the webhook configured for a GitHub App?\r\nhttps://docs.github.com/en/enterprise-cloud@latest/rest/reference/apps#list-deliveries-for-an-app-webhook\r\n\r\nOr to redeliver a delivery?\r\nhttps://docs.github.com/en/enterprise-cloud@latest/rest/reference/apps#redeliver-a-delivery-for-an-app-webhook\r\n\r\nThanks.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1404/reactions", + "total_count": 2, + "+1": 2, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1404/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1016", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1016/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1016/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1016/events", + "html_url": "https://github.com/hub4j/github-api/issues/1016", + "id": 781715355, + "node_id": "MDU6SXNzdWU3ODE3MTUzNTU=", + "number": 1016, + "title": "Add check that verifies public or protected methods do not take private or internal parameters", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2021-01-07T23:36:32Z", + "updated_at": "2022-03-07T19:29:46Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "#1015 fixed an issue where a `public` annotation had a `public` constructor that had a [`package-private`](https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html) `enum` parameter. This didn't break immediately, but caused issue for mocking. If it were a more generally used method, that method would be visible but not callable. \r\n\r\nWe should add an ArchUnit tests that: \r\n* find all public methods and verifies that all parameters of those method are also public\r\n* find all protected methods and verify that all parameters of those method are also at least protected - might be harder to write this test\r\n* find all public classes and verify they extend public classes - this may or may not be strictly required, but it makes for better testing and clarity.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1016/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1016/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1356", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1356/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1356/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1356/events", + "html_url": "https://github.com/hub4j/github-api/issues/1356", + "id": 1107805161, + "node_id": "I_kwDOAAlq-s5CB8Pp", + "number": 1356, + "title": "OkHttpGitHubConnector constructor seems to override OkHttpClient variables/settings", + "user": { + "login": "willemevenwel", + "id": 13721310, + "node_id": "MDQ6VXNlcjEzNzIxMzEw", + "avatar_url": "https://avatars.githubusercontent.com/u/13721310?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/willemevenwel", + "html_url": "https://github.com/willemevenwel", + "followers_url": "https://api.github.com/users/willemevenwel/followers", + "following_url": "https://api.github.com/users/willemevenwel/following{/other_user}", + "gists_url": "https://api.github.com/users/willemevenwel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/willemevenwel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/willemevenwel/subscriptions", + "organizations_url": "https://api.github.com/users/willemevenwel/orgs", + "repos_url": "https://api.github.com/users/willemevenwel/repos", + "events_url": "https://api.github.com/users/willemevenwel/events{/privacy}", + "received_events_url": "https://api.github.com/users/willemevenwel/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2022-01-19T08:33:59Z", + "updated_at": "2022-03-07T19:24:42Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "OkHttpGitHubConnector constructor seems to override OkHttpClient variables/settings. I explain.\r\n\r\nI am developing behind a corporate proxy. So while I run my code locally, I need to have my OkHttpClient initialized/built with proxy configurations. Like this:\r\n\r\n OkHttpClient client = new OkHttpClient.Builder()\r\n .connectTimeout(15, TimeUnit.SECONDS)\r\n .writeTimeout(15, TimeUnit.SECONDS)\r\n .readTimeout(15, TimeUnit.SECONDS)\r\n .proxy(proxy)\r\n .proxyAuthenticator(proxyAuthenticator)\r\n .build();\r\n\r\nBefore you make the point, I have tested a simple GET with this OkHttpClient instance, with success:\r\n\r\n Request request = new Request.Builder()\r\n .url(\"https://api.github.com\")\r\n .build();\r\n\r\nWhen initializing my GitHub instance I do the following:\r\n\r\n GitHubBuilder builder = new GitHubBuilder().withConnector(new OkHttpGitHubConnector(client));\r\n GitHub github = builder.withAppInstallationToken(githubapitoken).build();\r\n\r\nWhere the above _client_ which is used is the one initialized with the proxy. \r\n\r\nThe assumption is that the GitHub builder will honour this _client_ when any http requests are made. \r\n\r\nHowever when looking into the OkHttpGitHubConnector constructor, it seems a **new** OkHttpClient is built by calling newBuilder(). Here is the code which I inspected:\r\n\r\n public OkHttpGitHubConnector(OkHttpClient client, int cacheMaxAge) {\r\n **Builder builder = client.newBuilder();**\r\n builder.connectionSpecs(this.TlsConnectionSpecs());\r\n this.client = builder.build();\r\n if (cacheMaxAge >= 0 && this.client != null && this.client.cache() != null) {\r\n this.maxAgeHeaderValue = (new okhttp3.CacheControl.Builder()).maxAge(cacheMaxAge, TimeUnit.SECONDS).build().toString();\r\n } else {\r\n this.maxAgeHeaderValue = null;\r\n }\r\n\r\n }\r\n\r\nMy assumption is then that .newBuilder() overrides any existing settings/properties set for this OkHttpClient.\r\n\r\nAny help would be aprpeciated.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1356/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1356/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1375", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1375/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1375/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1375/events", + "html_url": "https://github.com/hub4j/github-api/issues/1375", + "id": 1138182131, + "node_id": "I_kwDOAAlq-s5D10fz", + "number": 1375, + "title": "Webhook payloads and Event payloads should not be represented by the same classes", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2022-02-15T04:55:32Z", + "updated_at": "2022-02-15T04:56:52Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Webhooks and events contain similar data but often not the same data. The Push event is one example: \r\nhttps://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#push\r\nhttps://docs.github.com/en/developers/webhooks-and-events/events/github-event-types#pushevent\r\n\r\nThere's a lot of overlap, but having the two represented by the same data objects is misleading. \r\nSee #1374 for an example of the confusion this causes.\r\n\r\nWe should be returning different classes for these two. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1375/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1375/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1373", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1373/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1373/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1373/events", + "html_url": "https://github.com/hub4j/github-api/issues/1373", + "id": 1127032832, + "node_id": "I_kwDOAAlq-s5DLSgA", + "number": 1373, + "title": "Api support required for checking the authorization for Github OAuth token after previous api has been deprecated", + "user": { + "login": "sundergopalsingh", + "id": 8762655, + "node_id": "MDQ6VXNlcjg3NjI2NTU=", + "avatar_url": "https://avatars.githubusercontent.com/u/8762655?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sundergopalsingh", + "html_url": "https://github.com/sundergopalsingh", + "followers_url": "https://api.github.com/users/sundergopalsingh/followers", + "following_url": "https://api.github.com/users/sundergopalsingh/following{/other_user}", + "gists_url": "https://api.github.com/users/sundergopalsingh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sundergopalsingh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sundergopalsingh/subscriptions", + "organizations_url": "https://api.github.com/users/sundergopalsingh/orgs", + "repos_url": "https://api.github.com/users/sundergopalsingh/repos", + "events_url": "https://api.github.com/users/sundergopalsingh/events{/privacy}", + "received_events_url": "https://api.github.com/users/sundergopalsingh/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2022-02-08T10:00:12Z", + "updated_at": "2022-02-14T22:22:46Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nGithub has deprecated previous REST api that was used to check the authorization of OAuth token as per https://docs.github.com/en/enterprise-server@3.3/rest/reference/oauth-authorizations#check-an-authorization and blog post https://developer.github.com/changes/2020-02-14-deprecating-oauth-app-endpoint/ \r\n\r\nIn this repository we are using the deprecated api :-\r\nhttps://github.com/hub4j/github-api/blob/main/src/main/java/org/kohsuke/github/GitHub.java#L1106 and there is no support for the new APIs mentioned as per blog. So we would need support for new APIs to be added in order to check for a token authorization part as well as for the other areas which has been effected by the deprecation of the authorization APIs.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Create an OAuth token \r\n2. Try to validate the token using checkAuth Method https://github.com/hub4j/github-api/blob/main/src/main/java/org/kohsuke/github/GitHub.java#L1105 with valid clientId and accessToken created previously.\r\n3. It returns 404\r\n\r\n**Expected behavior**\r\ncheckAuth method or any other method added should not return 404 for a valid token and should return the proper GHAuthorization object.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1373/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1373/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1357", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1357/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1357/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1357/events", + "html_url": "https://github.com/hub4j/github-api/issues/1357", + "id": 1110166715, + "node_id": "I_kwDOAAlq-s5CK8y7", + "number": 1357, + "title": "Exception on renaming label - `done()` should only be callable once for Setter or Updater", + "user": { + "login": "danhallin", + "id": 1741571, + "node_id": "MDQ6VXNlcjE3NDE1NzE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1741571?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/danhallin", + "html_url": "https://github.com/danhallin", + "followers_url": "https://api.github.com/users/danhallin/followers", + "following_url": "https://api.github.com/users/danhallin/following{/other_user}", + "gists_url": "https://api.github.com/users/danhallin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/danhallin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/danhallin/subscriptions", + "organizations_url": "https://api.github.com/users/danhallin/orgs", + "repos_url": "https://api.github.com/users/danhallin/repos", + "events_url": "https://api.github.com/users/danhallin/events{/privacy}", + "received_events_url": "https://api.github.com/users/danhallin/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2022-01-21T08:00:45Z", + "updated_at": "2022-01-29T06:40:30Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nThrowing error when renaming label, the renaming does take place.\r\n\r\norg.kohsuke.github.GHFileNotFoundException: https://api.github.com/repos/org/repo/labels/oldname {\"message\":\"Not Found\",\"documentation_url\":\"https://docs.github.com/rest/reference/issues#update-a-label\"}\r\n\tat org.kohsuke.github.GitHubClient.interpretApiError(GitHubClient.java:540)\r\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:401)\r\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:355)\r\n\tat org.kohsuke.github.Requester.fetch(Requester.java:76)\r\n\tat org.kohsuke.github.AbstractBuilder.done(AbstractBuilder.java:109)\r\n\tat org.kohsuke.github.GHLabel$Setter.done(GHLabel.java:258)\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n```\r\nGHLabel ghLabel = ghLabelWithOldName;\r\nGHLabel.Setter setter = ghLabel.set();\r\nsetter.name(newname);\r\nghLabel = setter.done();\r\n```\r\n\r\n**Expected behavior**\r\nNew label should be returned by .done()\r\n\r\n**Additional context**\r\nVersion 1.301\r\nLikely caused from attempting to re-fetch label data with the old name which was just replaced and is no longer available.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1357/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1357/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1330", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1330/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1330/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1330/events", + "html_url": "https://github.com/hub4j/github-api/issues/1330", + "id": 1067671913, + "node_id": "I_kwDOAAlq-s4_o2Fp", + "number": 1330, + "title": "Query runs for a workflow", + "user": { + "login": "Typraeurion", + "id": 36168707, + "node_id": "MDQ6VXNlcjM2MTY4NzA3", + "avatar_url": "https://avatars.githubusercontent.com/u/36168707?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Typraeurion", + "html_url": "https://github.com/Typraeurion", + "followers_url": "https://api.github.com/users/Typraeurion/followers", + "following_url": "https://api.github.com/users/Typraeurion/following{/other_user}", + "gists_url": "https://api.github.com/users/Typraeurion/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Typraeurion/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Typraeurion/subscriptions", + "organizations_url": "https://api.github.com/users/Typraeurion/orgs", + "repos_url": "https://api.github.com/users/Typraeurion/repos", + "events_url": "https://api.github.com/users/Typraeurion/events{/privacy}", + "received_events_url": "https://api.github.com/users/Typraeurion/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2021-11-30T21:01:57Z", + "updated_at": "2021-12-13T22:11:42Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nThis is a follow-up to issue #1244. v1.135 added `listRuns` to GHWorkflow, but that doesn’t have support for adding any query parameters list GHRepository’s `queryWorkflowRuns` does.\r\n\r\nI checked out the source code and tried adding support for this myself, but ran into two issues:\r\n* On importing the project into Eclipse, I get a “Maven Project Build Lifecycle Mapping Problem” that I have no idea how to fix:\r\n> Plugin execution not covered by lifecycle configuration: com.infradna.tool:bridge-method-injector:1.18:process (execution: default, phase: process-classes)\r\n* I don’t know how test data is generated\r\n\r\nWith these limitations in mind, I have the following suggested changes. I’ve added an optional `workflow` field to GHWorkflowRunQueryBuilder which is set if created by GHWorkflow.queryWorkflowRuns. If this is set, the query’s `list` method uses the [list workflow runs](https://docs.github.com/en/rest/reference/actions#list-workflow-runs) endpoint instead of [list workflow runs for a repository](https://docs.github.com/en/rest/reference/actions#list-workflow-runs-for-a-repository).\r\n\r\nAlso, I added support in the query builder to set `status` to a Conclusion or an arbitrary string, since the GitHub API supports any status or conclusion values for this parameter.\r\n```\r\ndiff --git a/src/main/java/org/kohsuke/github/GHWorkflow.java b/src/main/java/org/kohsuke/github/GHWorkflow.java\r\nindex ea195e5b1..569abb582 100644\r\n--- a/src/main/java/org/kohsuke/github/GHWorkflow.java\r\n+++ b/src/main/java/org/kohsuke/github/GHWorkflow.java\r\n@@ -145,6 +145,15 @@ public class GHWorkflow extends GHObject {\r\n return new GHWorkflowRunsIterable(owner, root().createRequest().withUrlPath(getApiRoute(), \"runs\"));\r\n }\r\n \r\n+ /**\r\n+ * Retrieves workflow runs.\r\n+ *\r\n+ * @return the workflow run query builder\r\n+ */\r\n+ public GHWorkflowRunQueryBuilder queryWorkflowRuns() {\r\n+ return new GHWorkflowRunQueryBuilder(this);\r\n+ }\r\n+\r\n private String getApiRoute() {\r\n if (owner == null) {\r\n // Workflow runs returned from search to do not have an owner. Attempt to use url.\r\ndiff --git a/src/main/java/org/kohsuke/github/GHWorkflowRunQueryBuilder.java b/src/main/java/org/kohsuke/github/GHWorkflowRunQueryBuilder.ja\r\nva\r\nindex 57a482d1b..0093ccb33 100644\r\n--- a/src/main/java/org/kohsuke/github/GHWorkflowRunQueryBuilder.java\r\n+++ b/src/main/java/org/kohsuke/github/GHWorkflowRunQueryBuilder.java\r\n@@ -1,5 +1,6 @@\r\n package org.kohsuke.github;\r\n \r\n+import org.kohsuke.github.GHWorkflowRun.Conclusion;\r\n import org.kohsuke.github.GHWorkflowRun.Status;\r\n \r\n /**\r\n@@ -10,10 +11,18 @@ import org.kohsuke.github.GHWorkflowRun.Status;\r\n */\r\n public class GHWorkflowRunQueryBuilder extends GHQueryBuilder {\r\n private final GHRepository repo;\r\n+ private final GHWorkflow workflow;\r\n \r\n GHWorkflowRunQueryBuilder(GHRepository repo) {\r\n super(repo.root());\r\n this.repo = repo;\r\n+ workflow = null;\r\n+ }\r\n+\r\n+ GHWorkflowRunQueryBuilder(GHWorkflow workflow) {\r\n+ super(workflow.getRepository().root());\r\n+ this.repo = workflow.getRepository();\r\n+ this.workflow = workflow;\r\n }\r\n \r\n /**\r\n@@ -88,8 +97,36 @@ public class GHWorkflowRunQueryBuilder extends GHQueryBuilder {\r\n return this;\r\n }\r\n \r\n+ /**\r\n+ * Status workflow run query builder.\r\n+ *\r\n+ * @param conclusion\r\n+ * the conclusion\r\n+ * @return the gh workflow run query builder\r\n+ */\r\n+ public GHWorkflowRunQueryBuilder status(Conclusion conclusion) {\r\n+ req.with(\"status\", conclusion.toString());\r\n+ return this;\r\n+ }\r\n+\r\n+ /**\r\n+ * Status workflow run query builder.\r\n+ *\r\n+ * @param status\r\n+ * the status\r\n+ * @return the gh workflow run query builder\r\n+ */\r\n+ public GHWorkflowRunQueryBuilder status(String status) {\r\n+ req.with(\"status\", status);\r\n+ return this;\r\n+ }\r\n+\r\n @Override\r\n public PagedIterable list() {\r\n- return new GHWorkflowRunsIterable(repo, req.withUrlPath(repo.getApiTailUrl(\"actions/runs\")));\r\n+ if (workflow == null)\r\n+ return new GHWorkflowRunsIterable(repo, req.withUrlPath(repo.getApiTailUrl(\"actions/runs\")));\r\n+ else\r\n+ return new GHWorkflowRunsIterable(repo, req.withUrlPath(\r\n+ repo.getApiTailUrl(String.format(\"actions/workflows/%d/runs\", workflow.getId()))));\r\n }\r\n }\r\ndiff --git a/src/test/java/org/kohsuke/github/GHWorkflowTest.java b/src/test/java/org/kohsuke/github/GHWorkflowTest.java\r\nindex a91f9f4ca..86e653787 100644\r\n--- a/src/test/java/org/kohsuke/github/GHWorkflowTest.java\r\n+++ b/src/test/java/org/kohsuke/github/GHWorkflowTest.java\r\n@@ -121,6 +121,17 @@ public class GHWorkflowTest extends AbstractGitHubWireMockTest {\r\n checkWorkflowRunProperties(workflowRuns.get(1), workflow.getId());\r\n }\r\n \r\n+ //Test\r\n+ public void testQueryWorkflowRuns() throws IOException {\r\n+ GHWorkflow workflow = repo.getWorkflow(\"test-workflow.yml\");\r\n+\r\n+ List workflowRuns = workflow.queryWorkflowRuns()\r\n+ .list().toList();\r\n+ assertThat(workflowRuns.size(), is(1));\r\n+\r\n+ checkWorkflowRunProperties(workflowRuns.get(0), workflow.getId());\r\n+ }\r\n+\r\n private static void checkWorkflowRunProperties(GHWorkflowRun workflowRun, long workflowId) throws IOException {\r\n assertThat(workflowRun.getWorkflowId(), equalTo(workflowId));\r\n assertThat(workflowRun.getId(), notNullValue());\r\n```\r\n\r\nI was able to build the library and test this change in my application, and it appears to work as expected. These are the changes I made in my application to test it: the original code was using both GHWorkflow.listRuns and GHRepository.queryWorkflowRuns, and had to filter the results; now both parts of the code use GHWorkflow.queryWorkflowRuns with minimal or no filtering.\r\n```\r\n@@ -1199,21 +1240,15 @@ public class GitHubRestAPIClient {\r\n String.format(\"%s/%s\", organization, repository));\r\n GHWorkflow wf = repo.getWorkflow(workflowId);\r\n \r\n- // FIXME: GHWorkflow doesn't support query parameters for listing runs\r\n- // See: https://github.com/hub4j/github-api/issues/1244\r\n- PagedIterable workflowRuns = wf.listRuns();\r\n- // repo.queryWorkflowRuns().branch(branch).list();\r\n+ GHWorkflowRunQueryBuilder query = wf.queryWorkflowRuns();\r\n+ if (StringUtils.isNotBlank(branch))\r\n+ query = query.branch(branch);\r\n+ PagedIterable workflowRuns = query.list();\r\n \r\n- // Until we can select a single branch, we need a large enough\r\n- // page size to have a good chance of seeing the desired workflow.\r\n- PagedIterator iter = workflowRuns/* .withPageSize(1) */.iterator();\r\n+ PagedIterator iter = workflowRuns.withPageSize(1).iterator();\r\n while (iter.hasNext()) {\r\n \r\n GHWorkflowRun run = iter.next();\r\n- if (StringUtils.isNotBlank(branch)) {\r\n- if (!run.getHeadBranch().equals(branch))\r\n- continue;\r\n- }\r\n \r\n // HDBE-1868: If this run was skipped, ignore it.\r\n if (run.getConclusion() == GHWorkflowRun.Conclusion.SKIPPED)\r\n@@ -1285,22 +1320,16 @@ public class GitHubRestAPIClient {\r\n String.format(\"%s/%s\", organization, repository));\r\n GHWorkflow wf = repo.getWorkflow(workflowId);\r\n \r\n- PagedIterable workflowRuns =\r\n- repo.queryWorkflowRuns()\r\n- .branch(Optional.ofNullable(branch).orElse(repo.getDefaultBranch()))\r\n- .list();\r\n+ GHWorkflowRunQueryBuilder query = wf.queryWorkflowRuns();\r\n+ if (StringUtils.isNotBlank(branch))\r\n+ query = query.branch(branch);\r\n+ PagedIterable workflowRuns = query.list();\r\n \r\n PagedIterator iter = workflowRuns.iterator();\r\n while (iter.hasNext()) {\r\n \r\n GHWorkflowRun run = iter.next();\r\n- if (run.getWorkflowId() != wf.getId())\r\n- continue;\r\n-\r\n- if ((run.getStatus() != GHWorkflowRun.Status.COMPLETED) ||\r\n- (run.getConclusion() != GHWorkflowRun.Conclusion.SUCCESS))\r\n- continue;\r\n-\r\n return new WorkflowRun(run, findTargetCommit(run, commitArtifact));\r\n \r\n }\r\n```\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1330/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1330/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1024", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1024/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1024/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1024/events", + "html_url": "https://github.com/hub4j/github-api/issues/1024", + "id": 789898861, + "node_id": "MDU6SXNzdWU3ODk4OTg4NjE=", + "number": 1024, + "title": "GHProjectCard return null on getContent()", + "user": { + "login": "WolverMinion", + "id": 23451407, + "node_id": "MDQ6VXNlcjIzNDUxNDA3", + "avatar_url": "https://avatars.githubusercontent.com/u/23451407?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/WolverMinion", + "html_url": "https://github.com/WolverMinion", + "followers_url": "https://api.github.com/users/WolverMinion/followers", + "following_url": "https://api.github.com/users/WolverMinion/following{/other_user}", + "gists_url": "https://api.github.com/users/WolverMinion/gists{/gist_id}", + "starred_url": "https://api.github.com/users/WolverMinion/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/WolverMinion/subscriptions", + "organizations_url": "https://api.github.com/users/WolverMinion/orgs", + "repos_url": "https://api.github.com/users/WolverMinion/repos", + "events_url": "https://api.github.com/users/WolverMinion/events{/privacy}", + "received_events_url": "https://api.github.com/users/WolverMinion/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "km2018", + "id": 13594336, + "node_id": "MDQ6VXNlcjEzNTk0MzM2", + "avatar_url": "https://avatars.githubusercontent.com/u/13594336?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/km2018", + "html_url": "https://github.com/km2018", + "followers_url": "https://api.github.com/users/km2018/followers", + "following_url": "https://api.github.com/users/km2018/following{/other_user}", + "gists_url": "https://api.github.com/users/km2018/gists{/gist_id}", + "starred_url": "https://api.github.com/users/km2018/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/km2018/subscriptions", + "organizations_url": "https://api.github.com/users/km2018/orgs", + "repos_url": "https://api.github.com/users/km2018/repos", + "events_url": "https://api.github.com/users/km2018/events{/privacy}", + "received_events_url": "https://api.github.com/users/km2018/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "assignees": [ + { + "login": "km2018", + "id": 13594336, + "node_id": "MDQ6VXNlcjEzNTk0MzM2", + "avatar_url": "https://avatars.githubusercontent.com/u/13594336?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/km2018", + "html_url": "https://github.com/km2018", + "followers_url": "https://api.github.com/users/km2018/followers", + "following_url": "https://api.github.com/users/km2018/following{/other_user}", + "gists_url": "https://api.github.com/users/km2018/gists{/gist_id}", + "starred_url": "https://api.github.com/users/km2018/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/km2018/subscriptions", + "organizations_url": "https://api.github.com/users/km2018/orgs", + "repos_url": "https://api.github.com/users/km2018/repos", + "events_url": "https://api.github.com/users/km2018/events{/privacy}", + "received_events_url": "https://api.github.com/users/km2018/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + } + ], + "milestone": null, + "comments": 15, + "created_at": "2021-01-20T11:35:09Z", + "updated_at": "2021-12-09T15:10:44Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nI need a issue list from a project column. The implementation is in a jenkins shared library.\r\nIt's easy to use. Unfortunately I get an error.\r\nSee this Code. github-api is included as a dependency with version 1.122\r\n\r\n**To Reproduce**\r\n\r\n```groovy\r\nimport ....\r\nfinal GitHub github = GitHub.connectToEnterpriseWithOAuth('https://github.enterprise.com/api/v3', null, 'usertoken123')\r\nfinal GHProjectColumn projectColumn = github.getProjectColumn(12345)\r\nprojectColumn.listCards().each { projectCard ->\r\n echo \"\"\"\r\nProjectCard: ${projectCard}\r\nContentUrl: ${projectCard.getContentUrl()}\r\nContent: ${projectCard.getContent()}\r\n\"\"\"\r\n GHIssue issue = projectCard.getContent()\r\n // issue must not be null\r\n}\r\n```\r\nhttps://github.com/hub4j/github-api/blob/8e6dbf37724cd76096b339ea7399fd49d06b49cb/src/main/java/org/kohsuke/github/GHProjectCard.java#L120\r\n\r\n**Expected behavior**\r\n`projectCard.getContent()` return the existing issue object or a helpful error message.\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: unimportant\r\n - Browser unimportant\r\n - Version 1.122\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1024/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1024/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1292", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1292/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1292/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1292/events", + "html_url": "https://github.com/hub4j/github-api/issues/1292", + "id": 1049950516, + "node_id": "I_kwDOAAlq-s4-lPk0", + "number": 1292, + "title": "Can't find API for managing Secrets", + "user": { + "login": "yolch-yolchyan", + "id": 6720157, + "node_id": "MDQ6VXNlcjY3MjAxNTc=", + "avatar_url": "https://avatars.githubusercontent.com/u/6720157?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/yolch-yolchyan", + "html_url": "https://github.com/yolch-yolchyan", + "followers_url": "https://api.github.com/users/yolch-yolchyan/followers", + "following_url": "https://api.github.com/users/yolch-yolchyan/following{/other_user}", + "gists_url": "https://api.github.com/users/yolch-yolchyan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yolch-yolchyan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yolch-yolchyan/subscriptions", + "organizations_url": "https://api.github.com/users/yolch-yolchyan/orgs", + "repos_url": "https://api.github.com/users/yolch-yolchyan/repos", + "events_url": "https://api.github.com/users/yolch-yolchyan/events{/privacy}", + "received_events_url": "https://api.github.com/users/yolch-yolchyan/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2021-11-10T15:14:31Z", + "updated_at": "2021-12-07T09:20:31Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I was wondering if there is an API to manage GitHub repo secrets?\r\n`/repos/{owner}/{repo}/actions/secrets/{secret_name}`\r\n\r\nIf we have developed one, could you please point me out how to use it?", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1292/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1292/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1325", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1325/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1325/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1325/events", + "html_url": "https://github.com/hub4j/github-api/issues/1325", + "id": 1063300922, + "node_id": "I_kwDOAAlq-s4_YK86", + "number": 1325, + "title": "Accessing Gists via getMyself().listGists() returns null data for Gist files", + "user": { + "login": "EasyG0ing1", + "id": 10106834, + "node_id": "MDQ6VXNlcjEwMTA2ODM0", + "avatar_url": "https://avatars.githubusercontent.com/u/10106834?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/EasyG0ing1", + "html_url": "https://github.com/EasyG0ing1", + "followers_url": "https://api.github.com/users/EasyG0ing1/followers", + "following_url": "https://api.github.com/users/EasyG0ing1/following{/other_user}", + "gists_url": "https://api.github.com/users/EasyG0ing1/gists{/gist_id}", + "starred_url": "https://api.github.com/users/EasyG0ing1/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/EasyG0ing1/subscriptions", + "organizations_url": "https://api.github.com/users/EasyG0ing1/orgs", + "repos_url": "https://api.github.com/users/EasyG0ing1/repos", + "events_url": "https://api.github.com/users/EasyG0ing1/events{/privacy}", + "received_events_url": "https://api.github.com/users/EasyG0ing1/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2021-11-25T08:41:01Z", + "updated_at": "2021-12-07T09:19:17Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Once I authenticate to GitHub with a valid access token, but then attempt to pull the Map of Gists using this method:\r\n\r\n`gitHub.getMyself().listGists();`\r\n\r\nIt will give me a map of GHGist objects and their gistId's, but when I then use the GHGist object to pull the files out of Gist, the file data comes back null.\r\n\r\nEdit:\r\nHere is some test code with the output if it helps:\r\n\r\n```\r\nSystem.out.println(\"GistID's from GHGist objects:\");\r\n\tfor (GHGist ghGist : gitHub.getMyself().listGists().toList()) {\r\n\t\tSystem.out.println(\"\\t\"+ghGist.getGistId());\r\n\t}\r\n\r\nSystem.out.println(\"\\nFrom the same GHGist objects, here is the data that their GHGistFile objects contain:\\n\\nFilename: Content\");\r\n\tfor (GHGist ghGist : gitHub.getMyself().listGists().toList()) {\r\n\t\tfor(GHGistFile ghGistFile : ghGist.getFiles().values()) {\r\n\t\t\tSystem.out.print(\"\\t\"+ghGistFile.getFileName()+\": \");\r\n\t\t\tSystem.out.println(ghGistFile.getContent());\r\n\t\t}\r\n\t}\r\n```\r\n\r\nOutput:\r\n\r\n```\r\nGistID's from GHGist objects:\r\n\t9dc8a008611a40e94099b1c0b6863733\r\n\t342f5623cf3df3661f46ebf4ca2a2675\r\n\tc2f0e3c0e5db2d9ad4bcf330e07927fb\r\n\tb8f9336f40e578c3592050a239bfdeb4\r\n\tda95ba9977e6b41bbe4dd66091f90212\r\n\tee3699324888a1217615584e77e900ad\r\n\t420cdb2f098acfbfa1d16846851e9de4\r\n\t7902bc4639d0488a8f033b603072a842\r\n\t79203c3de770580d82d445de62d584f6\r\n\td8113d698853c46b5aef2de7ea786c80\r\n\t9338e8ceffa445b67258a19b9c9bce9e\r\n\ta46bde2c727b9cd786020d6ba1114d2b\r\n\tfadaf09355fa5d9dae4ca30515444d8a\r\n\t253537184cf23cfa4f16af4b04514fce\r\n\tfb8d3c4c262eefe2a49943839c8b5f1e\r\n\t125a9b33b989d003db4fcf11c4809246\r\n\t313f42ddb1a6cecf2be8d2652aa955e2\r\n\tf90e14487c49ef58bc79696e25dcfbd7\r\n\r\nFrom the same GHGist objects, here is the data that their GHGistFile objects contain:\r\n\r\nFilename: Content\r\n\tFile.java: null\r\n\tTestFile.cpp: null\r\n\tTestFile.java: null\r\n\tnewGistFile.java: null\r\n\tSerialzedObjectToBlob.java: null\r\n\tTextFieldConstraints.java: null\r\n\tRun.java: null\r\n\tButton.css: null\r\n\tStringPatterns2.java: null\r\n\tRangeMap.java: null\r\n\tthemeDetector.java: null\r\n\tATestForAnother.java: null\r\n\tClassSerializationFileIO.java: null\r\n\tDisk.java: null\r\n\tFileChecksum.java: null\r\n\tFileWalker.java: null\r\n\tSampleNew.java: null\r\n\tdb.java: null\r\n\tpom.xml: null\r\n\tBegin.java: null\r\n\tCSSBoxStyles.java: null\r\n\tshadow-styles.css: null\r\n\tListOrganizer.java: null\r\n\tOffScreenOffThreadCharts.java: null\r\n\tpackage.sh: null\r\n\tGOGOGadget.css: null\r\n\tGitMeOuttaHere.java: null\r\n\tSomethingDifferent.cpp: null\r\n\tStringBuilder.java: null\r\n\tC.java: null\r\n\tRouter.txt: null\r\n\tSwitchA.text: null\r\n\tSwitchB: null\r\n\tSwitchC.txt: null\r\n\r\n```\r\n\r\nYou can see that the File objects contain the name of the file, but not the content of the file.\r\n\r\nThank you,\r\n\r\nMike", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1325/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1325/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1191", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1191/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1191/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1191/events", + "html_url": "https://github.com/hub4j/github-api/issues/1191", + "id": 932007585, + "node_id": "MDU6SXNzdWU5MzIwMDc1ODU=", + "number": 1191, + "title": "Fix GHContentUpdatedResponse to return GitCommit instead of GHCommit", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2021-06-28T21:24:35Z", + "updated_at": "2021-11-29T17:58:59Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "In #1185, @takezoe discovered that the date returned for `GHContentUpdatedResponse.commit` does not match up with `GHCommit`. It most closely matches `GHCommit.ShortInfo` but even that is not truly accurate. \r\n\r\nIn #1190 , I figured out that while this a bad the functionality is not completely broken. The `sha` and the `url` match up and that is enough for the `GHCommit` to populate the missing data and continue on. This is still not great because it results in additional requests where there probably shouldn't be any. \r\n\r\n After a bit of digging in the docs, I found an endpoint that [gets a Git Commit](https://docs.github.com/en/rest/reference/git#get-a-commit). What we should do is create a new class called `GitCommit` , matching the structure of this endpoint and then have other classes like `GHCommit.ShortInfo` extend that class. \r\n\r\nFixing this will involve creating a bridge method for `getCommit()` that continues to return a working `GHCommit` while the new official API method returns a `GitCommit`. As part of this, we'll need to add a reflection based call to the `GHCommit`-returning method and verify that instance still works.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1191/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1191/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1327", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1327/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1327/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1327/events", + "html_url": "https://github.com/hub4j/github-api/issues/1327", + "id": 1065124046, + "node_id": "I_kwDOAAlq-s4_fIDO", + "number": 1327, + "title": "Update Issue and PR templates to be generated from forms", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2021-11-27T20:18:54Z", + "updated_at": "2021-11-27T20:19:02Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Help contributors follow submission guidelines for issue and pull requests in this project by making custom forms for default PR and bug report. \r\nhttps://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1327/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1327/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1320", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1320/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1320/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1320/events", + "html_url": "https://github.com/hub4j/github-api/issues/1320", + "id": 1061515819, + "node_id": "I_kwDOAAlq-s4_RXIr", + "number": 1320, + "title": "Rename `GHDiscussion` to `GHTeamDiscussion`", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2021-11-23T16:59:53Z", + "updated_at": "2021-11-23T17:02:44Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1320/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1320/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1265", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1265/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1265/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1265/events", + "html_url": "https://github.com/hub4j/github-api/issues/1265", + "id": 1027642217, + "node_id": "I_kwDOAAlq-s49QJNp", + "number": 1265, + "title": "GHWorkflow.dispatch does not throw an exception on a 422 HTTP status", + "user": { + "login": "Typraeurion", + "id": 36168707, + "node_id": "MDQ6VXNlcjM2MTY4NzA3", + "avatar_url": "https://avatars.githubusercontent.com/u/36168707?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Typraeurion", + "html_url": "https://github.com/Typraeurion", + "followers_url": "https://api.github.com/users/Typraeurion/followers", + "following_url": "https://api.github.com/users/Typraeurion/following{/other_user}", + "gists_url": "https://api.github.com/users/Typraeurion/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Typraeurion/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Typraeurion/subscriptions", + "organizations_url": "https://api.github.com/users/Typraeurion/orgs", + "repos_url": "https://api.github.com/users/Typraeurion/repos", + "events_url": "https://api.github.com/users/Typraeurion/events{/privacy}", + "received_events_url": "https://api.github.com/users/Typraeurion/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2021-10-15T17:16:10Z", + "updated_at": "2021-11-22T01:31:00Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nI’ve been tracing the code to see why my application apparently succeeds in sending a workflow dispatch request yet the workflow never starts. Eventually I found that after sending a POST request to /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches (no body, because I had passed `null` as the ref), GitHub responds with error 422 Unprocessable Entity. GitHubClient isn’t throwing an exception for this code; instead, the GitHubClient.sendRequest method returns a GitHubResponse,Requester.fetchHttpStatusCode returns 422, and GHWorkflow.dispatch ignores it, so my application thinks the request succeeded when it actually failed.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n```\r\n // authToken, organization, repository, and workflowId are set;\r\n // branch = null; inputs = Collections.emptyMap();\r\n\r\n GHWorkflow workflow = getConnection(authToken).getRepository(\r\n String.format(\"%s/%s\", organization, repository))\r\n .getWorkflow(workflowId);\r\n\r\n workflow.dispatch(branch, Optional.ofNullable(inputs)\r\n .orElse(Collections.emptyMap()));\r\n```\r\n\r\n**Expected behavior**\r\nThe method should either have thrown a GHIOException (or appropriate subclass for HTTP status 422), or should see that `branch` is null and throw an IllegalArgumentException.\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: MacOS 11.4\r\n - Java: 1.8.0_162\r\n - github-api Version: 1.133\r\n- okhttp Version: 4.9.2\r\n\r\n**Additional context**\r\nPer https://docs.github.com/en/rest/reference/actions#create-a-workflow-dispatch-event, a `ref` parameter in the request body is *required*.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1265/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1265/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1291", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1291/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1291/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1291/events", + "html_url": "https://github.com/hub4j/github-api/issues/1291", + "id": 1048007408, + "node_id": "I_kwDOAAlq-s4-d1Lw", + "number": 1291, + "title": "Consider relaxing the requirements for JavaDoc in the project", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2021-11-08T23:04:25Z", + "updated_at": "2021-11-08T23:05:00Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Per discussion with @nedtwigg in #1290 , it might make sense to turn down the warning/linting level for javadoc in the project. \r\n\r\n> I love when javadoc has example inputs/outputs (this project scores 10/10 there) but I'm annoyed by rigid compliance with a javadoc linter forcing that gold to get diluted with \"returns the value\" boilerplate. \r\n\r\nand \r\n\r\n> > Not great but compliant is still better than non-compliant.\r\n> \r\n> Why? I do a lot of work on Spotless, because I think formatting doesn't matter and I don't want to talk about formatting.\r\n> \r\n> When it comes to documentation, I think it does matter, and so it's worth talking about. Automated tools can't say `obviously getFoo() returns foo` vs `it's interesting that getFoo() returns a String guaranteed to start with 'git://'`. So whether or not the documentation adds information beyond what's already in the name and type signature of the method is a human judgement call (for now, copilot is coming for us!). IMO, automated enforcement of\r\n> \r\n> * does this documentation add information? -> return true, always document everything, users don't need to read the implementation\r\n> \r\n> isn't much better than\r\n> \r\n> * does this documentation add information? -> return false, never document anything, users need to read the implementation\r\n> \r\n> If you add `options.addStringOption('Xdoclint:none', '-quiet')` then it will still error for undefined `@link` and things like that, but it lets \"(to / not to) document\" be the judgement call that imo it should be.\r\n> \r\n> ``\r\n\r\nand\r\n\r\n> > could you open an issue for this\r\n> \r\n> I've thought a lot about this topic, and I don't have any more to add besides this:\r\n> \r\n> * Train a low-parameter neural net on the dataset `function name+signature -> javadoc` for your project.\r\n> * For each javadoc, diff the neural net's prediction against what the javadoc actually is\r\n> * Remove all the identical parts of the javadoc\r\n> \r\n> I don't plan to build this, but imo that's the way I would think about it. Happy documenting ;-)\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1291/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1291/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1279", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1279/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1279/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1279/events", + "html_url": "https://github.com/hub4j/github-api/issues/1279", + "id": 1041406594, + "node_id": "I_kwDOAAlq-s4-EpqC", + "number": 1279, + "title": "GHGist does not handle file truncation", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2021-11-01T17:19:36Z", + "updated_at": "2021-11-01T17:19:36Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "https://docs.github.com/en/rest/reference/gists#truncation points out that file contents are truncated after one megabyte. \r\nThis situation is not handled. \r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1279/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1279/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1266", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1266/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1266/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1266/events", + "html_url": "https://github.com/hub4j/github-api/issues/1266", + "id": 1031052781, + "node_id": "I_kwDOAAlq-s49dJ3t", + "number": 1266, + "title": "Create example for creating submodules within a repo", + "user": { + "login": "balajikadambi", + "id": 25296042, + "node_id": "MDQ6VXNlcjI1Mjk2MDQy", + "avatar_url": "https://avatars.githubusercontent.com/u/25296042?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/balajikadambi", + "html_url": "https://github.com/balajikadambi", + "followers_url": "https://api.github.com/users/balajikadambi/followers", + "following_url": "https://api.github.com/users/balajikadambi/following{/other_user}", + "gists_url": "https://api.github.com/users/balajikadambi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/balajikadambi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/balajikadambi/subscriptions", + "organizations_url": "https://api.github.com/users/balajikadambi/orgs", + "repos_url": "https://api.github.com/users/balajikadambi/repos", + "events_url": "https://api.github.com/users/balajikadambi/events{/privacy}", + "received_events_url": "https://api.github.com/users/balajikadambi/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + }, + { + "id": 2070644911, + "node_id": "MDU6TGFiZWwyMDcwNjQ0OTEx", + "url": "https://api.github.com/repos/hub4j/github-api/labels/documentation", + "name": "documentation", + "color": "6ee5cb", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2021-10-20T07:04:00Z", + "updated_at": "2021-10-21T16:48:01Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Is there an API to create sub modules within a repository? Any help to handle this programmatically is appreciated.\r\nThanks for your help!\r\n\r\nRegards,\r\nBalaji", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1266/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1266/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + } + ] +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/7-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/7-search_issues.json new file mode 100644 index 0000000000..394b503189 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/7-search_issues.json @@ -0,0 +1,2739 @@ +{ + "total_count": 164, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/833", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/833/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/833/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/833/events", + "html_url": "https://github.com/hub4j/github-api/issues/833", + "id": 626776927, + "node_id": "MDU6SXNzdWU2MjY3NzY5Mjc=", + "number": 833, + "title": "Stop using `getUrl()` for populate and refresh actions", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2020-05-28T20:00:43Z", + "updated_at": "2021-09-26T20:52:32Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The urls returned from github are often problematic and inaccurate. \r\n\r\nExample: \r\nThe url return `getRef()` returns a url with `git/refs` in it, even when the original query was to `git/ref`. \r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/833/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/833/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1217", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1217/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1217/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1217/events", + "html_url": "https://github.com/hub4j/github-api/issues/1217", + "id": 982693023, + "node_id": "MDU6SXNzdWU5ODI2OTMwMjM=", + "number": 1217, + "title": "Issues for tree in commit", + "user": { + "login": "Osiris-Team", + "id": 59899645, + "node_id": "MDQ6VXNlcjU5ODk5NjQ1", + "avatar_url": "https://avatars.githubusercontent.com/u/59899645?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Osiris-Team", + "html_url": "https://github.com/Osiris-Team", + "followers_url": "https://api.github.com/users/Osiris-Team/followers", + "following_url": "https://api.github.com/users/Osiris-Team/following{/other_user}", + "gists_url": "https://api.github.com/users/Osiris-Team/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Osiris-Team/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Osiris-Team/subscriptions", + "organizations_url": "https://api.github.com/users/Osiris-Team/orgs", + "repos_url": "https://api.github.com/users/Osiris-Team/repos", + "events_url": "https://api.github.com/users/Osiris-Team/events{/privacy}", + "received_events_url": "https://api.github.com/users/Osiris-Team/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + }, + { + "id": 2070644911, + "node_id": "MDU6TGFiZWwyMDcwNjQ0OTEx", + "url": "https://api.github.com/repos/hub4j/github-api/labels/documentation", + "name": "documentation", + "color": "6ee5cb", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2021-08-30T11:31:56Z", + "updated_at": "2021-09-24T06:40:37Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\n```log\r\nError: Exception in thread \"main\" org.kohsuke.github.HttpException: {\"message\":\"tree.path cannot start with a slash\",\"documentation_url\":\"https://docs.github.com/rest/reference/git#create-a-tree\"}\r\n\tat org.kohsuke.github.GitHubClient.interpretApiError(GitHubClient.java:483)\r\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:407)\r\n\tat org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:355)\r\n\tat org.kohsuke.github.Requester.fetch(Requester.java:76)\r\n\tat org.kohsuke.github.GHTreeBuilder.create(GHTreeBuilder.java:171)\r\n\tat com.osiris.pandomiumbuilder.STEP3.(STEP3.java:140)\r\n\tat com.osiris.pandomiumbuilder.Main.main(Main.java:49)\r\nCaused by: java.io.IOException: Server returned HTTP response code: 422 for URL: https://api.github.com/repos/Osiris-Team/pandomium/git/trees\r\n...\r\n```\r\n\r\n**To Reproduce**\r\n```java\r\n...\r\n System.out.println(\"Authenticating with token...\");\r\n GitHub github = new GitHubBuilder().withOAuthToken(O_AUTH_TOKEN).build();\r\n System.out.println(\"Success!\");\r\n System.out.println(\"Getting repo: '\"+OWNER_AND_REPO+\"'...\");\r\n repo = github.getRepository(OWNER_AND_REPO);\r\n System.out.println(\"Success!\");\r\n System.out.println(\"Committing updated files...\");\r\n GHRef mainRef = repo.getRef(\"heads/master\");\r\n String mainTreeSha = repo.getTreeRecursive(\"master\", 1).getSha();\r\n GHTreeBuilder treeBuilder = repo.createTree().baseTree(mainTreeSha);\r\n commitFile(treeBuilder, mavenInstallScript);\r\n commitFile(treeBuilder, pandomiumParentPomFile);\r\n commitFile(treeBuilder, pandomiumPomFile);\r\n for (File fatJar :\r\n fatJars) {\r\n commitFile(treeBuilder, fatJar);\r\n }\r\n String treeSha = treeBuilder.create().getSha(); // THIS IS LINE 140 WHERE THE EXCEPTION GETS THROWN\r\n GHCommit commit = repo.createCommit().message(\"Add files\")\r\n .tree(treeSha)\r\n .message(fullTagName+\" - Updated files\")\r\n .author(\"author\", \"pandomium@builder.com\", new Date())\r\n .committer(\"committer\", \"pandomium@builder.com\", new Date())\r\n .parent(mainRef.getObject().getSha())\r\n .create();\r\n String commitSha = commit.getSHA1();\r\n mainRef.updateTo(commitSha);\r\n System.out.println(\"Success!\");\r\n }\r\n\r\n private void commitFile(GHTreeBuilder treeBuilder, File file) throws IOException {\r\n treeBuilder.add(file.getAbsolutePath(), Files.readAllBytes(file.toPath()), false);\r\n }\r\n```\r\n\r\n**Expected behavior**\r\nCreate commit without exception and push it to the repo.\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: Windows\r\n - Browser Chrome\r\n - Version latest", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1217/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1217/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1181", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1181/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1181/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1181/events", + "html_url": "https://github.com/hub4j/github-api/issues/1181", + "id": 916818327, + "node_id": "MDU6SXNzdWU5MTY4MTgzMjc=", + "number": 1181, + "title": "Create a new implementation for issue events that aligns with webhook event design ", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2021-06-10T02:14:49Z", + "updated_at": "2021-07-26T19:19:51Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Found by #1175 \r\nRelated #1199 \r\n\r\nIssue events are similar to webhook events: there are a set of common attributes and then different events types have different additional fields.\r\n\r\nSee:\r\n* https://docs.github.com/en/developers/webhooks-and-events/events/issue-event-types#issue-event-object-common-properties\r\n* https://github.com/hub4j/github-api/blob/main/src/main/java/org/kohsuke/github/GHEventPayload.java#L22-L24\r\n\r\nHowever, `GHIssueEvent` is implemented completely differently from `GHEvent` and `GHEventPayload`. We should have a design that is similar instead. \r\n\r\nDoing this is likely either a breaking change or at very least an addition of a new API and deprecation of the current classes. \r\n\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1181/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1181/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/836", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/836/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/836/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/836/events", + "html_url": "https://github.com/hub4j/github-api/issues/836", + "id": 630834026, + "node_id": "MDU6SXNzdWU2MzA4MzQwMjY=", + "number": 836, + "title": "Enable adding labels if User has triage role", + "user": { + "login": "blacelle", + "id": 2117911, + "node_id": "MDQ6VXNlcjIxMTc5MTE=", + "avatar_url": "https://avatars.githubusercontent.com/u/2117911?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/blacelle", + "html_url": "https://github.com/blacelle", + "followers_url": "https://api.github.com/users/blacelle/followers", + "following_url": "https://api.github.com/users/blacelle/following{/other_user}", + "gists_url": "https://api.github.com/users/blacelle/gists{/gist_id}", + "starred_url": "https://api.github.com/users/blacelle/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/blacelle/subscriptions", + "organizations_url": "https://api.github.com/users/blacelle/orgs", + "repos_url": "https://api.github.com/users/blacelle/repos", + "events_url": "https://api.github.com/users/blacelle/events{/privacy}", + "received_events_url": "https://api.github.com/users/blacelle/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1686290078, + "node_id": "MDU6TGFiZWwxNjg2MjkwMDc4", + "url": "https://api.github.com/repos/hub4j/github-api/labels/external", + "name": "external", + "color": "a0a0a0", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 9, + "created_at": "2020-06-04T13:39:08Z", + "updated_at": "2021-07-21T15:47:43Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nGiven a user with Triage access, labels are not added when creating an issue.\r\n\r\n**To Reproduce**\r\n1. Give a user Triage access to a repo\r\n2. Create a Ticket with one label\r\n\r\nThe label is not applied.\r\n\r\n**Expected behavior**\r\nGiven Triage allow applying labels, I expect my label to be applied.\r\n\r\nhttps://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization\r\n\r\nIt appears I can add the labels once the issue is created\r\n\r\nConfirmed with 1.112\r\n\r\nTypically, in this usecase, I sucvcessfully apply with labels with something like:\r\n\r\n```\r\n\t\t\tGHIssue issue = building.create();\r\n\r\n\t\t\tlabels.forEach(t -> {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tissue.addLabels(t);\r\n\t\t\t\t} catch (IOException e) {\r\n\t\t\t\t\tthrow new UncheckedIOException(e);\r\n\t\t\t\t}\r\n\t\t\t});\r\n```\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/836/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/836/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/829", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/829/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/829/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/829/events", + "html_url": "https://github.com/hub4j/github-api/issues/829", + "id": 625251397, + "node_id": "MDU6SXNzdWU2MjUyNTEzOTc=", + "number": 829, + "title": "Documentation for create Branch and PR for new changes in branch", + "user": { + "login": "riddhi2910", + "id": 32148809, + "node_id": "MDQ6VXNlcjMyMTQ4ODA5", + "avatar_url": "https://avatars.githubusercontent.com/u/32148809?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/riddhi2910", + "html_url": "https://github.com/riddhi2910", + "followers_url": "https://api.github.com/users/riddhi2910/followers", + "following_url": "https://api.github.com/users/riddhi2910/following{/other_user}", + "gists_url": "https://api.github.com/users/riddhi2910/gists{/gist_id}", + "starred_url": "https://api.github.com/users/riddhi2910/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/riddhi2910/subscriptions", + "organizations_url": "https://api.github.com/users/riddhi2910/orgs", + "repos_url": "https://api.github.com/users/riddhi2910/repos", + "events_url": "https://api.github.com/users/riddhi2910/events{/privacy}", + "received_events_url": "https://api.github.com/users/riddhi2910/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 2070644911, + "node_id": "MDU6TGFiZWwyMDcwNjQ0OTEx", + "url": "https://api.github.com/repos/hub4j/github-api/labels/documentation", + "name": "documentation", + "color": "6ee5cb", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2020-05-26T22:56:14Z", + "updated_at": "2021-07-19T23:57:22Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hello,\r\n\r\nI don't see enough documentation on how to create branch and then pull requests for changes in that branch.\r\n\r\nCould you please help me with that?\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/829/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/829/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1133", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1133/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1133/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1133/events", + "html_url": "https://github.com/hub4j/github-api/issues/1133", + "id": 873785408, + "node_id": "MDU6SXNzdWU4NzM3ODU0MDg=", + "number": 1133, + "title": "Feature request - support for code scanning", + "user": { + "login": "SavvasKatsuyaSawada", + "id": 43150831, + "node_id": "MDQ6VXNlcjQzMTUwODMx", + "avatar_url": "https://avatars.githubusercontent.com/u/43150831?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SavvasKatsuyaSawada", + "html_url": "https://github.com/SavvasKatsuyaSawada", + "followers_url": "https://api.github.com/users/SavvasKatsuyaSawada/followers", + "following_url": "https://api.github.com/users/SavvasKatsuyaSawada/following{/other_user}", + "gists_url": "https://api.github.com/users/SavvasKatsuyaSawada/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SavvasKatsuyaSawada/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SavvasKatsuyaSawada/subscriptions", + "organizations_url": "https://api.github.com/users/SavvasKatsuyaSawada/orgs", + "repos_url": "https://api.github.com/users/SavvasKatsuyaSawada/repos", + "events_url": "https://api.github.com/users/SavvasKatsuyaSawada/events{/privacy}", + "received_events_url": "https://api.github.com/users/SavvasKatsuyaSawada/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "akashRindhe", + "id": 14114123, + "node_id": "MDQ6VXNlcjE0MTE0MTIz", + "avatar_url": "https://avatars.githubusercontent.com/u/14114123?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/akashRindhe", + "html_url": "https://github.com/akashRindhe", + "followers_url": "https://api.github.com/users/akashRindhe/followers", + "following_url": "https://api.github.com/users/akashRindhe/following{/other_user}", + "gists_url": "https://api.github.com/users/akashRindhe/gists{/gist_id}", + "starred_url": "https://api.github.com/users/akashRindhe/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/akashRindhe/subscriptions", + "organizations_url": "https://api.github.com/users/akashRindhe/orgs", + "repos_url": "https://api.github.com/users/akashRindhe/repos", + "events_url": "https://api.github.com/users/akashRindhe/events{/privacy}", + "received_events_url": "https://api.github.com/users/akashRindhe/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "assignees": [ + { + "login": "akashRindhe", + "id": 14114123, + "node_id": "MDQ6VXNlcjE0MTE0MTIz", + "avatar_url": "https://avatars.githubusercontent.com/u/14114123?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/akashRindhe", + "html_url": "https://github.com/akashRindhe", + "followers_url": "https://api.github.com/users/akashRindhe/followers", + "following_url": "https://api.github.com/users/akashRindhe/following{/other_user}", + "gists_url": "https://api.github.com/users/akashRindhe/gists{/gist_id}", + "starred_url": "https://api.github.com/users/akashRindhe/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/akashRindhe/subscriptions", + "organizations_url": "https://api.github.com/users/akashRindhe/orgs", + "repos_url": "https://api.github.com/users/akashRindhe/repos", + "events_url": "https://api.github.com/users/akashRindhe/events{/privacy}", + "received_events_url": "https://api.github.com/users/akashRindhe/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + } + ], + "milestone": null, + "comments": 2, + "created_at": "2021-05-01T22:45:04Z", + "updated_at": "2021-05-16T17:16:26Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Can you please correct me if I am wrong, but I cannot find implementation for access code scanning.\r\n\r\nI would love that the code scanning feature is supported in the library.\r\nhttps://docs.github.com/en/rest/reference/code-scanning\r\n\r\nI'm using: org.kohsuke:github-api:1.128", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1133/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1133/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1140", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1140/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1140/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1140/events", + "html_url": "https://github.com/hub4j/github-api/issues/1140", + "id": 881974654, + "node_id": "MDU6SXNzdWU4ODE5NzQ2NTQ=", + "number": 1140, + "title": "stargazercount is 0 unless fetched directly", + "user": { + "login": "maxandersen", + "id": 54129, + "node_id": "MDQ6VXNlcjU0MTI5", + "avatar_url": "https://avatars.githubusercontent.com/u/54129?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/maxandersen", + "html_url": "https://github.com/maxandersen", + "followers_url": "https://api.github.com/users/maxandersen/followers", + "following_url": "https://api.github.com/users/maxandersen/following{/other_user}", + "gists_url": "https://api.github.com/users/maxandersen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/maxandersen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/maxandersen/subscriptions", + "organizations_url": "https://api.github.com/users/maxandersen/orgs", + "repos_url": "https://api.github.com/users/maxandersen/repos", + "events_url": "https://api.github.com/users/maxandersen/events{/privacy}", + "received_events_url": "https://api.github.com/users/maxandersen/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2021-05-09T08:04:50Z", + "updated_at": "2021-05-12T03:47:13Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nUsing latest 1.128:\r\n\r\n`ghContent.getOwner().getStarGazersCount()` returns 0, but\r\n`gitHub.getRepository(ghContent.getOwner().getFullName()).getStargazersCount());` returns the proper count.\r\n\r\nProbably related to #349 and #1068 \r\n\r\n**Expected behavior**\r\nstargazer count should be fetched, throw error or return -1 or similar - anything but returning 0.\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1140/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1140/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1138", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1138/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1138/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1138/events", + "html_url": "https://github.com/hub4j/github-api/issues/1138", + "id": 880034392, + "node_id": "MDU6SXNzdWU4ODAwMzQzOTI=", + "number": 1138, + "title": "Add request information (endpoint or GraphQL query details) to all data objects", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + }, + { + "id": 1686292366, + "node_id": "MDU6TGFiZWwxNjg2MjkyMzY2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/more%20information%20needed", + "name": "more information needed", + "color": "9ce1ed", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2021-05-08T01:05:42Z", + "updated_at": "2021-05-09T00:41:11Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Different endpoints in the REST API return different subsets of various data types. `GHRepository` comes in any number of forms depending on what endpoint is returning it. When we implement GraphQL support this will be even more common: each query can return a different set of fields and relationships for each data type. \r\n\r\nIf we had information about the request that returned a particular record, it would be possible to predict whether a particular field has already been populated or if a refresh is needed to get that information. \r\n \r\n\r\nhttps://github.com/hub4j/github-api/pull/1136#issuecomment-834919797\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1138/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1138/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1098", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1098/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1098/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1098/events", + "html_url": "https://github.com/hub4j/github-api/issues/1098", + "id": 858301287, + "node_id": "MDU6SXNzdWU4NTgzMDEyODc=", + "number": 1098, + "title": "Implement better common behavior/handler for 202 responses ", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2021-04-14T22:07:09Z", + "updated_at": "2021-04-14T22:07:25Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "See #1095 . \r\n\r\n> We should probably implement a 202 handling behavior in GitHubClient. Currently, forking and statistics both implement their own waiting behavior. However, now that I look at it forking returns a GHRepository on success, so maybe the waiting behavior isn't correct.\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1098/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1098/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/875", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/875/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/875/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/875/events", + "html_url": "https://github.com/hub4j/github-api/issues/875", + "id": 649854895, + "node_id": "MDU6SXNzdWU2NDk4NTQ4OTU=", + "number": 875, + "title": "Add symlink support", + "user": { + "login": "jtnord", + "id": 494726, + "node_id": "MDQ6VXNlcjQ5NDcyNg==", + "avatar_url": "https://avatars.githubusercontent.com/u/494726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jtnord", + "html_url": "https://github.com/jtnord", + "followers_url": "https://api.github.com/users/jtnord/followers", + "following_url": "https://api.github.com/users/jtnord/following{/other_user}", + "gists_url": "https://api.github.com/users/jtnord/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jtnord/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jtnord/subscriptions", + "organizations_url": "https://api.github.com/users/jtnord/orgs", + "repos_url": "https://api.github.com/users/jtnord/repos", + "events_url": "https://api.github.com/users/jtnord/events{/privacy}", + "received_events_url": "https://api.github.com/users/jtnord/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 11, + "created_at": "2020-07-02T11:24:56Z", + "updated_at": "2021-03-23T08:22:37Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\n\r\nif a symlink exists in the repository it does not seem possible to resolve it using the current API methods\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. create a repo\r\n2. create a directory `dir`\r\n3. create a file `file` in `dir` with contents `hello world`\r\n4. create a symlink `dir-link` pointing to `dir`\r\n5. create a symlink `file-link` pointing to `dir/file`\r\n6. use the api to try and resolve `dir-link` or `file-link`\r\n\r\n**Expected behavior**\r\n\r\nThere is an API that can be used to resolve the symbolic links to the actual files\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: N/A\r\n - Browser N/A\r\n - Version N/A\r\n\r\n**Additional context**\r\n\r\nhttps://issues.jenkins-ci.org/browse/JENKINS-62922\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/875/reactions", + "total_count": 2, + "+1": 2, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/875/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1058", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1058/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1058/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1058/events", + "html_url": "https://github.com/hub4j/github-api/issues/1058", + "id": 832067018, + "node_id": "MDU6SXNzdWU4MzIwNjcwMTg=", + "number": 1058, + "title": "Refactor GHEventPayload inner classes into top level classes in a new namespace", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2021-03-15T18:11:18Z", + "updated_at": "2021-03-18T11:11:57Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "[GHEventPayload](https://github.com/hub4j/github-api/blob/master/src/main/java/org/kohsuke/github/GHEventPayload.java) is one monolithic class with a bunch of inner classes for payloads. We should look at refactoring these inner classes into their own files in a separate namespace.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1058/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1058/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/970", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/970/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/970/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/970/events", + "html_url": "https://github.com/hub4j/github-api/issues/970", + "id": 733050512, + "node_id": "MDU6SXNzdWU3MzMwNTA1MTI=", + "number": 970, + "title": "Document reading pages of items", + "user": { + "login": "eric-5512", + "id": 56282991, + "node_id": "MDQ6VXNlcjU2MjgyOTkx", + "avatar_url": "https://avatars.githubusercontent.com/u/56282991?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/eric-5512", + "html_url": "https://github.com/eric-5512", + "followers_url": "https://api.github.com/users/eric-5512/followers", + "following_url": "https://api.github.com/users/eric-5512/following{/other_user}", + "gists_url": "https://api.github.com/users/eric-5512/gists{/gist_id}", + "starred_url": "https://api.github.com/users/eric-5512/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/eric-5512/subscriptions", + "organizations_url": "https://api.github.com/users/eric-5512/orgs", + "repos_url": "https://api.github.com/users/eric-5512/repos", + "events_url": "https://api.github.com/users/eric-5512/events{/privacy}", + "received_events_url": "https://api.github.com/users/eric-5512/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 2070644911, + "node_id": "MDU6TGFiZWwyMDcwNjQ0OTEx", + "url": "https://api.github.com/repos/hub4j/github-api/labels/documentation", + "name": "documentation", + "color": "6ee5cb", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 8, + "created_at": "2020-10-30T10:14:06Z", + "updated_at": "2021-03-15T18:35:42Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Return open or closed issues in pagination\r\n\r\n```\r\npublic List getIssues(GHIssueState state) throws IOException {\r\n return this.listIssues(state).toList();\r\n }\r\n\r\n public List getIssues(GHIssueState state, GHMilestone milestone) throws IOException {\r\n Requester requester = (Requester)((Requester)this.root.createRequest().with(\"state\", state)).with(\"milestone\", milestone == null ? \"none\" : \"\" + milestone.getNumber());\r\n return ((Requester)requester.withUrlPath(this.getApiTailUrl(\"issues\"), new String[0])).toIterable(GHIssue[].class, (item) -> {\r\n item.wrap(this);\r\n }).toList();\r\n }\r\n```\r\n\r\nI didn’t see any support for paging\r\n\r\n![image](https://user-images.githubusercontent.com/56282991/97699344-ef06d480-1ae4-11eb-9257-651b209018b0.png)\r\n\r\nNeed to manually specify page and pre_page", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/970/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/970/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/902", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/902/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/902/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/902/events", + "html_url": "https://github.com/hub4j/github-api/issues/902", + "id": 666414517, + "node_id": "MDU6SXNzdWU2NjY0MTQ1MTc=", + "number": 902, + "title": "GithubRequest.with() methods should not silently ignore null values ", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-07-27T16:13:16Z", + "updated_at": "2021-02-11T20:06:07Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The `GithubRequest.with()` currently discard null values. Only `GithubRequest.withNullable()` keeps them. This is convenient sometimes but leaves things open for confusing issues with missing fields. Also, the presence of `withNullable()` implies (via Spotbugs annotations) that the `with()` methods require `Nonnull`. \r\n\r\nConsider adding a `withOptional()` that ignores `null` values and changing `with()` to not ignore `null` values. \r\n\r\nSee #899 \r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/902/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/902/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/929", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/929/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/929/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/929/events", + "html_url": "https://github.com/hub4j/github-api/issues/929", + "id": 680693157, + "node_id": "MDU6SXNzdWU2ODA2OTMxNTc=", + "number": 929, + "title": "Include Project card details into response when listing issue events", + "user": { + "login": "annguyen-qh", + "id": 20037026, + "node_id": "MDQ6VXNlcjIwMDM3MDI2", + "avatar_url": "https://avatars.githubusercontent.com/u/20037026?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/annguyen-qh", + "html_url": "https://github.com/annguyen-qh", + "followers_url": "https://api.github.com/users/annguyen-qh/followers", + "following_url": "https://api.github.com/users/annguyen-qh/following{/other_user}", + "gists_url": "https://api.github.com/users/annguyen-qh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/annguyen-qh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/annguyen-qh/subscriptions", + "organizations_url": "https://api.github.com/users/annguyen-qh/orgs", + "repos_url": "https://api.github.com/users/annguyen-qh/repos", + "events_url": "https://api.github.com/users/annguyen-qh/events{/privacy}", + "received_events_url": "https://api.github.com/users/annguyen-qh/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2020-08-18T05:04:44Z", + "updated_at": "2021-01-21T16:39:10Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "It would be great if the `GHIssueEvent` class could include Project card details. This information is valuable with project-related issue events\r\n\r\nThe relevant GitHub API endpoint is `GET /repos/:owner/:repo/issues/:issue_number/events` - https://developer.github.com/v3/issues/events/#list-issue-events\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/929/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/929/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1019", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1019/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1019/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1019/events", + "html_url": "https://github.com/hub4j/github-api/issues/1019", + "id": 784310675, + "node_id": "MDU6SXNzdWU3ODQzMTA2NzU=", + "number": 1019, + "title": "Unable to download asset from release in private repository", + "user": { + "login": "filipjonckers", + "id": 3816316, + "node_id": "MDQ6VXNlcjM4MTYzMTY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3816316?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/filipjonckers", + "html_url": "https://github.com/filipjonckers", + "followers_url": "https://api.github.com/users/filipjonckers/followers", + "following_url": "https://api.github.com/users/filipjonckers/following{/other_user}", + "gists_url": "https://api.github.com/users/filipjonckers/gists{/gist_id}", + "starred_url": "https://api.github.com/users/filipjonckers/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/filipjonckers/subscriptions", + "organizations_url": "https://api.github.com/users/filipjonckers/orgs", + "repos_url": "https://api.github.com/users/filipjonckers/repos", + "events_url": "https://api.github.com/users/filipjonckers/events{/privacy}", + "received_events_url": "https://api.github.com/users/filipjonckers/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2021-01-12T14:57:31Z", + "updated_at": "2021-01-12T20:06:05Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I'm trying to download assets from a private repository - the asset is a jar/zip file which is saved in the latest release.\r\nI'm able to connect and see the asset but cannot figure out how to download the asset into a local file using the existing GitHub connection.\r\nThe response I get when trying to download is: **HTTP/1.1 406 Not Acceptable**\r\nAs mentioned in the API documentation, the accept header is set to **application/octet-stream**\r\nI am probably doing something wring in the authentication part...\r\n\r\nHow should I tackle this?\r\n\r\nSource code of a test method:\r\n\r\n```java\r\n private void testGitHubReleaseAssetDownload(final String jwtToken, final String repoFullName) {\r\n try {\r\n GitHub githubBuilder = new GitHubBuilder().withJwtToken(jwtToken).build();\r\n GHAppInstallation appInstallation = githubBuilder.getApp().getInstallationById(GITHUB_APP_INSTALLATION_ID);\r\n GHAppInstallationToken appInstallationToken = appInstallation.createToken(appInstallation.getPermissions()).create();\r\n GitHub github = new GitHubBuilder().withAppInstallationToken(appInstallationToken.getToken()).build();\r\n LOGGER.info(\"Credentials are: {}\", github.isCredentialValid() ? \"valid\" : \"invalid\");\r\n\r\n GHRepository repo = github.getRepository(repoFullName);\r\n GHRelease release = repo.getLatestRelease();\r\n GHAsset asset = release.listAssets().toList().get(0);\r\n\r\n File file = new File(\".\", asset.getName());\r\n String downloadUrl = asset.getBrowserDownloadUrl();\r\n String githubToken = appInstallationToken.getToken();\r\n\r\n try (CloseableHttpClient httpClient = HttpClients.createDefault()) {\r\n HttpGet httpGet = new HttpGet(downloadUrl);\r\n httpGet.addHeader(\"authorization:\", \"token \" + githubToken);\r\n httpGet.addHeader(\"Accept:\", \"application/octet-stream\");\r\n try (CloseableHttpResponse httpResponse = httpClient.execute(httpGet)) {\r\n // response: HTTP/1.1 406 Not Acceptable\r\n if (httpResponse.getStatusLine().getStatusCode() == 200) {\r\n HttpEntity entity = httpResponse.getEntity();\r\n if(entity.getContentLength() > 0) {\r\n FileUtils.copyInputStreamToFile(entity.getContent(), file);\r\n }\r\n }\r\n }\r\n httpGet.releaseConnection();\r\n } catch (IOException e) {\r\n LOGGER.error(\"unable to download asset: {}\", downloadUrl);\r\n }\r\n } catch (Exception e) {\r\n LOGGER.error(\"ERROR: {}\", e.toString());\r\n }\r\n }\r\n```\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1019/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1019/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/789", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/789/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/789/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/789/events", + "html_url": "https://github.com/hub4j/github-api/issues/789", + "id": 601236800, + "node_id": "MDU6SXNzdWU2MDEyMzY4MDA=", + "number": 789, + "title": "Github is dropping support for HTTP basic auth", + "user": { + "login": "csdev", + "id": 1824428, + "node_id": "MDQ6VXNlcjE4MjQ0Mjg=", + "avatar_url": "https://avatars.githubusercontent.com/u/1824428?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/csdev", + "html_url": "https://github.com/csdev", + "followers_url": "https://api.github.com/users/csdev/followers", + "following_url": "https://api.github.com/users/csdev/following{/other_user}", + "gists_url": "https://api.github.com/users/csdev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/csdev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/csdev/subscriptions", + "organizations_url": "https://api.github.com/users/csdev/orgs", + "repos_url": "https://api.github.com/users/csdev/repos", + "events_url": "https://api.github.com/users/csdev/events{/privacy}", + "received_events_url": "https://api.github.com/users/csdev/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 17, + "created_at": "2020-04-16T16:41:55Z", + "updated_at": "2020-11-17T01:46:53Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Github is dropping support for basic auth on Nov 13, 2020 (with service brownouts on Sep 30 and Oct 28)\r\nhttps://developer.github.com/changes/2020-02-14-deprecating-password-auth/\r\n\r\nWe should make sure that we support using personal access tokens with the `Authorization: token` header. We may also want to issue deprecation warnings if users continue to use basic auth:\r\nhttps://github.com/github-api/github-api/blob/5c9474d1c891121f11ce9c31b51d42216a8e416f/src/main/java/org/kohsuke/github/GitHubClient.java#L119-L123", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/789/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/789/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/915", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/915/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/915/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/915/events", + "html_url": "https://github.com/hub4j/github-api/issues/915", + "id": 672648458, + "node_id": "MDU6SXNzdWU2NzI2NDg0NTg=", + "number": 915, + "title": "Unable to clone submodules", + "user": { + "login": "saptakniyogi", + "id": 13414332, + "node_id": "MDQ6VXNlcjEzNDE0MzMy", + "avatar_url": "https://avatars.githubusercontent.com/u/13414332?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/saptakniyogi", + "html_url": "https://github.com/saptakniyogi", + "followers_url": "https://api.github.com/users/saptakniyogi/followers", + "following_url": "https://api.github.com/users/saptakniyogi/following{/other_user}", + "gists_url": "https://api.github.com/users/saptakniyogi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/saptakniyogi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/saptakniyogi/subscriptions", + "organizations_url": "https://api.github.com/users/saptakniyogi/orgs", + "repos_url": "https://api.github.com/users/saptakniyogi/repos", + "events_url": "https://api.github.com/users/saptakniyogi/events{/privacy}", + "received_events_url": "https://api.github.com/users/saptakniyogi/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2020-08-04T09:29:28Z", + "updated_at": "2020-08-25T13:12:51Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nWhen Github organization scans for repos, it fails if the repo contains submodules with following error:\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `[Lorg.kohsuke.github.GHContent;` out of START_OBJECT token\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Scan Github Org with repos having sub-modules\r\n\r\n**Expected behavior**\r\nScan and clone the sub-modules\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: Windows Server 2016\r\n - Browser: Chrome\r\n - Version 1.115\r\n\r\n**Additional context**\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/915/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/915/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/903", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/903/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/903/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/903/events", + "html_url": "https://github.com/hub4j/github-api/issues/903", + "id": 666484469, + "node_id": "MDU6SXNzdWU2NjY0ODQ0Njk=", + "number": 903, + "title": "Consider using URI Templates instead of constructing url strings", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-07-27T18:07:44Z", + "updated_at": "2020-07-27T18:07:50Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Using URI Templates would make it clearer what parts of Requests are supposed to be in the URL and which should be passed as JSON. This would also simplify `GitHubRequest` and `GitHubClient`. \r\n\r\nOne example of a library that could be used: https://github.com/damnhandy/Handy-URI-Templates\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/903/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/903/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/763", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/763/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/763/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/763/events", + "html_url": "https://github.com/hub4j/github-api/issues/763", + "id": 591188016, + "node_id": "MDU6SXNzdWU1OTExODgwMTY=", + "number": 763, + "title": "Add and enforce copyright at the top of all code files", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2020-03-31T15:08:44Z", + "updated_at": "2020-07-17T20:08:43Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/763/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/763/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/881", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/881/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/881/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/881/events", + "html_url": "https://github.com/hub4j/github-api/issues/881", + "id": 652686003, + "node_id": "MDU6SXNzdWU2NTI2ODYwMDM=", + "number": 881, + "title": "Update to handle updated git references api ", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-07-07T22:10:07Z", + "updated_at": "2020-07-08T21:43:47Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Version 2.18 and older use this: \r\nhttps://docs.github.com/en/enterprise/2.18/user/rest/reference/git#get-all-references\r\n\r\nVersion 2.19 and new use this: \r\nhttps://docs.github.com/en/rest/reference/git#references\r\n\r\n\r\nSpecifically, getting references is now done using `git/matching-refs` instead of `git/refs`. \r\n\r\nSee #822, #842, #844, #845. Also see #852 for likely feature that needs to be added to make this safe. \r\n\r\nThat said 2.18 will be unsupported after August 2020. Perhaps the right behavior is to try default to the new API and have a switch to enable the old one. \r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/881/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/881/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/347", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/347/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/347/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/347/events", + "html_url": "https://github.com/hub4j/github-api/issues/347", + "id": 211134155, + "node_id": "MDU6SXNzdWUyMTExMzQxNTU=", + "number": 347, + "title": "Get fast issue/pull number from notifications", + "user": { + "login": "rnveach", + "id": 5427943, + "node_id": "MDQ6VXNlcjU0Mjc5NDM=", + "avatar_url": "https://avatars.githubusercontent.com/u/5427943?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rnveach", + "html_url": "https://github.com/rnveach", + "followers_url": "https://api.github.com/users/rnveach/followers", + "following_url": "https://api.github.com/users/rnveach/following{/other_user}", + "gists_url": "https://api.github.com/users/rnveach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rnveach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rnveach/subscriptions", + "organizations_url": "https://api.github.com/users/rnveach/orgs", + "repos_url": "https://api.github.com/users/rnveach/repos", + "events_url": "https://api.github.com/users/rnveach/events{/privacy}", + "received_events_url": "https://api.github.com/users/rnveach/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2017-03-01T16:28:19Z", + "updated_at": "2020-06-07T21:39:38Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The only way to get the issue/pull number from notifications is like below:\r\n````\r\n\t\tGitHub github = GitHub.connect();\r\n\r\n\t\tGHNotificationStream stream = github.listNotifications();\r\n\r\n\t\tfor (GHThread t : stream.nonBlocking(true).participating(false).read(true)) {\r\n\t\t\tSystem.out.println((t.getBoundIssue() != null ? t.getBoundIssue().getNumber() : \"\"));\r\n\t\t}\r\n````\r\n\r\nThe problem with this is `getBoundIssue` makes another service call just to get all the information on the issue. I just want the issue number for quick display which is already stored in the `subject.url` but I don't there is no public method to access it.\r\nI think it would be great if there was a simple method like `getIssueNumber` and `getPullNumber`.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/347/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/347/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/589", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/589/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/589/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/589/events", + "html_url": "https://github.com/hub4j/github-api/issues/589", + "id": 516256769, + "node_id": "MDU6SXNzdWU1MTYyNTY3Njk=", + "number": 589, + "title": "Final instances vs Incomplete instances vs Update-in-place", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2019-11-01T17:46:33Z", + "updated_at": "2020-06-07T20:56:37Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "#495 and #496 raise an interesting point. Also #584.\r\n\r\nThis project currently tends to treat instances of data objects as \"final\" - you request an Issue and the instance you requested never changes after that. That instance is a stable snapshot and can be used as a key in a HashSet or Map without fear of it changing. \r\n\r\nWe also have action and update methods on these objects. In general, these methods update the state of the server-side object the instance is based on, but do not change the data in the instance. You call `close()` or `delete()` or one of the `set*` methods and a request is sent to change the object on the server, but the data in the local instance doesn't update to match. This is consistent with the \"final instances\" model but has some problems. There's no batching of updates (each action is another query) and since the local instance is out of date, updates can end up overwriting each other as in #495. The only current workaround is send another request to get a fresh instance for each update. 😱 \r\n\r\nThe `Builder/Updater` pattern added to some objects addresses this by batching updates together and then returning a new instance matching those updates. This solves the problem of stale data but results in verbose `item.update().title('New Title').update()` syntax for single field changes. It does partially unblock update-in-place as `item = item.update().title('New Title').update()`. \r\n\r\nFinally, some objects can be incomplete when first created - either due to their source (partial information provided as part of creating another object) or due to the target only updating on request (pull request mergability is only updated after the first time PR is queried after a new commit is pushed). For these cases, we currently update in place. Do we want to force users to get new instances instead? \r\n\r\nThere's no one right way to do this, but we should look at how to make this behavior consistent across all objects. \r\n\r\nA couple random thought s off hand about this: \r\n* `set*` method naming is misleading - best practice in my understanding is to make `get*` and `set*` methods local and lightweight. Alternative would be to have `update*` methods that actually send updates to the server. \r\n* Create states for the objects and allow the parent objects and the `GitHub` object to create objects in those state. Rather than having updaters for objects, users would get a mutable instance. Possible states for data objects: immutable, immediate mutable, batch mutable. Not sure how the incomplete objects figure into this yet. \r\n\r\n\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/589/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/589/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/689", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/689/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/689/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/689/events", + "html_url": "https://github.com/hub4j/github-api/issues/689", + "id": 557302663, + "node_id": "MDU6SXNzdWU1NTczMDI2NjM=", + "number": 689, + "title": "Cache corruption fix from #669 not working on Windows", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1686290078, + "node_id": "MDU6TGFiZWwxNjg2MjkwMDc4", + "url": "https://api.github.com/repos/hub4j/github-api/labels/external", + "name": "external", + "color": "a0a0a0", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2020-01-30T06:58:51Z", + "updated_at": "2020-06-07T19:52:27Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The work around for #669 isn't working on Windows. It appears this may be a bug in Okhttp caching on windows, but it is unclear. https://github.com/github-api/github-api/commit/967512629821b706e8d06ef9b3e57061f397d073", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/689/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/689/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/835", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/835/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/835/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/835/events", + "html_url": "https://github.com/hub4j/github-api/issues/835", + "id": 630566215, + "node_id": "MDU6SXNzdWU2MzA1NjYyMTU=", + "number": 835, + "title": "Add option to take clean snapshots (instead of manual cleaning)", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-06-04T07:05:38Z", + "updated_at": "2020-06-06T06:44:33Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "One of the most common scenarios is needing to take a new snapshot for a test. \r\nInstead of making people file the right resources folder, we should make `github.test.takeSnapshot` default to snapshotting in a clean directory and then replacing the existing snapshot files. The current behavior could be moved to `github.test.takeMergedSnapshot` (or some similar name). \r\n\r\nOr allow that value of `github.test.takeSnapshot` to be `merge`? \r\n\r\nThe same should be done with `github.test.useProxy` - it would use only proxy files from a clean directory and we'd add a `github.test.useMergedProxy`. \r\n\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/835/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/835/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/727", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/727/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/727/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/727/events", + "html_url": "https://github.com/hub4j/github-api/issues/727", + "id": 575738080, + "node_id": "MDU6SXNzdWU1NzU3MzgwODA=", + "number": 727, + "title": "Consider removing @author javadoc, document policy", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + }, + { + "id": 2070644911, + "node_id": "MDU6TGFiZWwyMDcwNjQ0OTEx", + "url": "https://api.github.com/repos/hub4j/github-api/labels/documentation", + "name": "documentation", + "color": "6ee5cb", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2020-03-04T20:15:52Z", + "updated_at": "2020-05-21T19:55:37Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "I saw a number of projects making the choice to remove `@author` tags from their JavaDocs (https://github.com/checkstyle/checkstyle/issues/5738 for example). \r\n\r\nI thought it was a good choice - this is a collaborative project that has been going for years with over a hundred contributors and very few classes have only one contributor. \r\n\r\nI removed all the `@author` javadoc tags thinking this was not a controversial choice. I didn't even send it through PR. That was wrong to do. \r\n\r\n@PauloMigAlmeida asked that we bring them back and I realized that I had not given the change sufficient consideration. I reverted the change in https://github.com/github-api/github-api/commit/a42305dd59f0be426f0c9091748e947f60d76bcd so that we can discuss and do this right.\r\n\r\nPaulo, could you talk about reasons to keep them? Perhaps we can address your concerns with something other that this particular JavaDoc tag? ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/727/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/727/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/178", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/178/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/178/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/178/events", + "html_url": "https://github.com/hub4j/github-api/issues/178", + "id": 68225402, + "node_id": "MDU6SXNzdWU2ODIyNTQwMg==", + "number": 178, + "title": "getIssue() from GHPullRequest object", + "user": { + "login": "KostyaSha", + "id": 231611, + "node_id": "MDQ6VXNlcjIzMTYxMQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/231611?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/KostyaSha", + "html_url": "https://github.com/KostyaSha", + "followers_url": "https://api.github.com/users/KostyaSha/followers", + "following_url": "https://api.github.com/users/KostyaSha/following{/other_user}", + "gists_url": "https://api.github.com/users/KostyaSha/gists{/gist_id}", + "starred_url": "https://api.github.com/users/KostyaSha/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/KostyaSha/subscriptions", + "organizations_url": "https://api.github.com/users/KostyaSha/orgs", + "repos_url": "https://api.github.com/users/KostyaSha/repos", + "events_url": "https://api.github.com/users/KostyaSha/events{/privacy}", + "received_events_url": "https://api.github.com/users/KostyaSha/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2015-04-14T00:18:09Z", + "updated_at": "2020-05-21T00:33:01Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Could such method be added into PR object? Issue and PR content differs and it very inconvenient to do a call through parent like `pr.getRepository().getIssue(pr.getNumber())`\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/178/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/178/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/807", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/807/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/807/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/807/events", + "html_url": "https://github.com/hub4j/github-api/issues/807", + "id": 615125196, + "node_id": "MDU6SXNzdWU2MTUxMjUxOTY=", + "number": 807, + "title": "enterprise apiUrl", + "user": { + "login": "dimmonn", + "id": 6670698, + "node_id": "MDQ6VXNlcjY2NzA2OTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/6670698?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dimmonn", + "html_url": "https://github.com/dimmonn", + "followers_url": "https://api.github.com/users/dimmonn/followers", + "following_url": "https://api.github.com/users/dimmonn/following{/other_user}", + "gists_url": "https://api.github.com/users/dimmonn/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dimmonn/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dimmonn/subscriptions", + "organizations_url": "https://api.github.com/users/dimmonn/orgs", + "repos_url": "https://api.github.com/users/dimmonn/repos", + "events_url": "https://api.github.com/users/dimmonn/events{/privacy}", + "received_events_url": "https://api.github.com/users/dimmonn/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2020-05-09T08:39:12Z", + "updated_at": "2020-05-18T16:39:48Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "`org.kohsuke.github.GitHubBuilder#fromProperties()` as well as `org.kohsuke.github.GitHubBuilder#fromEnvironment()` doesn't support custom apiUrl", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/807/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/807/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/729", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/729/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/729/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/729/events", + "html_url": "https://github.com/hub4j/github-api/issues/729", + "id": 577305635, + "node_id": "MDU6SXNzdWU1NzczMDU2MzU=", + "number": 729, + "title": "NullPointerException when trying to read file-content because encoding is not set", + "user": { + "login": "centic9", + "id": 548322, + "node_id": "MDQ6VXNlcjU0ODMyMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/548322?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/centic9", + "html_url": "https://github.com/centic9", + "followers_url": "https://api.github.com/users/centic9/followers", + "following_url": "https://api.github.com/users/centic9/following{/other_user}", + "gists_url": "https://api.github.com/users/centic9/gists{/gist_id}", + "starred_url": "https://api.github.com/users/centic9/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/centic9/subscriptions", + "organizations_url": "https://api.github.com/users/centic9/orgs", + "repos_url": "https://api.github.com/users/centic9/repos", + "events_url": "https://api.github.com/users/centic9/events{/privacy}", + "received_events_url": "https://api.github.com/users/centic9/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2020-03-07T09:12:03Z", + "updated_at": "2020-04-21T03:31:46Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nThe test-case below triggers a NullPointerException because since some versions github-api expects \"encoding\" to be set in GHContent always, however it seems sometimes this is not set for some repositories.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Run the unit-test below\r\n2. It fails with NullPointerException\r\n\r\n```\r\n @Test\r\n public void testNullPointerException() throws IOException {\r\n GitHub github = GitHub.connect();\r\n\r\n final PagedSearchIterable list = github.searchContent().\r\n repo(\"Savyonify/cryptApiSet/\").\r\n filename(\"build.gradle\").list();\r\n\r\n for(GHContent match : list) {\r\n System.out.println(\"Reading \" + match.getHtmlUrl());\r\n try (final InputStream stream = match.read()) {\r\n assertNotNull(stream);\r\n }\r\n }\r\n }\r\n```\r\n\r\n**Expected behavior**\r\nI would expect to still be able to read those files.\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: Linux\r\n - Browser N/A\r\n - Version 1.95, 1.107, 1.108\r\n\r\n**Additional context**\r\nIt seems github now returns some files as part of search-results which are not existing any more, maybe we can handle these more gracefully?\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/729/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/729/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/748", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/748/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/748/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/748/events", + "html_url": "https://github.com/hub4j/github-api/issues/748", + "id": 583197683, + "node_id": "MDU6SXNzdWU1ODMxOTc2ODM=", + "number": 748, + "title": "GHRepository.getLastCommitStatus() reads all statuses to find last status", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-03-17T18:01:15Z", + "updated_at": "2020-04-16T18:54:08Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "\r\nhttps://github.com/github-api/github-api/blob/bccae94c7a740fa7ba297fd6eb2a6782ed156a98/src/main/java/org/kohsuke/github/GHRepository.java#L1771-L1774\r\n\r\nThis is fine for a few pages, but bad beyond three pages. \r\n\r\nThis points to a need for `last()`, `first()`, `count()`, and other methods to be added to `PagedIterable` or better `PagedIterator`. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/748/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/748/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/788", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/788/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/788/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/788/events", + "html_url": "https://github.com/hub4j/github-api/issues/788", + "id": 600914620, + "node_id": "MDU6SXNzdWU2MDA5MTQ2MjA=", + "number": 788, + "title": "Need support to get \"combined status for a specific ref\"", + "user": { + "login": "prabinB", + "id": 3772520, + "node_id": "MDQ6VXNlcjM3NzI1MjA=", + "avatar_url": "https://avatars.githubusercontent.com/u/3772520?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/prabinB", + "html_url": "https://github.com/prabinB", + "followers_url": "https://api.github.com/users/prabinB/followers", + "following_url": "https://api.github.com/users/prabinB/following{/other_user}", + "gists_url": "https://api.github.com/users/prabinB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/prabinB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/prabinB/subscriptions", + "organizations_url": "https://api.github.com/users/prabinB/orgs", + "repos_url": "https://api.github.com/users/prabinB/repos", + "events_url": "https://api.github.com/users/prabinB/events{/privacy}", + "received_events_url": "https://api.github.com/users/prabinB/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + }, + { + "id": 1991401619, + "node_id": "MDU6TGFiZWwxOTkxNDAxNjE5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/good%20first%20issue", + "name": "good first issue", + "color": "00FF00", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2020-04-16T10:07:27Z", + "updated_at": "2020-04-16T18:36:25Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Please refer to this githug api - https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref\r\n\r\nCurrently there in the library there is no good way to find the combined status of a ref. I believe support for this end point would be a good use case. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/788/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/788/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + } + ] +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/8-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/8-search_issues.json new file mode 100644 index 0000000000..21593c4e62 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/__files/8-search_issues.json @@ -0,0 +1,1218 @@ +{ + "total_count": 164, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/772", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/772/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/772/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/772/events", + "html_url": "https://github.com/hub4j/github-api/issues/772", + "id": 593634012, + "node_id": "MDU6SXNzdWU1OTM2MzQwMTI=", + "number": 772, + "title": "GHRepository.getFileContent should give helpful error message when misused", + "user": { + "login": "LorenzNickel", + "id": 29959150, + "node_id": "MDQ6VXNlcjI5OTU5MTUw", + "avatar_url": "https://avatars.githubusercontent.com/u/29959150?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/LorenzNickel", + "html_url": "https://github.com/LorenzNickel", + "followers_url": "https://api.github.com/users/LorenzNickel/followers", + "following_url": "https://api.github.com/users/LorenzNickel/following{/other_user}", + "gists_url": "https://api.github.com/users/LorenzNickel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/LorenzNickel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/LorenzNickel/subscriptions", + "organizations_url": "https://api.github.com/users/LorenzNickel/orgs", + "repos_url": "https://api.github.com/users/LorenzNickel/repos", + "events_url": "https://api.github.com/users/LorenzNickel/events{/privacy}", + "received_events_url": "https://api.github.com/users/LorenzNickel/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2020-04-03T20:51:52Z", + "updated_at": "2020-04-03T21:13:43Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "# Description\r\nWhen you misuse GHRepository.getFileContent a `com.fasterxml.jackson.databind.exc.MismatchedInputException` is thrown.\r\n\r\n## Reproduce\r\nCreate an authorized instance `Github github` (for example using `new GitHubBuilder().withOAuthToken(token).build();`)\r\n\r\nExecute this:\r\n`gitHub.getRepository(\"github-api/github-api\").getFileContent(\"\");`\r\n\r\nYou should get something like this:\r\n`org.kohsuke.github.HttpException: Server returned HTTP response code: 200, message: '200 OK' for URL: https://api.github.com/repos/github-api/github-api/contents/`\r\n...\r\n`Caused by: java.io.IOException: Failed to deserialize`\r\n...\r\n`Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of 'org.kohsuke.github.GHContent' out of START_ARRAY token\r\n at`\r\n...\r\n\r\n## Fix\r\nPlease throw a a proper exception or redesign your implementation to avoid such errors.\r\n\r\n---\r\n\r\nI'd be really happy if you could fix this, please keep up your great work!", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/772/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/772/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/766", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/766/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/766/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/766/events", + "html_url": "https://github.com/hub4j/github-api/issues/766", + "id": 591464899, + "node_id": "MDU6SXNzdWU1OTE0NjQ4OTk=", + "number": 766, + "title": "Replace `GHCreateRepositoryBuilder`", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-03-31T22:08:09Z", + "updated_at": "2020-03-31T22:08:09Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Rename `GHCreateRepositoryBuilder`to `GHRepositoryBuilder`, or perhaps even `GHRepository.Creator` ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/766/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/766/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/749", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/749/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/749/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/749/events", + "html_url": "https://github.com/hub4j/github-api/issues/749", + "id": 583217841, + "node_id": "MDU6SXNzdWU1ODMyMTc4NDE=", + "number": 749, + "title": "PagedSearchIterable relies on cached result", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-03-17T18:35:53Z", + "updated_at": "2020-03-17T19:43:17Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "The `populate()` method depends on `adapt()`. The Iterator created in `adapt()` loads a result, but never refreshes it: \r\nhttps://github.com/github-api/github-api/blob/bccae94c7a740fa7ba297fd6eb2a6782ed156a98/src/main/java/org/kohsuke/github/PagedSearchIterable.java#L91-L93\r\n\r\nThis means that the `getTotalCount()` can become out of sync from iterators or actual search results.\r\n\r\nhttps://github.com/github-api/github-api/blob/bccae94c7a740fa7ba297fd6eb2a6782ed156a98/src/main/java/org/kohsuke/github/PagedSearchIterable.java#L48-L50\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/749/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/749/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/445", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/445/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/445/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/445/events", + "html_url": "https://github.com/hub4j/github-api/issues/445", + "id": 338893171, + "node_id": "MDU6SXNzdWUzMzg4OTMxNzE=", + "number": 445, + "title": "No API for getting the createdAt and updatedAt for GHContent", + "user": { + "login": "umesh9794", + "id": 7439619, + "node_id": "MDQ6VXNlcjc0Mzk2MTk=", + "avatar_url": "https://avatars.githubusercontent.com/u/7439619?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/umesh9794", + "html_url": "https://github.com/umesh9794", + "followers_url": "https://api.github.com/users/umesh9794/followers", + "following_url": "https://api.github.com/users/umesh9794/following{/other_user}", + "gists_url": "https://api.github.com/users/umesh9794/gists{/gist_id}", + "starred_url": "https://api.github.com/users/umesh9794/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/umesh9794/subscriptions", + "organizations_url": "https://api.github.com/users/umesh9794/orgs", + "repos_url": "https://api.github.com/users/umesh9794/repos", + "events_url": "https://api.github.com/users/umesh9794/events{/privacy}", + "received_events_url": "https://api.github.com/users/umesh9794/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2018-07-06T10:45:18Z", + "updated_at": "2020-03-06T02:28:14Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "This is more like a feature request rether an issue. \r\n\r\n`GHContent` has no methods to expose the `createdAt` and `updatedAt` for a file content. I can understand its bit cumbersome to get these details but how about exposing the commit history from where we can get the first and latest commit timestamps? ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/445/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/445/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/599", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/599/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/599/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/599/events", + "html_url": "https://github.com/hub4j/github-api/issues/599", + "id": 519749895, + "node_id": "MDU6SXNzdWU1MTk3NDk4OTU=", + "number": 599, + "title": "Replace `wrapUp` and `wrap()` methods with `@JacksonInject`", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 2, + "created_at": "2019-11-08T04:59:33Z", + "updated_at": "2020-03-06T02:21:51Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "This is very much a code smells issue, not a user facing feature. \r\n\r\nThere's quite a bit of code and complexity devoted to added `root` references to objects after they are received. I've thought about various class structures to clean the up, but really the right thing to do seems to be using the `@JacksonInject` annotation. We'd add the `root` instance to the mapper when reading and let the injector handle the assignment. \r\n\r\nSee https://fasterxml.github.io/jackson-databind/javadoc/2.9/com/fasterxml/jackson/databind/ObjectMapper.html#reader-com.fasterxml.jackson.databind.InjectableValues-\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/599/reactions", + "total_count": 1, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/599/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/699", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/699/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/699/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/699/events", + "html_url": "https://github.com/hub4j/github-api/issues/699", + "id": 566052912, + "node_id": "MDU6SXNzdWU1NjYwNTI5MTI=", + "number": 699, + "title": "Remove any unneeded `with` methods from `Requester`", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-02-17T04:45:34Z", + "updated_at": "2020-02-23T03:17:33Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "From https://github.com/github-api/github-api/pull/697#discussion_r379932880\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/699/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/699/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/700", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/700/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/700/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/700/events", + "html_url": "https://github.com/hub4j/github-api/issues/700", + "id": 566056369, + "node_id": "MDU6SXNzdWU1NjYwNTYzNjk=", + "number": 700, + "title": "Finish moving all full URL setting to `setRawUrlPath` and change `withUrlPath` to not require starting `/`", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-02-17T04:58:21Z", + "updated_at": "2020-02-21T23:57:37Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "https://github.com/github-api/github-api/pull/697#discussion_r379982558\r\n\r\nThis will require looking at each call to `withUrlPath` to determine if it is passing a tail URL (starting with \"/\") or passing a full url (starting with `http`). \r\n\r\nOh, look here's one: \r\nhttps://github.com/github-api/github-api/blob/ff3136df7069d22d937daa8f2cddc357c777e07e/src/main/java/org/kohsuke/github/GHBranch.java#L104\r\n\r\nThere more in that class as well, but there are no tests for a number of those methods. \r\n\r\nSo, each case of this needs a test written to show it works and then change to use `setRawUrlPath`. Finally, when we should block `withUrlPath` from accepting full urls. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/700/reactions", + "total_count": 2, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 2, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/700/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/702", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/702/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/702/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/702/events", + "html_url": "https://github.com/hub4j/github-api/issues/702", + "id": 566517856, + "node_id": "MDU6SXNzdWU1NjY1MTc4NTY=", + "number": 702, + "title": "Rename `PagedIterable` and `PagedIterator` to `PageContentsIterable` and `PageContentsIterator`", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + }, + { + "id": 1780165359, + "node_id": "MDU6TGFiZWwxNzgwMTY1MzU5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/breaking%20change", + "name": "breaking change", + "color": "b60205", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-02-17T21:07:31Z", + "updated_at": "2020-02-17T21:09:48Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "This can be partially completed in a non-breaking way by moving the implementation to `PageContentsIterable` and having `PagedIterable` inherit from it. But ultimately it will require API changes. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/702/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/702/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/681", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/681/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/681/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/681/events", + "html_url": "https://github.com/hub4j/github-api/issues/681", + "id": 555087416, + "node_id": "MDU6SXNzdWU1NTUwODc0MTY=", + "number": 681, + "title": "GHPullRequest for more than one Repo", + "user": { + "login": "namanbada0606", + "id": 49596631, + "node_id": "MDQ6VXNlcjQ5NTk2NjMx", + "avatar_url": "https://avatars.githubusercontent.com/u/49596631?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/namanbada0606", + "html_url": "https://github.com/namanbada0606", + "followers_url": "https://api.github.com/users/namanbada0606/followers", + "following_url": "https://api.github.com/users/namanbada0606/following{/other_user}", + "gists_url": "https://api.github.com/users/namanbada0606/gists{/gist_id}", + "starred_url": "https://api.github.com/users/namanbada0606/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/namanbada0606/subscriptions", + "organizations_url": "https://api.github.com/users/namanbada0606/orgs", + "repos_url": "https://api.github.com/users/namanbada0606/repos", + "events_url": "https://api.github.com/users/namanbada0606/events{/privacy}", + "received_events_url": "https://api.github.com/users/namanbada0606/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2020-01-25T13:47:20Z", + "updated_at": "2020-01-28T20:48:40Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "**Describe the bug**\r\nFirstly wanted to say BIG THANK YOU for this great library, it's really my team a big way. \r\n\r\nContext:\r\nClass GHPullRequest currently handles for one repo to pull PR, how do I leverage the same for more than one repo? Is this a currently limited to ONE ? \r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n\r\nclone https://github.com/sebkur/github-cli\r\n\r\n./gradlew clean create\r\n\r\n./scripts/hubcli list-pull-requests \r\n\r\n\r\n\r\n**Expected behavior**\r\nWe should require more than one repo\r\n\r\n**Desktop (please complete the following information):**\r\n - OS: MAC\r\n - Browser CHROME\r\n - Version 73\r\n\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/681/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/681/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/668", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/668/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/668/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/668/events", + "html_url": "https://github.com/hub4j/github-api/issues/668", + "id": 551035485, + "node_id": "MDU6SXNzdWU1NTEwMzU0ODU=", + "number": 668, + "title": "Check performance and behavior of ReflectionToStringBuilder ", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1664647346, + "node_id": "MDU6TGFiZWwxNjY0NjQ3MzQ2", + "url": "https://api.github.com/repos/hub4j/github-api/labels/task", + "name": "task", + "color": "bfdadc", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2020-01-16T20:26:10Z", + "updated_at": "2020-01-16T20:26:10Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/668/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/668/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/632", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/632/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/632/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/632/events", + "html_url": "https://github.com/hub4j/github-api/issues/632", + "id": 532081873, + "node_id": "MDU6SXNzdWU1MzIwODE4NzM=", + "number": 632, + "title": "Branch Protection Pattern", + "user": { + "login": "inidona", + "id": 2903923, + "node_id": "MDQ6VXNlcjI5MDM5MjM=", + "avatar_url": "https://avatars.githubusercontent.com/u/2903923?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/inidona", + "html_url": "https://github.com/inidona", + "followers_url": "https://api.github.com/users/inidona/followers", + "following_url": "https://api.github.com/users/inidona/following{/other_user}", + "gists_url": "https://api.github.com/users/inidona/gists{/gist_id}", + "starred_url": "https://api.github.com/users/inidona/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/inidona/subscriptions", + "organizations_url": "https://api.github.com/users/inidona/orgs", + "repos_url": "https://api.github.com/users/inidona/repos", + "events_url": "https://api.github.com/users/inidona/events{/privacy}", + "received_events_url": "https://api.github.com/users/inidona/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2019-12-03T15:51:10Z", + "updated_at": "2019-12-03T16:05:47Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "In GitHub UI i can create an Branch Protection with an Pattern.\r\nSo the branches not exists in this moment in the repo and will be protected after it created.\r\n\r\ni studied your api but found only the protection of real existing branches.\r\n\r\ni am right, and if is it possible to enhance the api ? Mayby with an String contructor in GHBranchProtectionBuilder ?\r\n\r\nthanks\r\nandreas", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/632/reactions", + "total_count": 2, + "+1": 2, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/632/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/495", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/495/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/495/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/495/events", + "html_url": "https://github.com/hub4j/github-api/issues/495", + "id": 409299090, + "node_id": "MDU6SXNzdWU0MDkyOTkwOTA=", + "number": 495, + "title": "Unable to replace a label in an issue because GHIssue.labels list is not updated", + "user": { + "login": "rmetzger", + "id": 89049, + "node_id": "MDQ6VXNlcjg5MDQ5", + "avatar_url": "https://avatars.githubusercontent.com/u/89049?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rmetzger", + "html_url": "https://github.com/rmetzger", + "followers_url": "https://api.github.com/users/rmetzger/followers", + "following_url": "https://api.github.com/users/rmetzger/following{/other_user}", + "gists_url": "https://api.github.com/users/rmetzger/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rmetzger/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rmetzger/subscriptions", + "organizations_url": "https://api.github.com/users/rmetzger/orgs", + "repos_url": "https://api.github.com/users/rmetzger/repos", + "events_url": "https://api.github.com/users/rmetzger/events{/privacy}", + "received_events_url": "https://api.github.com/users/rmetzger/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + }, + { + "id": 265902955, + "node_id": "MDU6TGFiZWwyNjU5MDI5NTU=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/new%20feature", + "name": "new feature", + "color": "f4cc53", + "default": false, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2019-02-12T13:31:27Z", + "updated_at": "2019-11-07T23:17:02Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Consider the following code:\r\n\r\n```java\r\nGHRepository repo = gitHub.getRepository(\"myacc/myrepo\");\r\nGHIssue issue = repo.getIssue(4);\r\n// assume \"test\" exists\r\nissue.removeLabels(\"test\");\r\nissue.addLabels(\"test1\");\r\n```\r\n\r\nExpected result: Issue `#4` has one label: `test1`\r\nActual result: Issue `#4` has two labels: `test`, `test1`\r\n\r\nCause:\r\nIn `GHIssue`, the `labels` field is not updated when the `setLabels(String... labels)` method is called. `addLabels(\"test1\")` calls `getLabels()` in `_addLabels()`, which returns the cached `GHIssue.list` field, still containing the `test` label.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/495/reactions", + "total_count": 2, + "+1": 2, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/495/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/440", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/440/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/440/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/440/events", + "html_url": "https://github.com/hub4j/github-api/issues/440", + "id": 330763806, + "node_id": "MDU6SXNzdWUzMzA3NjM4MDY=", + "number": 440, + "title": "Unable to add user as contributor in organization repository", + "user": { + "login": "ncoop57", + "id": 7613470, + "node_id": "MDQ6VXNlcjc2MTM0NzA=", + "avatar_url": "https://avatars.githubusercontent.com/u/7613470?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ncoop57", + "html_url": "https://github.com/ncoop57", + "followers_url": "https://api.github.com/users/ncoop57/followers", + "following_url": "https://api.github.com/users/ncoop57/following{/other_user}", + "gists_url": "https://api.github.com/users/ncoop57/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ncoop57/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ncoop57/subscriptions", + "organizations_url": "https://api.github.com/users/ncoop57/orgs", + "repos_url": "https://api.github.com/users/ncoop57/repos", + "events_url": "https://api.github.com/users/ncoop57/events{/privacy}", + "received_events_url": "https://api.github.com/users/ncoop57/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 265902919, + "node_id": "MDU6TGFiZWwyNjU5MDI5MTk=", + "url": "https://api.github.com/repos/hub4j/github-api/labels/bug", + "name": "bug", + "color": "e11d21", + "default": true, + "description": null + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2018-06-08T18:43:54Z", + "updated_at": "2019-11-07T23:00:54Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Hi, I asked a question like this on stack overflow which you can find [here](https://stackoverflow.com/questions/50633315/how-do-you-add-outside-collaborators-to-repositories-in-your-organization-using), but had no luck with anyone answering it, so, I thought I'd bring my question here.\r\n\r\nI am trying to add a special user to all repositories in an organization automatically as a contributor, not a team. It must be a contributor because I have a separate program that automatically accepts repository invites but does not work with team invites so I need a solution that does it as a contributor not a team. When I attempt this with the following code:\r\n\r\n`GHCreateRepositoryBuilder builder = this.organization.createRepository(this.prefix + i);\r\nGHRepository repo = builder.create();\r\nrepo.addCollaborators(github.getUser(\"vcdep\"));\r\nrepositories.add(repo);`\r\n\r\nI get the following error:\r\n\r\n`Caused by: java.io.IOException: Operation not applicable to a repository owned by someone else: TestOrganizationForDevOps\r\nat org.kohsuke.github.GHRepository.verifyMine(GHRepository.java:1097)\r\nat org.kohsuke.github.GHRepository.modifyCollaborators(GHRepository.java:507)\r\nat org.kohsuke.github.GHRepository.addCollaborators(GHRepository.java:495)\r\nat org.kohsuke.github.GHRepository.addCollaborators(GHRepository.java:491)\r\nat wizard.GitHubController.createRepos(GitHubController.java:94)\r\nat wizard.Controller.onButtonClickedFinish(Controller.java:260)\r\n... 58 more`\r\n\r\nI am using a personal token which has all of the permissions given to it and I am using the account which owns and created the organization along with the repositories, however, I am still getting that error. I even tried adding the user as a member to the organization, but even that didn't work.\r\n\r\nI guess what I am really wondering is if this is expected behavior or if there is something I am missing and if so what is the solution.\r\n\r\nThank you for your time and consideration.", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/440/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/440/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/577", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/577/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/577/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/577/events", + "html_url": "https://github.com/hub4j/github-api/issues/577", + "id": 513638744, + "node_id": "MDU6SXNzdWU1MTM2Mzg3NDQ=", + "number": 577, + "title": "Add getById() method to PagedIterable", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1662551322, + "node_id": "MDU6TGFiZWwxNjYyNTUxMzIy", + "url": "https://api.github.com/repos/hub4j/github-api/labels/enhancement", + "name": "enhancement", + "color": "0e8a16", + "default": true, + "description": "" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2019-10-29T01:16:40Z", + "updated_at": "2019-11-07T22:48:43Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "There are a large number cases where an iterable API endpoint also offers query options for the same url or adding an id to the end of the URL to get an individual (see Collaborators - #576). It seems like it would be better to have a consistent way of accessing this kind of endpoint when it exists. ", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/577/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/577/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + } + ] +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/1-user.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/1-user.json new file mode 100644 index 0000000000..4421d0aed2 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/1-user.json @@ -0,0 +1,48 @@ +{ + "id": "00e67418-a035-401d-b3d3-457fc73ffd0c", + "name": "user", + "request": { + "url": "/user", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "1-user.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:36:34 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"15d7e1ad92a3639b979fc55254902e63ee0bfa5c8f6766990bf989044d491ce1\"", + "Last-Modified": "Sat, 24 Jan 2026 22:07:12 GMT", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4976", + "X-RateLimit-Reset": "1769372833", + "X-RateLimit-Used": "24", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "F6F4:EDA44:64803E0:55D240F:697670C1" + } + }, + "uuid": "00e67418-a035-401d-b3d3-457fc73ffd0c", + "persistent": true, + "insertionIndex": 1 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/2-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/2-search_issues.json new file mode 100644 index 0000000000..7709503660 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/2-search_issues.json @@ -0,0 +1,50 @@ +{ + "id": "09a5cfec-10dd-450e-bc93-7733e3901b45", + "name": "search_issues", + "request": { + "url": "/search/issues?sort=updated&q=repo%3Ahub4j%2Fgithub-api+is%3Aissue+is%3Aopen", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "2-search_issues.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:36:35 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "no-cache", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "X-RateLimit-Limit": "30", + "X-RateLimit-Remaining": "29", + "X-RateLimit-Reset": "1769369855", + "X-RateLimit-Used": "1", + "X-RateLimit-Resource": "search", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-GitHub-Request-Id": "F6F6:1DC7F0:634116F:547C64E:697670C2", + "Link": "; rel=\"next\", ; rel=\"last\"" + } + }, + "uuid": "09a5cfec-10dd-450e-bc93-7733e3901b45", + "persistent": true, + "scenarioName": "scenario-1-search-issues", + "requiredScenarioState": "Started", + "newScenarioState": "scenario-1-search-issues-2", + "insertionIndex": 2 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/3-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/3-search_issues.json new file mode 100644 index 0000000000..9424b7c0b2 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/3-search_issues.json @@ -0,0 +1,49 @@ +{ + "id": "d4bbc619-a33f-41de-8d54-006f338708b3", + "name": "search_issues", + "request": { + "url": "/search/issues?sort=updated&q=repo%3Ahub4j%2Fgithub-api+is%3Aissue+is%3Aopen", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "3-search_issues.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:36:35 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "no-cache", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "X-RateLimit-Limit": "30", + "X-RateLimit-Remaining": "28", + "X-RateLimit-Reset": "1769369855", + "X-RateLimit-Used": "2", + "X-RateLimit-Resource": "search", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-GitHub-Request-Id": "F6F7:46DF2:72F8216:643EB99:697670C3", + "Link": "; rel=\"next\", ; rel=\"last\"" + } + }, + "uuid": "d4bbc619-a33f-41de-8d54-006f338708b3", + "persistent": true, + "scenarioName": "scenario-1-search-issues", + "requiredScenarioState": "scenario-1-search-issues-2", + "insertionIndex": 3 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/4-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/4-search_issues.json new file mode 100644 index 0000000000..8daf131dca --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/4-search_issues.json @@ -0,0 +1,47 @@ +{ + "id": "c077f6a2-96b2-4dcb-8bc6-b41912fcab66", + "name": "search_issues", + "request": { + "url": "/search/issues?sort=updated&q=repo%3Ahub4j%2Fgithub-api+is%3Aissue+is%3Aopen&page=2", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "4-search_issues.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:36:36 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "no-cache", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "X-RateLimit-Limit": "30", + "X-RateLimit-Remaining": "27", + "X-RateLimit-Reset": "1769369855", + "X-RateLimit-Used": "3", + "X-RateLimit-Resource": "search", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-GitHub-Request-Id": "F6F8:1EE296:6025D5B:51B5929:697670C4", + "Link": "; rel=\"prev\", ; rel=\"next\", ; rel=\"last\", ; rel=\"first\"" + } + }, + "uuid": "c077f6a2-96b2-4dcb-8bc6-b41912fcab66", + "persistent": true, + "insertionIndex": 4 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/5-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/5-search_issues.json new file mode 100644 index 0000000000..bf0fddb7d7 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/5-search_issues.json @@ -0,0 +1,47 @@ +{ + "id": "a96ac4a9-7011-42d8-ad31-8c9127180a1f", + "name": "search_issues", + "request": { + "url": "/search/issues?sort=updated&q=repo%3Ahub4j%2Fgithub-api+is%3Aissue+is%3Aopen&page=3", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "5-search_issues.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:36:37 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "no-cache", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "X-RateLimit-Limit": "30", + "X-RateLimit-Remaining": "26", + "X-RateLimit-Reset": "1769369855", + "X-RateLimit-Used": "4", + "X-RateLimit-Resource": "search", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-GitHub-Request-Id": "F6F9:46DF2:72F8B03:643F337:697670C5", + "Link": "; rel=\"prev\", ; rel=\"next\", ; rel=\"last\", ; rel=\"first\"" + } + }, + "uuid": "a96ac4a9-7011-42d8-ad31-8c9127180a1f", + "persistent": true, + "insertionIndex": 5 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/6-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/6-search_issues.json new file mode 100644 index 0000000000..499e2e3430 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/6-search_issues.json @@ -0,0 +1,47 @@ +{ + "id": "47d78700-be83-47c9-8fee-d2bbc1d4b878", + "name": "search_issues", + "request": { + "url": "/search/issues?sort=updated&q=repo%3Ahub4j%2Fgithub-api+is%3Aissue+is%3Aopen&page=4", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "6-search_issues.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:36:38 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "no-cache", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "X-RateLimit-Limit": "30", + "X-RateLimit-Remaining": "25", + "X-RateLimit-Reset": "1769369855", + "X-RateLimit-Used": "5", + "X-RateLimit-Resource": "search", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-GitHub-Request-Id": "F6FA:25DA4D:607698C:51F2ADF:697670C6", + "Link": "; rel=\"prev\", ; rel=\"next\", ; rel=\"last\", ; rel=\"first\"" + } + }, + "uuid": "47d78700-be83-47c9-8fee-d2bbc1d4b878", + "persistent": true, + "insertionIndex": 6 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/7-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/7-search_issues.json new file mode 100644 index 0000000000..3e2dbb362d --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/7-search_issues.json @@ -0,0 +1,47 @@ +{ + "id": "6fe37716-effc-487e-b7c1-44773e91935f", + "name": "search_issues", + "request": { + "url": "/search/issues?sort=updated&q=repo%3Ahub4j%2Fgithub-api+is%3Aissue+is%3Aopen&page=5", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "7-search_issues.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:36:39 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "no-cache", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "X-RateLimit-Limit": "30", + "X-RateLimit-Remaining": "24", + "X-RateLimit-Reset": "1769369855", + "X-RateLimit-Used": "6", + "X-RateLimit-Resource": "search", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-GitHub-Request-Id": "F6FC:11A506:6459E58:5584095:697670C6", + "Link": "; rel=\"prev\", ; rel=\"next\", ; rel=\"last\", ; rel=\"first\"" + } + }, + "uuid": "6fe37716-effc-487e-b7c1-44773e91935f", + "persistent": true, + "insertionIndex": 7 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/8-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/8-search_issues.json new file mode 100644 index 0000000000..ad9d210802 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchIssuesOnly/mappings/8-search_issues.json @@ -0,0 +1,47 @@ +{ + "id": "fde8ed37-9d69-4220-9377-deed5fbf3d11", + "name": "search_issues", + "request": { + "url": "/search/issues?sort=updated&q=repo%3Ahub4j%2Fgithub-api+is%3Aissue+is%3Aopen&page=6", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "8-search_issues.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:36:40 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "no-cache", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "X-RateLimit-Limit": "30", + "X-RateLimit-Remaining": "23", + "X-RateLimit-Reset": "1769369855", + "X-RateLimit-Used": "7", + "X-RateLimit-Resource": "search", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-GitHub-Request-Id": "F6FD:275471:6312BA7:544A3C3:697670C7", + "Link": "; rel=\"prev\", ; rel=\"first\"" + } + }, + "uuid": "fde8ed37-9d69-4220-9377-deed5fbf3d11", + "persistent": true, + "insertionIndex": 8 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/__files/1-user.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/__files/1-user.json new file mode 100644 index 0000000000..fbc5eae788 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/__files/1-user.json @@ -0,0 +1,36 @@ +{ + "login": "Anonycoders", + "id": 40047636, + "node_id": "MDQ6VXNlcjQwMDQ3NjM2", + "avatar_url": "https://avatars.githubusercontent.com/u/40047636?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Anonycoders", + "html_url": "https://github.com/Anonycoders", + "followers_url": "https://api.github.com/users/Anonycoders/followers", + "following_url": "https://api.github.com/users/Anonycoders/following{/other_user}", + "gists_url": "https://api.github.com/users/Anonycoders/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Anonycoders/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Anonycoders/subscriptions", + "organizations_url": "https://api.github.com/users/Anonycoders/orgs", + "repos_url": "https://api.github.com/users/Anonycoders/repos", + "events_url": "https://api.github.com/users/Anonycoders/events{/privacy}", + "received_events_url": "https://api.github.com/users/Anonycoders/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false, + "name": "Sorena Sarabadani", + "company": "@Adevinta", + "blog": "", + "location": "Berlin, Germany", + "email": "sorena.sarabadani@gmail.com", + "hireable": null, + "bio": "Ex-Shopifyer - Adevinta/Kleinanzeigen", + "twitter_username": "sorena_s", + "notification_email": "sorena.sarabadani@gmail.com", + "public_repos": 12, + "public_gists": 0, + "followers": 38, + "following": 4, + "created_at": "2018-06-08T02:07:15Z", + "updated_at": "2026-01-24T22:07:12Z" +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/__files/2-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/__files/2-search_issues.json new file mode 100644 index 0000000000..63a6d51e2d --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/__files/2-search_issues.json @@ -0,0 +1,1239 @@ +{ + "total_count": 16, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2185", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2185/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2185/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2185/events", + "html_url": "https://github.com/hub4j/github-api/pull/2185", + "id": 3853746359, + "node_id": "PR_kwDOAAlq-s6_QWo_", + "number": 2185, + "title": "feat: paginated gh pull request query builder", + "user": { + "login": "Anonycoders", + "id": 40047636, + "node_id": "MDQ6VXNlcjQwMDQ3NjM2", + "avatar_url": "https://avatars.githubusercontent.com/u/40047636?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Anonycoders", + "html_url": "https://github.com/Anonycoders", + "followers_url": "https://api.github.com/users/Anonycoders/followers", + "following_url": "https://api.github.com/users/Anonycoders/following{/other_user}", + "gists_url": "https://api.github.com/users/Anonycoders/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Anonycoders/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Anonycoders/subscriptions", + "organizations_url": "https://api.github.com/users/Anonycoders/orgs", + "repos_url": "https://api.github.com/users/Anonycoders/repos", + "events_url": "https://api.github.com/users/Anonycoders/events{/privacy}", + "received_events_url": "https://api.github.com/users/Anonycoders/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2026-01-25T19:29:46Z", + "updated_at": "2026-01-25T19:29:46Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2185", + "html_url": "https://github.com/hub4j/github-api/pull/2185", + "diff_url": "https://github.com/hub4j/github-api/pull/2185.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2185.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nFixes #2032 - (`GHPullRequestQueryBuilder` doesn't seem to support `pageSize(int)` but `GHIssueQueryBuilder` does)\r\n\r\nhttps://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [x] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2185/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2185/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2184", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2184/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2184/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2184/events", + "html_url": "https://github.com/hub4j/github-api/pull/2184", + "id": 3852498861, + "node_id": "PR_kwDOAAlq-s6_MgOl", + "number": 2184, + "title": "feat: add GHPullRequest.markReadyForReview for draft PRs", + "user": { + "login": "Anonycoders", + "id": 40047636, + "node_id": "MDQ6VXNlcjQwMDQ3NjM2", + "avatar_url": "https://avatars.githubusercontent.com/u/40047636?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Anonycoders", + "html_url": "https://github.com/Anonycoders", + "followers_url": "https://api.github.com/users/Anonycoders/followers", + "following_url": "https://api.github.com/users/Anonycoders/following{/other_user}", + "gists_url": "https://api.github.com/users/Anonycoders/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Anonycoders/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Anonycoders/subscriptions", + "organizations_url": "https://api.github.com/users/Anonycoders/orgs", + "repos_url": "https://api.github.com/users/Anonycoders/repos", + "events_url": "https://api.github.com/users/Anonycoders/events{/privacy}", + "received_events_url": "https://api.github.com/users/Anonycoders/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2026-01-25T03:46:29Z", + "updated_at": "2026-01-25T04:32:25Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2184", + "html_url": "https://github.com/hub4j/github-api/pull/2184", + "diff_url": "https://github.com/hub4j/github-api/pull/2184.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2184.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nThis change adds new functionality to allow `marking draft PRs as ready for review` using GraphQL as it's not supported by REST.\r\n\r\nhttps://docs.github.com/en/graphql/reference/mutations#markpullrequestreadyforreview\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [x] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2184/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2184/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2183", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2183/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2183/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2183/events", + "html_url": "https://github.com/hub4j/github-api/pull/2183", + "id": 3852488828, + "node_id": "PR_kwDOAAlq-s6_MeOS", + "number": 2183, + "title": "Move to Jackson 3 - Phase 2", + "user": { + "login": "pvillard31", + "id": 11541012, + "node_id": "MDQ6VXNlcjExNTQxMDEy", + "avatar_url": "https://avatars.githubusercontent.com/u/11541012?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvillard31", + "html_url": "https://github.com/pvillard31", + "followers_url": "https://api.github.com/users/pvillard31/followers", + "following_url": "https://api.github.com/users/pvillard31/following{/other_user}", + "gists_url": "https://api.github.com/users/pvillard31/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvillard31/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvillard31/subscriptions", + "organizations_url": "https://api.github.com/users/pvillard31/orgs", + "repos_url": "https://api.github.com/users/pvillard31/repos", + "events_url": "https://api.github.com/users/pvillard31/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvillard31/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2026-01-25T03:36:00Z", + "updated_at": "2026-01-25T03:36:00Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2183", + "html_url": "https://github.com/hub4j/github-api/pull/2183", + "diff_url": "https://github.com/hub4j/github-api/pull/2183.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2183.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nSee #2173 for the initial PR and associated discussion.\r\n\r\nThis PR is the follow-up of #2182.\r\n\r\n- Design GitHubJackson interface with methods for reading/writing JSON Implement GitHubJackson2 and GitHubJackson3\r\n- Create DefaultGitHubJackson factory with programmatic selection\r\n- Create GitHubJacksonException wrapper classes\r\n- Add GitHubBuilder.withJackson() for configuring Jackson implementation\r\n- Add testing infrastructure for both Jackson versions\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [ ] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [ ] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [ ] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2183/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2183/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2173", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2173/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2173/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2173/events", + "html_url": "https://github.com/hub4j/github-api/pull/2173", + "id": 3751227811, + "node_id": "PR_kwDOAAlq-s66AnNf", + "number": 2173, + "title": "Move to Jackson 3", + "user": { + "login": "pvillard31", + "id": 11541012, + "node_id": "MDQ6VXNlcjExNTQxMDEy", + "avatar_url": "https://avatars.githubusercontent.com/u/11541012?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvillard31", + "html_url": "https://github.com/pvillard31", + "followers_url": "https://api.github.com/users/pvillard31/followers", + "following_url": "https://api.github.com/users/pvillard31/following{/other_user}", + "gists_url": "https://api.github.com/users/pvillard31/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvillard31/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvillard31/subscriptions", + "organizations_url": "https://api.github.com/users/pvillard31/orgs", + "repos_url": "https://api.github.com/users/pvillard31/repos", + "events_url": "https://api.github.com/users/pvillard31/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvillard31/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 5, + "created_at": "2025-12-21T15:03:00Z", + "updated_at": "2026-01-25T02:15:17Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2173", + "html_url": "https://github.com/hub4j/github-api/pull/2173", + "diff_url": "https://github.com/hub4j/github-api/pull/2173.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2173.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nFollowing discussion in #2166.\r\nFixes #2166.\r\n\r\nFor reference: https://github.com/FasterXML/jackson/blob/main/jackson3/MIGRATING_TO_JACKSON_3.md\r\n\r\nThese changes are only targeting the 2.x line since it may be considered as containing breaking changes and requires a minimum java version of Java 17.\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [x] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2173/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2173/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2168", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2168/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2168/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2168/events", + "html_url": "https://github.com/hub4j/github-api/pull/2168", + "id": 3678905639, + "node_id": "PR_kwDOAAlq-s62PChC", + "number": 2168, + "title": "Chore(deps): Bump spring.boot.version from 3.4.5 to 4.0.0", + "user": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1576019209, + "node_id": "MDU6TGFiZWwxNTc2MDE5MjA5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/dependencies", + "name": "dependencies", + "color": "0366d6", + "default": false, + "description": "Pull requests that update a dependency file" + }, + { + "id": 2156391625, + "node_id": "MDU6TGFiZWwyMTU2MzkxNjI1", + "url": "https://api.github.com/repos/hub4j/github-api/labels/java", + "name": "java", + "color": "ffa221", + "default": false, + "description": "Pull requests that update Java code" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-12-01T02:09:06Z", + "updated_at": "2026-01-01T02:00:03Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2168", + "html_url": "https://github.com/hub4j/github-api/pull/2168", + "diff_url": "https://github.com/hub4j/github-api/pull/2168.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2168.patch", + "merged_at": null + }, + "body": "Bumps `spring.boot.version` from 3.4.5 to 4.0.0.\nUpdates `org.springframework.boot:spring-boot-dependencies` from 3.4.5 to 4.0.0\n
\nRelease notes\n

Sourced from org.springframework.boot:spring-boot-dependencies's releases.

\n
\n

v4.0.0

\n

Full release notes for Spring Boot 4.0 are available on the wiki. There is also a migration guide to help you upgrade from Spring Boot 3.5.

\n

:star: New Features

\n
    \n
  • Change tomcat and jetty runtime modules to starters #48175
  • \n
  • Rename spring-boot-kotlin-serialization to align with the name of the Kotlinx module that it pulls in #48076
  • \n
\n

:lady_beetle: Bug Fixes

\n
    \n
  • Error properties are a general web concern and should not be located beneath server.* #48201
  • \n
  • With both Jackson 2 and 3 on the classpath, @JsonTest fails due to duplicate jacksonTesterFactoryBean #48198
  • \n
  • Gradle war task does not exclude starter POMs from lib-provided #48197
  • \n
  • spring.test.webclient.mockrestserviceserver.enabled is not aligned with its module's name #48193
  • \n
  • SslMeterBinder doesn't register metrics for dynamically added bundles if no bundles exist at bind time #48182
  • \n
  • Properties bound in the child management context ignore the parent's environment prefix #48177
  • \n
  • ssl.chain.expiry metrics doesn't update for dynamically registered SSL bundles #48171
  • \n
  • Starter for spring-boot-micrometer-metrics is missing #48161
  • \n
  • Elasticsearch client's sniffer functionality should not be enabled by default #48155
  • \n
  • spring-boot-starter-elasticsearch should depend on elasticsearch-java #48141
  • \n
  • Auto-configuration exclusions are checked using a different class loader to the one that loads auto-configuration classes #48132
  • \n
  • New arm64 macbooks fail to bootBuildImage due to incorrect platform image #48128
  • \n
  • Properties for configuring an isolated JsonMapper or ObjectMapper are incorrectly named #48116
  • \n
  • Buildpack fails with recent Docker installs due to hardcoded version in URL #48103
  • \n
  • Image building may fail when specifying a platform if an image has already been built with a different platform #48099
  • \n
  • Default values of Kotlinx Serialization JSON configuration properties are not documented #48097
  • \n
  • Custom XML converters should override defaults in HttpMessageConverters #48096
  • \n
  • Kotlin serialization is used too aggressively when other JSON libraries are available #48070
  • \n
  • PortInUseException incorrectly thrown on failure to bind port due to Netty IP misconfiguration #48059
  • \n
  • Auto-configured JCacheMetrics cannot be customized #48057
  • \n
  • WebSecurityCustomizer beans are excluded by WebMvcTest #48055
  • \n
  • Deprecated EnvironmentPostProcessor does not resolve arguments #48047
  • \n
  • RetryPolicySettings should refer to maxRetries, not maxAttempts #48023
  • \n
  • Devtools Restarter does not work with a parameterless main method #47996
  • \n
  • Dependency management for Kafka should not manage Scala 2.12 libraries #47991
  • \n
  • spring-boot-mail should depend on jakarta.mail:jakarta.mail-api and org.eclipse.angus:angus-mail instead of org.eclipse.angus:jakarta.mail #47983
  • \n
  • spring-boot-starter-data-mongodb-reactive has dependency on reactor-test #47982
  • \n
  • Support for ReactiveElasticsearchClient is in the wrong module #47848
  • \n
\n

:notebook_with_decorative_cover: Documentation

\n
    \n
  • Removed property spring.test.webclient.register-rest-template is still documented #48199
  • \n
  • Mention support for detecting AWS ECS in "Deploying to the Cloud" #48170
  • \n
  • Revise AWS section of "Deploying to the Cloud" in reference manual #48163
  • \n
  • Fix typo in PortInUseException Javadoc #48134
  • \n
  • Correct section about required setters in "Type-safe Configuration Properties" #48131
  • \n
  • Use since attribute in configuration properties deprecation consistently #48122
  • \n
  • Document EndpointJsonMapper and management.endpoints.jackson.isolated-json-mapper #48115
  • \n
  • Document support for configuring servlet context init parameters using properties #48112
  • \n
  • Some configuration properties are not documented in the appendix #48095
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 1c0e08b Release v4.0.0
  • \n
  • 3487928 Merge branch '3.5.x'
  • \n
  • 29b8e96 Switch make-default in preparation for Spring Boot 4.0.0
  • \n
  • 88da0dd Merge branch '3.5.x'
  • \n
  • 56feeaa Next development version (v3.5.9-SNAPSHOT)
  • \n
  • 3becdc7 Move server.error properties to spring.web.error
  • \n
  • 2b30632 Merge branch '3.5.x'
  • \n
  • 4f03b44 Merge branch '3.4.x' into 3.5.x
  • \n
  • 3d15c13 Next development version (v3.4.13-SNAPSHOT)
  • \n
  • dc140df Upgrade to Spring Framework 7.0.1
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\nUpdates `org.springframework.boot:spring-boot-maven-plugin` from 3.4.5 to 4.0.0\n
\nRelease notes\n

Sourced from org.springframework.boot:spring-boot-maven-plugin's releases.

\n
\n

v4.0.0

\n

Full release notes for Spring Boot 4.0 are available on the wiki. There is also a migration guide to help you upgrade from Spring Boot 3.5.

\n

:star: New Features

\n
    \n
  • Change tomcat and jetty runtime modules to starters #48175
  • \n
  • Rename spring-boot-kotlin-serialization to align with the name of the Kotlinx module that it pulls in #48076
  • \n
\n

:lady_beetle: Bug Fixes

\n
    \n
  • Error properties are a general web concern and should not be located beneath server.* #48201
  • \n
  • With both Jackson 2 and 3 on the classpath, @JsonTest fails due to duplicate jacksonTesterFactoryBean #48198
  • \n
  • Gradle war task does not exclude starter POMs from lib-provided #48197
  • \n
  • spring.test.webclient.mockrestserviceserver.enabled is not aligned with its module's name #48193
  • \n
  • SslMeterBinder doesn't register metrics for dynamically added bundles if no bundles exist at bind time #48182
  • \n
  • Properties bound in the child management context ignore the parent's environment prefix #48177
  • \n
  • ssl.chain.expiry metrics doesn't update for dynamically registered SSL bundles #48171
  • \n
  • Starter for spring-boot-micrometer-metrics is missing #48161
  • \n
  • Elasticsearch client's sniffer functionality should not be enabled by default #48155
  • \n
  • spring-boot-starter-elasticsearch should depend on elasticsearch-java #48141
  • \n
  • Auto-configuration exclusions are checked using a different class loader to the one that loads auto-configuration classes #48132
  • \n
  • New arm64 macbooks fail to bootBuildImage due to incorrect platform image #48128
  • \n
  • Properties for configuring an isolated JsonMapper or ObjectMapper are incorrectly named #48116
  • \n
  • Buildpack fails with recent Docker installs due to hardcoded version in URL #48103
  • \n
  • Image building may fail when specifying a platform if an image has already been built with a different platform #48099
  • \n
  • Default values of Kotlinx Serialization JSON configuration properties are not documented #48097
  • \n
  • Custom XML converters should override defaults in HttpMessageConverters #48096
  • \n
  • Kotlin serialization is used too aggressively when other JSON libraries are available #48070
  • \n
  • PortInUseException incorrectly thrown on failure to bind port due to Netty IP misconfiguration #48059
  • \n
  • Auto-configured JCacheMetrics cannot be customized #48057
  • \n
  • WebSecurityCustomizer beans are excluded by WebMvcTest #48055
  • \n
  • Deprecated EnvironmentPostProcessor does not resolve arguments #48047
  • \n
  • RetryPolicySettings should refer to maxRetries, not maxAttempts #48023
  • \n
  • Devtools Restarter does not work with a parameterless main method #47996
  • \n
  • Dependency management for Kafka should not manage Scala 2.12 libraries #47991
  • \n
  • spring-boot-mail should depend on jakarta.mail:jakarta.mail-api and org.eclipse.angus:angus-mail instead of org.eclipse.angus:jakarta.mail #47983
  • \n
  • spring-boot-starter-data-mongodb-reactive has dependency on reactor-test #47982
  • \n
  • Support for ReactiveElasticsearchClient is in the wrong module #47848
  • \n
\n

:notebook_with_decorative_cover: Documentation

\n
    \n
  • Removed property spring.test.webclient.register-rest-template is still documented #48199
  • \n
  • Mention support for detecting AWS ECS in "Deploying to the Cloud" #48170
  • \n
  • Revise AWS section of "Deploying to the Cloud" in reference manual #48163
  • \n
  • Fix typo in PortInUseException Javadoc #48134
  • \n
  • Correct section about required setters in "Type-safe Configuration Properties" #48131
  • \n
  • Use since attribute in configuration properties deprecation consistently #48122
  • \n
  • Document EndpointJsonMapper and management.endpoints.jackson.isolated-json-mapper #48115
  • \n
  • Document support for configuring servlet context init parameters using properties #48112
  • \n
  • Some configuration properties are not documented in the appendix #48095
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 1c0e08b Release v4.0.0
  • \n
  • 3487928 Merge branch '3.5.x'
  • \n
  • 29b8e96 Switch make-default in preparation for Spring Boot 4.0.0
  • \n
  • 88da0dd Merge branch '3.5.x'
  • \n
  • 56feeaa Next development version (v3.5.9-SNAPSHOT)
  • \n
  • 3becdc7 Move server.error properties to spring.web.error
  • \n
  • 2b30632 Merge branch '3.5.x'
  • \n
  • 4f03b44 Merge branch '3.4.x' into 3.5.x
  • \n
  • 3d15c13 Next development version (v3.4.13-SNAPSHOT)
  • \n
  • dc140df Upgrade to Spring Framework 7.0.1
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2168/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2168/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2171", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2171/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2171/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2171/events", + "html_url": "https://github.com/hub4j/github-api/pull/2171", + "id": 3678910531, + "node_id": "PR_kwDOAAlq-s62PDmc", + "number": 2171, + "title": "Chore(deps): Bump com.squareup.okhttp3:okhttp from 4.12.0 to 5.3.2", + "user": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1576019209, + "node_id": "MDU6TGFiZWwxNTc2MDE5MjA5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/dependencies", + "name": "dependencies", + "color": "0366d6", + "default": false, + "description": "Pull requests that update a dependency file" + }, + { + "id": 2156391625, + "node_id": "MDU6TGFiZWwyMTU2MzkxNjI1", + "url": "https://api.github.com/repos/hub4j/github-api/labels/java", + "name": "java", + "color": "ffa221", + "default": false, + "description": "Pull requests that update Java code" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-12-01T02:11:39Z", + "updated_at": "2026-01-01T02:00:03Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2171", + "html_url": "https://github.com/hub4j/github-api/pull/2171", + "diff_url": "https://github.com/hub4j/github-api/pull/2171.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2171.patch", + "merged_at": null + }, + "body": "Bumps [com.squareup.okhttp3:okhttp](https://github.com/square/okhttp) from 4.12.0 to 5.3.2.\n
\nChangelog\n

Sourced from com.squareup.okhttp3:okhttp's changelog.

\n
\n

Version 5.3.2

\n

2025-11-18

\n
    \n
  • \n

    Fix: Don't delay triggering timeouts. In Okio 3.16.0 we introduced a regression that caused\ntimeouts to fire later than they were supposed to.

    \n
  • \n
  • \n

    Upgrade: [Okio 3.16.4][okio_3_16_4].

    \n
  • \n
\n

Version 5.3.1

\n

2025-11-16

\n

This release is the same as 5.3.0. Okio 3.16.3 didn't have a necessary fix!

\n
    \n
  • Upgrade: [Okio 3.16.3][okio_3_16_3].
  • \n
\n

Version 5.3.0

\n

2025-10-30

\n
    \n
  • \n

    New: Add tags to Call, including computable tags. Use this to attach application-specific\nmetadata to a Call in an EventListener or Interceptor. The tag can be read in any other\nEventListener or Interceptor.

    \n
      override fun intercept(chain: Interceptor.Chain): Response {\n    chain.call().tag(MyAnalyticsTag::class) {\n      MyAnalyticsTag(...)\n    }\n
    return chain.proceed(chain.request())\n
    \n

    }\n

    \n
  • \n
  • \n

    New: Support request bodies on HTTP/1.1 connection upgrades.

    \n
  • \n
  • \n

    New: EventListener.plus() makes it easier to observe events in multiple listeners.

    \n
  • \n
  • \n

    Fix: Don't spam logs with ‘Method isLoggable in android.util.Log not mocked.’ when using\nOkHttp in Robolectric and Paparazzi tests.

    \n
  • \n
  • \n

    Upgrade: [Kotlin 2.2.21][kotlin_2_2_21].

    \n
  • \n
  • \n

    Upgrade: [Okio 3.16.2][okio_3_16_2].

    \n
  • \n
  • \n

    Upgrade: [ZSTD-KMP 0.4.0][zstd_kmp_0_4_0]. This update fixes a bug that caused APKs to fail\n[16 KB ELF alignment checks][elf_alignment].

    \n
  • \n
\n

Version 5.2.3

\n

2025-11-18

\n\n
\n

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.squareup.okhttp3:okhttp&package-manager=maven&previous-version=4.12.0&new-version=5.3.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2171/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2171/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2153", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2153/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2153/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2153/events", + "html_url": "https://github.com/hub4j/github-api/pull/2153", + "id": 3547050854, + "node_id": "PR_kwDOAAlq-s6vY_6j", + "number": 2153, + "title": "(Spike) Move v2 to new package. ", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-10-24T00:06:08Z", + "updated_at": "2025-10-24T00:06:08Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2153", + "html_url": "https://github.com/hub4j/github-api/pull/2153", + "diff_url": "https://github.com/hub4j/github-api/pull/2153.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2153.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nThis is spike considering what it would look like if we published each new version in it's own package. \r\nThe most complex code should be move to internal for reuse in both v1 and v2 public apis. \r\n\r\nMove most v2 to new package. \r\nThen pull rc1 back into existing package. \r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [ ] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [ ] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [ ] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2153/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2153/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2146", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2146/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2146/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2146/events", + "html_url": "https://github.com/hub4j/github-api/pull/2146", + "id": 3453632014, + "node_id": "PR_kwDOAAlq-s6qgk4K", + "number": 2146, + "title": "[feat] Add support for the device authentication flow for github apps", + "user": { + "login": "PierreBtz", + "id": 9881659, + "node_id": "MDQ6VXNlcjk4ODE2NTk=", + "avatar_url": "https://avatars.githubusercontent.com/u/9881659?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/PierreBtz", + "html_url": "https://github.com/PierreBtz", + "followers_url": "https://api.github.com/users/PierreBtz/followers", + "following_url": "https://api.github.com/users/PierreBtz/following{/other_user}", + "gists_url": "https://api.github.com/users/PierreBtz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/PierreBtz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/PierreBtz/subscriptions", + "organizations_url": "https://api.github.com/users/PierreBtz/orgs", + "repos_url": "https://api.github.com/users/PierreBtz/repos", + "events_url": "https://api.github.com/users/PierreBtz/events{/privacy}", + "received_events_url": "https://api.github.com/users/PierreBtz/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-09-25T13:25:37Z", + "updated_at": "2025-09-26T09:05:45Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2146", + "html_url": "https://github.com/hub4j/github-api/pull/2146", + "diff_url": "https://github.com/hub4j/github-api/pull/2146.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2146.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\n*Opening as a draft since the tests are not ready and I have questions about them*\r\n\r\nThis PR provides support for the device authentication flow for github apps, as documented in https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app#using-the-device-flow-to-generate-a-user-access-token (access token generation) and here https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/refreshing-user-access-tokens#refreshing-a-user-access-token-with-a-refresh-token (refresh token).\r\n\r\nThis is needed when developing java CLIs that need to authenticate to GitHub through a GitHub application.\r\n\r\nReproducing here the documentation to help with the understanding:\r\n\r\n```\r\n In order to authenticate to GitHub as an user using the device flow of your GitHub App, you need to use the <<>>\r\n authentication provider that will take care of retrieving a user access token and refresh it when needed for you.\r\n You need to handle two things by yourself:\r\n 1. You need to provide a <<>> that will be called when a new user access token is retrieved (either on initial creation or on refresh).\r\n It is up to you to store the credential object securely the library does not take care of that.\r\n 2. You need to provide a <<>> that will be called when a user interaction is needed to complete the device flow.\r\n The library provides a basic implementation <<>> that will log the instructions to the console but you could imagine a more complex\r\n implementation that would for example open the user browser automatically (or call some automation that will input the information automatically for instance).\r\n\r\n Here is a complete example to get started:\r\n\r\n+-----+\r\n var clientId = \"\";\r\n var objectMapper = new ObjectMapper();\r\n objectMapper.registerModule(new JavaTimeModule());\r\n\r\n // for demo purpose only, this is not proper secret management!!!\r\n var appCredentialsFile = Path.of(\"/tmp/github-app-credentials.json\");\r\n DeviceFlowGithubAppCredentials appCredentials;\r\n if (Files.exists(appCredentialsFile)) {\r\n appCredentials = objectMapper.readValue(appCredentialsFile.toFile(), DeviceFlowGithubAppCredentials.class);\r\n } else {\r\n appCredentials = EMPTY_CREDENTIALS;\r\n }\r\n\r\n var gh = new GitHubBuilder().withAuthorizationProvider(\r\n new DeviceFlowGithubAppAuthorizationProvider(clientId, appCredentials, ac -> {\r\n // in this basic example, we serialize the credentials as json to a file\r\n // this is not proper secret management and you should probably use something more secure\r\n try {\r\n objectMapper.writeValue(appCredentialsFile.toFile(), ac);\r\n } catch (IOException e) {\r\n throw new RuntimeException(e);\r\n }\r\n }, new LoggerDeviceFlowGithubAppInputManager())).build();\r\n+-----+\r\n``` \r\n\r\nOpened questions I have:\r\n\r\n* I'm not too happy that the main class (`DeviceFlowGithubAppAuthorizationProvider`) cannot be in the authorization package (needs access to a package protected method).\r\n* I'm not too sure how to process with tests: I cannot use the recording method since the authorization process is not going through the api endpoints but through the UI ones (`https://github.com/...`). I didn't find anything in the base class test that would help with this. Also I have to use the `.setRawUrlPath(\"https://github.com/login/oauth/access_token\")` which cannot be intercepted as is obviously. This is not only a problem for tests but also for on prem Github and my current thinking is that I need to enrich the API and the testing framework to support a `uiUrl` that would be the equivalent of the `apiUrl` for the UI.\r\n\r\nSince this starts to widen the impact of this change I'm opening this draft to discuss the potential approaches before going further.\r\n\r\n\r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2146/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2146/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2099", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2099/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2099/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2099/events", + "html_url": "https://github.com/hub4j/github-api/pull/2099", + "id": 3037229321, + "node_id": "PR_kwDOAAlq-s6U0PLi", + "number": 2099, + "title": "Refactor pagination", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-05-03T07:23:17Z", + "updated_at": "2025-09-20T08:14:09Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2099", + "html_url": "https://github.com/hub4j/github-api/pull/2099", + "diff_url": "https://github.com/hub4j/github-api/pull/2099.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2099.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [ ] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [ ] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [ ] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2099/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2099/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1986", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1986/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1986/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1986/events", + "html_url": "https://github.com/hub4j/github-api/pull/1986", + "id": 2697030696, + "node_id": "PR_kwDOAAlq-s6DSCb3", + "number": 1986, + "title": "initial feature add", + "user": { + "login": "gitPushPuppets", + "id": 49495486, + "node_id": "MDQ6VXNlcjQ5NDk1NDg2", + "avatar_url": "https://avatars.githubusercontent.com/u/49495486?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gitPushPuppets", + "html_url": "https://github.com/gitPushPuppets", + "followers_url": "https://api.github.com/users/gitPushPuppets/followers", + "following_url": "https://api.github.com/users/gitPushPuppets/following{/other_user}", + "gists_url": "https://api.github.com/users/gitPushPuppets/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gitPushPuppets/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gitPushPuppets/subscriptions", + "organizations_url": "https://api.github.com/users/gitPushPuppets/orgs", + "repos_url": "https://api.github.com/users/gitPushPuppets/repos", + "events_url": "https://api.github.com/users/gitPushPuppets/events{/privacy}", + "received_events_url": "https://api.github.com/users/gitPushPuppets/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 4789870627, + "node_id": "LA_kwDOAAlq-s8AAAABHX-gIw", + "url": "https://api.github.com/repos/hub4j/github-api/labels/work-abandoned", + "name": "work-abandoned", + "color": "000000", + "default": false, + "description": "There hasn't been any activity on the PR in a while. Another contributor might want to pick it up." + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2024-11-27T04:41:38Z", + "updated_at": "2025-09-04T14:41:30Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/1986", + "html_url": "https://github.com/hub4j/github-api/pull/1986", + "diff_url": "https://github.com/hub4j/github-api/pull/1986.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/1986.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [ ] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [ ] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [ ] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1986/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1986/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2108", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2108/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2108/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2108/events", + "html_url": "https://github.com/hub4j/github-api/pull/2108", + "id": 3148050956, + "node_id": "PR_kwDOAAlq-s6ancHC", + "number": 2108, + "title": "Add missing properties to GHAsset and GHRelease", + "user": { + "login": "solonovamax", + "id": 46940694, + "node_id": "MDQ6VXNlcjQ2OTQwNjk0", + "avatar_url": "https://avatars.githubusercontent.com/u/46940694?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/solonovamax", + "html_url": "https://github.com/solonovamax", + "followers_url": "https://api.github.com/users/solonovamax/followers", + "following_url": "https://api.github.com/users/solonovamax/following{/other_user}", + "gists_url": "https://api.github.com/users/solonovamax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/solonovamax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/solonovamax/subscriptions", + "organizations_url": "https://api.github.com/users/solonovamax/orgs", + "repos_url": "https://api.github.com/users/solonovamax/repos", + "events_url": "https://api.github.com/users/solonovamax/events{/privacy}", + "received_events_url": "https://api.github.com/users/solonovamax/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2025-06-15T20:42:27Z", + "updated_at": "2025-07-30T16:23:40Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2108", + "html_url": "https://github.com/hub4j/github-api/pull/2108", + "diff_url": "https://github.com/hub4j/github-api/pull/2108.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2108.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nAdds missing fields for the `GHAsset` and `GHRelease` classes.\r\nSee: https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28\r\n\r\nI didn't bother adding tests because it's just new fields/getters. \r\n\r\nFixes #2102\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [x] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2108/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2108/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2098", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2098/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2098/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2098/events", + "html_url": "https://github.com/hub4j/github-api/pull/2098", + "id": 3033530320, + "node_id": "PR_kwDOAAlq-s6Un7vp", + "number": 2098, + "title": "Add polymorphic deserialization for the GHAppInstallation account field", + "user": { + "login": "anujhydrabadi", + "id": 129152617, + "node_id": "U_kgDOB7K2aQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129152617?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/anujhydrabadi", + "html_url": "https://github.com/anujhydrabadi", + "followers_url": "https://api.github.com/users/anujhydrabadi/followers", + "following_url": "https://api.github.com/users/anujhydrabadi/following{/other_user}", + "gists_url": "https://api.github.com/users/anujhydrabadi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anujhydrabadi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anujhydrabadi/subscriptions", + "organizations_url": "https://api.github.com/users/anujhydrabadi/orgs", + "repos_url": "https://api.github.com/users/anujhydrabadi/repos", + "events_url": "https://api.github.com/users/anujhydrabadi/events{/privacy}", + "received_events_url": "https://api.github.com/users/anujhydrabadi/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-05-01T09:37:33Z", + "updated_at": "2025-05-01T09:38:01Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2098", + "html_url": "https://github.com/hub4j/github-api/pull/2098", + "diff_url": "https://github.com/hub4j/github-api/pull/2098.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2098.patch", + "merged_at": null + }, + "body": "# Description\r\nFixes #1497 \r\nRecovering PR #1522 \r\nThere is a problem: this works fine for events, but when deserializing App Installation GET API responses, the `type` field (based on which we identify whether the `account` is User or Org) gets unset to `null`. The `account` polymorphic deserialization part works fine though. Perhaps there is a difference in how we are using Jackson at both places (events vs regular API responses), but I have not been able to figure it out yet. \r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2098/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2098/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2065", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2065/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2065/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2065/events", + "html_url": "https://github.com/hub4j/github-api/pull/2065", + "id": 2934401236, + "node_id": "PR_kwDOAAlq-s6PaV84", + "number": 2065, + "title": "Chore(deps): Bump spotbugs.version from 4.8.6 to 4.9.3", + "user": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1576019209, + "node_id": "MDU6TGFiZWwxNTc2MDE5MjA5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/dependencies", + "name": "dependencies", + "color": "0366d6", + "default": false, + "description": "Pull requests that update a dependency file" + }, + { + "id": 2156391625, + "node_id": "MDU6TGFiZWwyMTU2MzkxNjI1", + "url": "https://api.github.com/repos/hub4j/github-api/labels/java", + "name": "java", + "color": "ffa221", + "default": false, + "description": "Pull requests that update Java code" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2025-03-20T07:38:54Z", + "updated_at": "2025-05-01T02:35:32Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2065", + "html_url": "https://github.com/hub4j/github-api/pull/2065", + "diff_url": "https://github.com/hub4j/github-api/pull/2065.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2065.patch", + "merged_at": null + }, + "body": "Bumps `spotbugs.version` from 4.8.6 to 4.9.3.\nUpdates `com.github.spotbugs:spotbugs-annotations` from 4.8.6 to 4.9.3\n
\nRelease notes\n

Sourced from com.github.spotbugs:spotbugs-annotations's releases.

\n
\n

SpotBugs 4.9.3

\n

CHANGELOG

\n

Added

\n
    \n
  • Introduced UselessSuppressionDetector to report the useless annotations instead of NoteSuppressedWarnings (#3348)
  • \n
\n

Fixed

\n
    \n
  • Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3351)
  • \n
\n

CHECKSUM

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
filechecksum (sha256)
spotbugs-4.9.3-javadoc.jar3d0d103724cbaaffc27f17d28d9b17f8972fb378397f8f04f6f05268bde110b7
spotbugs-4.9.3-sources.jar0aa5c905469eb578a3dbe09dcf704cf892568610cdb58550b142d658e37a29d4
spotbugs-4.9.3.tgzd464d56050cf1dbda032e9482e1188f7cd7b7646eaff79c2e6cbe4d6822f4d9f
spotbugs-4.9.3.zip3b2dcf86f97d701700121cee4bd22305d4b54fd9ed7666fa0f53933a4ab92251
spotbugs-annotations-4.9.3-javadoc.jar5fce79dc01a97aae84670922dd3581aa621b980535e4f6695a71db553dcb9cb4
spotbugs-annotations-4.9.3-sources.jar990ad9f3500499a99466b7c1e01284f4f41d1499358e7dc38c8defc59dab114c
spotbugs-annotations.jar13532bfe2f45fcd491432221df72d9cd0efb8f987c9245e12befa192c8925ce3
spotbugs-ant-4.9.3-javadoc.jar346eb5215f9d157ab46c3216a783416e2fa2e8c9d4458143267fb518f81c7d77
spotbugs-ant-4.9.3-sources.jar591073402e4110093a380169acd3f33b26c2f893c2eaed5a6460d9be0b26014e
spotbugs-ant.jar3a6f453696294d5314e648d4891d35e34315e11cb63c758a1601021cc0d803d1
spotbugs.jar710e8b98f1ae23cdb71aaaf07e8d71fb63b44f2bbbaa1df3c3ba0de62aba6ec9
test-harness-4.9.3-javadoc.jar57f51147e289b5c6493f844beaac97cde57773a1d16ce064e9deb8963b3f99ce
test-harness-4.9.3-sources.jar22688f14ef808cde65cc46e86d41c617fc397fc4967516006a73ce8bad658b9f
test-harness-4.9.3.jar9bf5bba9546e4f89032006261dd2921a79fc3044e473ee1fa73af870cb43da15
test-harness-core-4.9.3-javadoc.jar15aac012f3a8c8d6600075efe824aecab8233778e58345fecca65d7970256311
test-harness-core-4.9.3-sources.jar13825de35190089490c7e290b52bafe6a9b08ab431177c0191dae9cf2a88a55d
test-harness-core-4.9.3.jar3c74cc6d2d6f999d403f00f97685587e617d2bf1bfc348bbd0597e785c83feec
test-harness-jupiter-4.9.3-javadoc.jara8f276fb01743b8dc9f8cd6b517ae0748e38f673e31615a923c9c61f5fd9de58
test-harness-jupiter-4.9.3-sources.jar0aefbc5c8bd406e5dc0b1d59bc3afc6889c02010d486b22242f4f19a1a935800
test-harness-jupiter-4.9.3.jar0e9509de32f8fbc94cf088dbee80394fa93807a766532568e652cd622ce737c8
\n

SpotBugs 4.9.2

\n

CHANGELOG

\n

Added

\n
    \n
  • Reporting useless @SuppressFBWarnings annotations (#641)
  • \n
\n

Fixed

\n
    \n
  • Fixed html bug descriptions for AT_STALE_THREAD_WRITE_OF_PRIMITIVE and AT_NONATOMIC_64BIT_PRIMITIVE (#3303)
  • \n
  • Fixed an HSM_HIDING_METHOD false positive when ECJ generates a synthetic method for an enum switch (#3305)
  • \n
  • Fix AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD false negatives, detector depending on method order.
  • \n
  • Fix THROWS_METHOD_THROWS_CLAUSE_THROWABLE reported in a method calling MethodHandle.invokeExact due to its polymorphic signature (#3309)
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive in inner class (#3310).
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive for ECJ compiled enum switches (#3316)
  • \n
  • Fix RC_REF_COMPARISON false positive with Lombok With annotation (#3319)
  • \n
  • Avoid calling File.getCanonicalPath twice to improve performance (#3325)
  • \n
  • Fix MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR and MC_OVERRIDABLE_METHOD_CALL_IN_CLONE false positive when the overridable method is outside the class (#3328).
  • \n
  • Fix NullPointerException thrown from ThrowingExceptions detector (#3337).
  • \n
\n

Removed

\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from com.github.spotbugs:spotbugs-annotations's changelog.

\n
\n

4.9.3 - 2025-03-14

\n

Added

\n
    \n
  • Introduced UselessSuppressionDetector to report the useless annotations instead of NoteSuppressedWarnings (#3348)
  • \n
\n

Fixed

\n
    \n
  • Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3351)
  • \n
\n

4.9.2 - 2025-03-01

\n

Added

\n
    \n
  • Reporting useless @SuppressFBWarnings annotations (#641)
  • \n
\n

Fixed

\n
    \n
  • Fixed html bug descriptions for AT_STALE_THREAD_WRITE_OF_PRIMITIVE and AT_NONATOMIC_64BIT_PRIMITIVE (#3303)
  • \n
  • Fixed an HSM_HIDING_METHOD false positive when ECJ generates a synthetic method for an enum switch (#3305)
  • \n
  • Fix AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD false negatives, detector depending on method order.
  • \n
  • Fix THROWS_METHOD_THROWS_CLAUSE_THROWABLE reported in a method calling MethodHandle.invokeExact due to its polymorphic signature (#3309)
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive in inner class (#3310).
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive for ECJ compiled enum switches (#3316)
  • \n
  • Fix RC_REF_COMPARISON false positive with Lombok With annotation (#3319)
  • \n
  • Avoid calling File.getCanonicalPath twice to improve performance (#3325)
  • \n
  • Fix MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR and MC_OVERRIDABLE_METHOD_CALL_IN_CLONE false positive when the overridable method is outside the class (#3328).
  • \n
  • Fix NullPointerException thrown from ThrowingExceptions detector (#3337).
  • \n
\n

Removed

\n
    \n
  • Removed the TLW_TWO_LOCK_NOTIFY, LI_LAZY_INIT_INSTANCE, BRSA_BAD_RESULTSET_ACCESS, BC_NULL_INSTANCEOF, NP_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR and RCN_REDUNDANT_CHECKED_NULL_COMPARISON deprecated bug patterns.
  • \n
\n

4.9.1 - 2025-02-02

\n

Added

\n
    \n
  • New detector SharedVariableAtomicityDetector for new bug types AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE, AT_NONATOMIC_64BIT_PRIMITIVE and AT_STALE_THREAD_WRITE_OF_PRIMITIVE (See SEI CERT rules VNA00-J, VNA02-J and VNA05-J).
  • \n
  • New detector FindHiddenMethod for bug type HSM_HIDING_METHOD. This bug is reported whenever a subclass method hides the static method of super class. (See SEI CERT MET07-J).
  • \n
\n

Fixed

\n
    \n
  • Fixed the parsing of generics methods in ThrowingExceptions (#3267)
  • \n
  • Accept the 1st parameter of java.util.concurrent.CompletableFuture's completeOnTimeout(), getNow() and obtrudeValue() functions as nullable (#1001).
  • \n
  • Fixed the analysis error when FindReturnRef was checking instructions corresponding to a CFG branch that was optimized away (#3266)
  • \n
  • Added execute file permission to files in the distribution archive (#3274)
  • \n
  • Fixed a stack overflow in MultipleInstantiationsOfSingletons when a singleton initializer makes recursive calls (#3280)
  • \n
  • Fixed NPE in FindReturnRef on inner class fields (#3283)
  • \n
  • Fixed NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE false positive when add edu.umd.cs.findbugs.annotations.Nullable (#3243)
  • \n
\n

4.9.0 - 2025-01-15

\n

Added

\n
    \n
  • Updated the SuppressFBWarnings annotation to support finer grained bug suppressions (#3102)
  • \n
  • SimpleDateFormat, DateTimeFormatter, FastDateFormat string check for bad combinations of flag formatting (#637)
  • \n
  • New detector ResourceInMultipleThreadsDetector and introduced new bug type:\n
      \n
    • AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD is reported in case of unsafe resource access in multiple threads.
    • \n
    \n
  • \n
\n

Fixed

\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 1f6a719 release v4.9.3
  • \n
  • 30f22d8 fix(deps): update junit5 monorepo to v5.12.1 (#3357)
  • \n
  • 4b0cfff cleanup: remove redundant implementations of getDetectorClassName() (#3352)
  • \n
  • bd996f4 chore(deps): update dependency com.diffplug.gradle:goomph to v4.3.0 (#3355)
  • \n
  • e46c442 Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3353)
  • \n
  • 7450785 Introduce UselessSuppressionDetector to report the useless suppressions
  • \n
  • 830e10c fix(deps): update dependency checkstyle to v10.21.4 (#3347)
  • \n
  • b5c7686 fix(deps): update dependency org.checkerframework:checker-qual to v3.49.1 (#3...
  • \n
  • c4b59b1 chore(deps): update sphinxdoc/sphinx docker tag to v8.2.3 (#3344)
  • \n
  • 7fd6fa4 fix(deps): update mockito monorepo to v5.16.0 (#3345)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\nUpdates `com.github.spotbugs:spotbugs` from 4.8.6 to 4.9.3\n
\nRelease notes\n

Sourced from com.github.spotbugs:spotbugs's releases.

\n
\n

SpotBugs 4.9.3

\n

CHANGELOG

\n

Added

\n
    \n
  • Introduced UselessSuppressionDetector to report the useless annotations instead of NoteSuppressedWarnings (#3348)
  • \n
\n

Fixed

\n
    \n
  • Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3351)
  • \n
\n

CHECKSUM

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
filechecksum (sha256)
spotbugs-4.9.3-javadoc.jar3d0d103724cbaaffc27f17d28d9b17f8972fb378397f8f04f6f05268bde110b7
spotbugs-4.9.3-sources.jar0aa5c905469eb578a3dbe09dcf704cf892568610cdb58550b142d658e37a29d4
spotbugs-4.9.3.tgzd464d56050cf1dbda032e9482e1188f7cd7b7646eaff79c2e6cbe4d6822f4d9f
spotbugs-4.9.3.zip3b2dcf86f97d701700121cee4bd22305d4b54fd9ed7666fa0f53933a4ab92251
spotbugs-annotations-4.9.3-javadoc.jar5fce79dc01a97aae84670922dd3581aa621b980535e4f6695a71db553dcb9cb4
spotbugs-annotations-4.9.3-sources.jar990ad9f3500499a99466b7c1e01284f4f41d1499358e7dc38c8defc59dab114c
spotbugs-annotations.jar13532bfe2f45fcd491432221df72d9cd0efb8f987c9245e12befa192c8925ce3
spotbugs-ant-4.9.3-javadoc.jar346eb5215f9d157ab46c3216a783416e2fa2e8c9d4458143267fb518f81c7d77
spotbugs-ant-4.9.3-sources.jar591073402e4110093a380169acd3f33b26c2f893c2eaed5a6460d9be0b26014e
spotbugs-ant.jar3a6f453696294d5314e648d4891d35e34315e11cb63c758a1601021cc0d803d1
spotbugs.jar710e8b98f1ae23cdb71aaaf07e8d71fb63b44f2bbbaa1df3c3ba0de62aba6ec9
test-harness-4.9.3-javadoc.jar57f51147e289b5c6493f844beaac97cde57773a1d16ce064e9deb8963b3f99ce
test-harness-4.9.3-sources.jar22688f14ef808cde65cc46e86d41c617fc397fc4967516006a73ce8bad658b9f
test-harness-4.9.3.jar9bf5bba9546e4f89032006261dd2921a79fc3044e473ee1fa73af870cb43da15
test-harness-core-4.9.3-javadoc.jar15aac012f3a8c8d6600075efe824aecab8233778e58345fecca65d7970256311
test-harness-core-4.9.3-sources.jar13825de35190089490c7e290b52bafe6a9b08ab431177c0191dae9cf2a88a55d
test-harness-core-4.9.3.jar3c74cc6d2d6f999d403f00f97685587e617d2bf1bfc348bbd0597e785c83feec
test-harness-jupiter-4.9.3-javadoc.jara8f276fb01743b8dc9f8cd6b517ae0748e38f673e31615a923c9c61f5fd9de58
test-harness-jupiter-4.9.3-sources.jar0aefbc5c8bd406e5dc0b1d59bc3afc6889c02010d486b22242f4f19a1a935800
test-harness-jupiter-4.9.3.jar0e9509de32f8fbc94cf088dbee80394fa93807a766532568e652cd622ce737c8
\n

SpotBugs 4.9.2

\n

CHANGELOG

\n

Added

\n
    \n
  • Reporting useless @SuppressFBWarnings annotations (#641)
  • \n
\n

Fixed

\n
    \n
  • Fixed html bug descriptions for AT_STALE_THREAD_WRITE_OF_PRIMITIVE and AT_NONATOMIC_64BIT_PRIMITIVE (#3303)
  • \n
  • Fixed an HSM_HIDING_METHOD false positive when ECJ generates a synthetic method for an enum switch (#3305)
  • \n
  • Fix AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD false negatives, detector depending on method order.
  • \n
  • Fix THROWS_METHOD_THROWS_CLAUSE_THROWABLE reported in a method calling MethodHandle.invokeExact due to its polymorphic signature (#3309)
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive in inner class (#3310).
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive for ECJ compiled enum switches (#3316)
  • \n
  • Fix RC_REF_COMPARISON false positive with Lombok With annotation (#3319)
  • \n
  • Avoid calling File.getCanonicalPath twice to improve performance (#3325)
  • \n
  • Fix MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR and MC_OVERRIDABLE_METHOD_CALL_IN_CLONE false positive when the overridable method is outside the class (#3328).
  • \n
  • Fix NullPointerException thrown from ThrowingExceptions detector (#3337).
  • \n
\n

Removed

\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from com.github.spotbugs:spotbugs's changelog.

\n
\n

4.9.3 - 2025-03-14

\n

Added

\n
    \n
  • Introduced UselessSuppressionDetector to report the useless annotations instead of NoteSuppressedWarnings (#3348)
  • \n
\n

Fixed

\n
    \n
  • Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3351)
  • \n
\n

4.9.2 - 2025-03-01

\n

Added

\n
    \n
  • Reporting useless @SuppressFBWarnings annotations (#641)
  • \n
\n

Fixed

\n
    \n
  • Fixed html bug descriptions for AT_STALE_THREAD_WRITE_OF_PRIMITIVE and AT_NONATOMIC_64BIT_PRIMITIVE (#3303)
  • \n
  • Fixed an HSM_HIDING_METHOD false positive when ECJ generates a synthetic method for an enum switch (#3305)
  • \n
  • Fix AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD false negatives, detector depending on method order.
  • \n
  • Fix THROWS_METHOD_THROWS_CLAUSE_THROWABLE reported in a method calling MethodHandle.invokeExact due to its polymorphic signature (#3309)
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive in inner class (#3310).
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive for ECJ compiled enum switches (#3316)
  • \n
  • Fix RC_REF_COMPARISON false positive with Lombok With annotation (#3319)
  • \n
  • Avoid calling File.getCanonicalPath twice to improve performance (#3325)
  • \n
  • Fix MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR and MC_OVERRIDABLE_METHOD_CALL_IN_CLONE false positive when the overridable method is outside the class (#3328).
  • \n
  • Fix NullPointerException thrown from ThrowingExceptions detector (#3337).
  • \n
\n

Removed

\n
    \n
  • Removed the TLW_TWO_LOCK_NOTIFY, LI_LAZY_INIT_INSTANCE, BRSA_BAD_RESULTSET_ACCESS, BC_NULL_INSTANCEOF, NP_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR and RCN_REDUNDANT_CHECKED_NULL_COMPARISON deprecated bug patterns.
  • \n
\n

4.9.1 - 2025-02-02

\n

Added

\n
    \n
  • New detector SharedVariableAtomicityDetector for new bug types AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE, AT_NONATOMIC_64BIT_PRIMITIVE and AT_STALE_THREAD_WRITE_OF_PRIMITIVE (See SEI CERT rules VNA00-J, VNA02-J and VNA05-J).
  • \n
  • New detector FindHiddenMethod for bug type HSM_HIDING_METHOD. This bug is reported whenever a subclass method hides the static method of super class. (See SEI CERT MET07-J).
  • \n
\n

Fixed

\n
    \n
  • Fixed the parsing of generics methods in ThrowingExceptions (#3267)
  • \n
  • Accept the 1st parameter of java.util.concurrent.CompletableFuture's completeOnTimeout(), getNow() and obtrudeValue() functions as nullable (#1001).
  • \n
  • Fixed the analysis error when FindReturnRef was checking instructions corresponding to a CFG branch that was optimized away (#3266)
  • \n
  • Added execute file permission to files in the distribution archive (#3274)
  • \n
  • Fixed a stack overflow in MultipleInstantiationsOfSingletons when a singleton initializer makes recursive calls (#3280)
  • \n
  • Fixed NPE in FindReturnRef on inner class fields (#3283)
  • \n
  • Fixed NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE false positive when add edu.umd.cs.findbugs.annotations.Nullable (#3243)
  • \n
\n

4.9.0 - 2025-01-15

\n

Added

\n
    \n
  • Updated the SuppressFBWarnings annotation to support finer grained bug suppressions (#3102)
  • \n
  • SimpleDateFormat, DateTimeFormatter, FastDateFormat string check for bad combinations of flag formatting (#637)
  • \n
  • New detector ResourceInMultipleThreadsDetector and introduced new bug type:\n
      \n
    • AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD is reported in case of unsafe resource access in multiple threads.
    • \n
    \n
  • \n
\n

Fixed

\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 1f6a719 release v4.9.3
  • \n
  • 30f22d8 fix(deps): update junit5 monorepo to v5.12.1 (#3357)
  • \n
  • 4b0cfff cleanup: remove redundant implementations of getDetectorClassName() (#3352)
  • \n
  • bd996f4 chore(deps): update dependency com.diffplug.gradle:goomph to v4.3.0 (#3355)
  • \n
  • e46c442 Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3353)
  • \n
  • 7450785 Introduce UselessSuppressionDetector to report the useless suppressions
  • \n
  • 830e10c fix(deps): update dependency checkstyle to v10.21.4 (#3347)
  • \n
  • b5c7686 fix(deps): update dependency org.checkerframework:checker-qual to v3.49.1 (#3...
  • \n
  • c4b59b1 chore(deps): update sphinxdoc/sphinx docker tag to v8.2.3 (#3344)
  • \n
  • 7fd6fa4 fix(deps): update mockito monorepo to v5.16.0 (#3345)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2065/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2065/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1917", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1917/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1917/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1917/events", + "html_url": "https://github.com/hub4j/github-api/pull/1917", + "id": 2492934092, + "node_id": "PR_kwDOAAlq-s55wQBP", + "number": 1917, + "title": "Support setting & checking AutomatedSecurityFixes", + "user": { + "login": "ranma2913", + "id": 4295880, + "node_id": "MDQ6VXNlcjQyOTU4ODA=", + "avatar_url": "https://avatars.githubusercontent.com/u/4295880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ranma2913", + "html_url": "https://github.com/ranma2913", + "followers_url": "https://api.github.com/users/ranma2913/followers", + "following_url": "https://api.github.com/users/ranma2913/following{/other_user}", + "gists_url": "https://api.github.com/users/ranma2913/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ranma2913/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ranma2913/subscriptions", + "organizations_url": "https://api.github.com/users/ranma2913/orgs", + "repos_url": "https://api.github.com/users/ranma2913/repos", + "events_url": "https://api.github.com/users/ranma2913/events{/privacy}", + "received_events_url": "https://api.github.com/users/ranma2913/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 4789870627, + "node_id": "LA_kwDOAAlq-s8AAAABHX-gIw", + "url": "https://api.github.com/repos/hub4j/github-api/labels/work-abandoned", + "name": "work-abandoned", + "color": "000000", + "default": false, + "description": "There hasn't been any activity on the PR in a while. Another contributor might want to pick it up." + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2024-08-28T20:27:53Z", + "updated_at": "2025-01-14T18:08:46Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/1917", + "html_url": "https://github.com/hub4j/github-api/pull/1917", + "diff_url": "https://github.com/hub4j/github-api/pull/1917.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/1917.patch", + "merged_at": null + }, + "body": "https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#check-if-automated-security-fixes-are-enabled-for-a-repository\r\n\r\n# Description\r\n\r\nFixes #1916\r\n\r\nThis change will support Support Endpoints:\r\n\r\n https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#check-if-automated-security-fixes-are-enabled-for-a-repository\r\n https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#enable-automated-security-fixes\r\n https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#disable-automated-security-fixes\r\n\r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [x] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1917/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1917/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1787", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1787/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1787/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1787/events", + "html_url": "https://github.com/hub4j/github-api/pull/1787", + "id": 2122147185, + "node_id": "PR_kwDOAAlq-s5mNyo1", + "number": 1787, + "title": "Code Scanning API support", + "user": { + "login": "wwong", + "id": 1160302, + "node_id": "MDQ6VXNlcjExNjAzMDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1160302?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/wwong", + "html_url": "https://github.com/wwong", + "followers_url": "https://api.github.com/users/wwong/followers", + "following_url": "https://api.github.com/users/wwong/following{/other_user}", + "gists_url": "https://api.github.com/users/wwong/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wwong/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wwong/subscriptions", + "organizations_url": "https://api.github.com/users/wwong/orgs", + "repos_url": "https://api.github.com/users/wwong/repos", + "events_url": "https://api.github.com/users/wwong/events{/privacy}", + "received_events_url": "https://api.github.com/users/wwong/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 4789870627, + "node_id": "LA_kwDOAAlq-s8AAAABHX-gIw", + "url": "https://api.github.com/repos/hub4j/github-api/labels/work-abandoned", + "name": "work-abandoned", + "color": "000000", + "default": false, + "description": "There hasn't been any activity on the PR in a while. Another contributor might want to pick it up." + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2024-02-07T04:08:42Z", + "updated_at": "2024-07-01T19:15:15Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/1787", + "html_url": "https://github.com/hub4j/github-api/pull/1787", + "diff_url": "https://github.com/hub4j/github-api/pull/1787.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/1787.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nFollowing up on open comments from https://github.com/hub4j/github-api/pull/1142 and https://github.com/cortexapps/github-api/pull/8\r\n\r\nI don't currently have access to the security alerts for the example test repo (https://github.com/hub4j-test-org/Pixi), so the response fields might be slightly outdated until I (or someone else) can re-record the wiremock samples.\r\n\r\nStart of an (incomplete) implementation for https://github.com/hub4j/github-api/issues/1133 (will add more endpoints in a later PR)\r\n\r\nThis change adds the read-only calls for the following endpoints, as they were originally implemented in previous PRs:\r\n* [List code scanning alerts for a repository](https://docs.github.com/en/rest/code-scanning/code-scanning?apiVersion=2022-11-28#list-code-scanning-alerts-for-a-repository)\r\n* [Get a code scanning alert](https://docs.github.com/en/rest/code-scanning/code-scanning?apiVersion=2022-11-28#get-a-code-scanning-alert)\r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [ ] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [ ] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1787/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1787/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1730", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1730/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1730/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1730/events", + "html_url": "https://github.com/hub4j/github-api/pull/1730", + "id": 1952864832, + "node_id": "PR_kwDOAAlq-s5dTnjz", + "number": 1730, + "title": "Paginator", + "user": { + "login": "anujhydrabadi", + "id": 129152617, + "node_id": "U_kgDOB7K2aQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129152617?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/anujhydrabadi", + "html_url": "https://github.com/anujhydrabadi", + "followers_url": "https://api.github.com/users/anujhydrabadi/followers", + "following_url": "https://api.github.com/users/anujhydrabadi/following{/other_user}", + "gists_url": "https://api.github.com/users/anujhydrabadi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anujhydrabadi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anujhydrabadi/subscriptions", + "organizations_url": "https://api.github.com/users/anujhydrabadi/orgs", + "repos_url": "https://api.github.com/users/anujhydrabadi/repos", + "events_url": "https://api.github.com/users/anujhydrabadi/events{/privacy}", + "received_events_url": "https://api.github.com/users/anujhydrabadi/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 4789870627, + "node_id": "LA_kwDOAAlq-s8AAAABHX-gIw", + "url": "https://api.github.com/repos/hub4j/github-api/labels/work-abandoned", + "name": "work-abandoned", + "color": "000000", + "default": false, + "description": "There hasn't been any activity on the PR in a while. Another contributor might want to pick it up." + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2023-10-19T18:48:14Z", + "updated_at": "2024-06-20T03:14:40Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/1730", + "html_url": "https://github.com/hub4j/github-api/pull/1730", + "diff_url": "https://github.com/hub4j/github-api/pull/1730.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/1730.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\n`paginator()` method in `PagedIterable` to support starting at a particular page, and next, previous, first, last and jumping to any particular page, along with a few other supporting methods. Made in parallel to `iterator()` method so as to keep backward compatibility, but supports all functionality that `iterator()` provides.\r\n\r\nFixes #348 \r\nFixes #1614 \r\nFixes #448 \r\nFixes #1197 \r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1730/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1730/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + } + ] +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/__files/3-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/__files/3-search_issues.json new file mode 100644 index 0000000000..63a6d51e2d --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/__files/3-search_issues.json @@ -0,0 +1,1239 @@ +{ + "total_count": 16, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2185", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2185/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2185/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2185/events", + "html_url": "https://github.com/hub4j/github-api/pull/2185", + "id": 3853746359, + "node_id": "PR_kwDOAAlq-s6_QWo_", + "number": 2185, + "title": "feat: paginated gh pull request query builder", + "user": { + "login": "Anonycoders", + "id": 40047636, + "node_id": "MDQ6VXNlcjQwMDQ3NjM2", + "avatar_url": "https://avatars.githubusercontent.com/u/40047636?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Anonycoders", + "html_url": "https://github.com/Anonycoders", + "followers_url": "https://api.github.com/users/Anonycoders/followers", + "following_url": "https://api.github.com/users/Anonycoders/following{/other_user}", + "gists_url": "https://api.github.com/users/Anonycoders/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Anonycoders/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Anonycoders/subscriptions", + "organizations_url": "https://api.github.com/users/Anonycoders/orgs", + "repos_url": "https://api.github.com/users/Anonycoders/repos", + "events_url": "https://api.github.com/users/Anonycoders/events{/privacy}", + "received_events_url": "https://api.github.com/users/Anonycoders/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2026-01-25T19:29:46Z", + "updated_at": "2026-01-25T19:29:46Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2185", + "html_url": "https://github.com/hub4j/github-api/pull/2185", + "diff_url": "https://github.com/hub4j/github-api/pull/2185.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2185.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nFixes #2032 - (`GHPullRequestQueryBuilder` doesn't seem to support `pageSize(int)` but `GHIssueQueryBuilder` does)\r\n\r\nhttps://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [x] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2185/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2185/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2184", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2184/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2184/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2184/events", + "html_url": "https://github.com/hub4j/github-api/pull/2184", + "id": 3852498861, + "node_id": "PR_kwDOAAlq-s6_MgOl", + "number": 2184, + "title": "feat: add GHPullRequest.markReadyForReview for draft PRs", + "user": { + "login": "Anonycoders", + "id": 40047636, + "node_id": "MDQ6VXNlcjQwMDQ3NjM2", + "avatar_url": "https://avatars.githubusercontent.com/u/40047636?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Anonycoders", + "html_url": "https://github.com/Anonycoders", + "followers_url": "https://api.github.com/users/Anonycoders/followers", + "following_url": "https://api.github.com/users/Anonycoders/following{/other_user}", + "gists_url": "https://api.github.com/users/Anonycoders/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Anonycoders/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Anonycoders/subscriptions", + "organizations_url": "https://api.github.com/users/Anonycoders/orgs", + "repos_url": "https://api.github.com/users/Anonycoders/repos", + "events_url": "https://api.github.com/users/Anonycoders/events{/privacy}", + "received_events_url": "https://api.github.com/users/Anonycoders/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2026-01-25T03:46:29Z", + "updated_at": "2026-01-25T04:32:25Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2184", + "html_url": "https://github.com/hub4j/github-api/pull/2184", + "diff_url": "https://github.com/hub4j/github-api/pull/2184.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2184.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nThis change adds new functionality to allow `marking draft PRs as ready for review` using GraphQL as it's not supported by REST.\r\n\r\nhttps://docs.github.com/en/graphql/reference/mutations#markpullrequestreadyforreview\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [x] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2184/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2184/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2183", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2183/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2183/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2183/events", + "html_url": "https://github.com/hub4j/github-api/pull/2183", + "id": 3852488828, + "node_id": "PR_kwDOAAlq-s6_MeOS", + "number": 2183, + "title": "Move to Jackson 3 - Phase 2", + "user": { + "login": "pvillard31", + "id": 11541012, + "node_id": "MDQ6VXNlcjExNTQxMDEy", + "avatar_url": "https://avatars.githubusercontent.com/u/11541012?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvillard31", + "html_url": "https://github.com/pvillard31", + "followers_url": "https://api.github.com/users/pvillard31/followers", + "following_url": "https://api.github.com/users/pvillard31/following{/other_user}", + "gists_url": "https://api.github.com/users/pvillard31/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvillard31/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvillard31/subscriptions", + "organizations_url": "https://api.github.com/users/pvillard31/orgs", + "repos_url": "https://api.github.com/users/pvillard31/repos", + "events_url": "https://api.github.com/users/pvillard31/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvillard31/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2026-01-25T03:36:00Z", + "updated_at": "2026-01-25T03:36:00Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2183", + "html_url": "https://github.com/hub4j/github-api/pull/2183", + "diff_url": "https://github.com/hub4j/github-api/pull/2183.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2183.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nSee #2173 for the initial PR and associated discussion.\r\n\r\nThis PR is the follow-up of #2182.\r\n\r\n- Design GitHubJackson interface with methods for reading/writing JSON Implement GitHubJackson2 and GitHubJackson3\r\n- Create DefaultGitHubJackson factory with programmatic selection\r\n- Create GitHubJacksonException wrapper classes\r\n- Add GitHubBuilder.withJackson() for configuring Jackson implementation\r\n- Add testing infrastructure for both Jackson versions\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [ ] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [ ] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [ ] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2183/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2183/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2173", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2173/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2173/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2173/events", + "html_url": "https://github.com/hub4j/github-api/pull/2173", + "id": 3751227811, + "node_id": "PR_kwDOAAlq-s66AnNf", + "number": 2173, + "title": "Move to Jackson 3", + "user": { + "login": "pvillard31", + "id": 11541012, + "node_id": "MDQ6VXNlcjExNTQxMDEy", + "avatar_url": "https://avatars.githubusercontent.com/u/11541012?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvillard31", + "html_url": "https://github.com/pvillard31", + "followers_url": "https://api.github.com/users/pvillard31/followers", + "following_url": "https://api.github.com/users/pvillard31/following{/other_user}", + "gists_url": "https://api.github.com/users/pvillard31/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvillard31/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvillard31/subscriptions", + "organizations_url": "https://api.github.com/users/pvillard31/orgs", + "repos_url": "https://api.github.com/users/pvillard31/repos", + "events_url": "https://api.github.com/users/pvillard31/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvillard31/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 5, + "created_at": "2025-12-21T15:03:00Z", + "updated_at": "2026-01-25T02:15:17Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2173", + "html_url": "https://github.com/hub4j/github-api/pull/2173", + "diff_url": "https://github.com/hub4j/github-api/pull/2173.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2173.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nFollowing discussion in #2166.\r\nFixes #2166.\r\n\r\nFor reference: https://github.com/FasterXML/jackson/blob/main/jackson3/MIGRATING_TO_JACKSON_3.md\r\n\r\nThese changes are only targeting the 2.x line since it may be considered as containing breaking changes and requires a minimum java version of Java 17.\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [x] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2173/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2173/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2168", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2168/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2168/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2168/events", + "html_url": "https://github.com/hub4j/github-api/pull/2168", + "id": 3678905639, + "node_id": "PR_kwDOAAlq-s62PChC", + "number": 2168, + "title": "Chore(deps): Bump spring.boot.version from 3.4.5 to 4.0.0", + "user": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1576019209, + "node_id": "MDU6TGFiZWwxNTc2MDE5MjA5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/dependencies", + "name": "dependencies", + "color": "0366d6", + "default": false, + "description": "Pull requests that update a dependency file" + }, + { + "id": 2156391625, + "node_id": "MDU6TGFiZWwyMTU2MzkxNjI1", + "url": "https://api.github.com/repos/hub4j/github-api/labels/java", + "name": "java", + "color": "ffa221", + "default": false, + "description": "Pull requests that update Java code" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-12-01T02:09:06Z", + "updated_at": "2026-01-01T02:00:03Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2168", + "html_url": "https://github.com/hub4j/github-api/pull/2168", + "diff_url": "https://github.com/hub4j/github-api/pull/2168.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2168.patch", + "merged_at": null + }, + "body": "Bumps `spring.boot.version` from 3.4.5 to 4.0.0.\nUpdates `org.springframework.boot:spring-boot-dependencies` from 3.4.5 to 4.0.0\n
\nRelease notes\n

Sourced from org.springframework.boot:spring-boot-dependencies's releases.

\n
\n

v4.0.0

\n

Full release notes for Spring Boot 4.0 are available on the wiki. There is also a migration guide to help you upgrade from Spring Boot 3.5.

\n

:star: New Features

\n
    \n
  • Change tomcat and jetty runtime modules to starters #48175
  • \n
  • Rename spring-boot-kotlin-serialization to align with the name of the Kotlinx module that it pulls in #48076
  • \n
\n

:lady_beetle: Bug Fixes

\n
    \n
  • Error properties are a general web concern and should not be located beneath server.* #48201
  • \n
  • With both Jackson 2 and 3 on the classpath, @JsonTest fails due to duplicate jacksonTesterFactoryBean #48198
  • \n
  • Gradle war task does not exclude starter POMs from lib-provided #48197
  • \n
  • spring.test.webclient.mockrestserviceserver.enabled is not aligned with its module's name #48193
  • \n
  • SslMeterBinder doesn't register metrics for dynamically added bundles if no bundles exist at bind time #48182
  • \n
  • Properties bound in the child management context ignore the parent's environment prefix #48177
  • \n
  • ssl.chain.expiry metrics doesn't update for dynamically registered SSL bundles #48171
  • \n
  • Starter for spring-boot-micrometer-metrics is missing #48161
  • \n
  • Elasticsearch client's sniffer functionality should not be enabled by default #48155
  • \n
  • spring-boot-starter-elasticsearch should depend on elasticsearch-java #48141
  • \n
  • Auto-configuration exclusions are checked using a different class loader to the one that loads auto-configuration classes #48132
  • \n
  • New arm64 macbooks fail to bootBuildImage due to incorrect platform image #48128
  • \n
  • Properties for configuring an isolated JsonMapper or ObjectMapper are incorrectly named #48116
  • \n
  • Buildpack fails with recent Docker installs due to hardcoded version in URL #48103
  • \n
  • Image building may fail when specifying a platform if an image has already been built with a different platform #48099
  • \n
  • Default values of Kotlinx Serialization JSON configuration properties are not documented #48097
  • \n
  • Custom XML converters should override defaults in HttpMessageConverters #48096
  • \n
  • Kotlin serialization is used too aggressively when other JSON libraries are available #48070
  • \n
  • PortInUseException incorrectly thrown on failure to bind port due to Netty IP misconfiguration #48059
  • \n
  • Auto-configured JCacheMetrics cannot be customized #48057
  • \n
  • WebSecurityCustomizer beans are excluded by WebMvcTest #48055
  • \n
  • Deprecated EnvironmentPostProcessor does not resolve arguments #48047
  • \n
  • RetryPolicySettings should refer to maxRetries, not maxAttempts #48023
  • \n
  • Devtools Restarter does not work with a parameterless main method #47996
  • \n
  • Dependency management for Kafka should not manage Scala 2.12 libraries #47991
  • \n
  • spring-boot-mail should depend on jakarta.mail:jakarta.mail-api and org.eclipse.angus:angus-mail instead of org.eclipse.angus:jakarta.mail #47983
  • \n
  • spring-boot-starter-data-mongodb-reactive has dependency on reactor-test #47982
  • \n
  • Support for ReactiveElasticsearchClient is in the wrong module #47848
  • \n
\n

:notebook_with_decorative_cover: Documentation

\n
    \n
  • Removed property spring.test.webclient.register-rest-template is still documented #48199
  • \n
  • Mention support for detecting AWS ECS in "Deploying to the Cloud" #48170
  • \n
  • Revise AWS section of "Deploying to the Cloud" in reference manual #48163
  • \n
  • Fix typo in PortInUseException Javadoc #48134
  • \n
  • Correct section about required setters in "Type-safe Configuration Properties" #48131
  • \n
  • Use since attribute in configuration properties deprecation consistently #48122
  • \n
  • Document EndpointJsonMapper and management.endpoints.jackson.isolated-json-mapper #48115
  • \n
  • Document support for configuring servlet context init parameters using properties #48112
  • \n
  • Some configuration properties are not documented in the appendix #48095
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 1c0e08b Release v4.0.0
  • \n
  • 3487928 Merge branch '3.5.x'
  • \n
  • 29b8e96 Switch make-default in preparation for Spring Boot 4.0.0
  • \n
  • 88da0dd Merge branch '3.5.x'
  • \n
  • 56feeaa Next development version (v3.5.9-SNAPSHOT)
  • \n
  • 3becdc7 Move server.error properties to spring.web.error
  • \n
  • 2b30632 Merge branch '3.5.x'
  • \n
  • 4f03b44 Merge branch '3.4.x' into 3.5.x
  • \n
  • 3d15c13 Next development version (v3.4.13-SNAPSHOT)
  • \n
  • dc140df Upgrade to Spring Framework 7.0.1
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\nUpdates `org.springframework.boot:spring-boot-maven-plugin` from 3.4.5 to 4.0.0\n
\nRelease notes\n

Sourced from org.springframework.boot:spring-boot-maven-plugin's releases.

\n
\n

v4.0.0

\n

Full release notes for Spring Boot 4.0 are available on the wiki. There is also a migration guide to help you upgrade from Spring Boot 3.5.

\n

:star: New Features

\n
    \n
  • Change tomcat and jetty runtime modules to starters #48175
  • \n
  • Rename spring-boot-kotlin-serialization to align with the name of the Kotlinx module that it pulls in #48076
  • \n
\n

:lady_beetle: Bug Fixes

\n
    \n
  • Error properties are a general web concern and should not be located beneath server.* #48201
  • \n
  • With both Jackson 2 and 3 on the classpath, @JsonTest fails due to duplicate jacksonTesterFactoryBean #48198
  • \n
  • Gradle war task does not exclude starter POMs from lib-provided #48197
  • \n
  • spring.test.webclient.mockrestserviceserver.enabled is not aligned with its module's name #48193
  • \n
  • SslMeterBinder doesn't register metrics for dynamically added bundles if no bundles exist at bind time #48182
  • \n
  • Properties bound in the child management context ignore the parent's environment prefix #48177
  • \n
  • ssl.chain.expiry metrics doesn't update for dynamically registered SSL bundles #48171
  • \n
  • Starter for spring-boot-micrometer-metrics is missing #48161
  • \n
  • Elasticsearch client's sniffer functionality should not be enabled by default #48155
  • \n
  • spring-boot-starter-elasticsearch should depend on elasticsearch-java #48141
  • \n
  • Auto-configuration exclusions are checked using a different class loader to the one that loads auto-configuration classes #48132
  • \n
  • New arm64 macbooks fail to bootBuildImage due to incorrect platform image #48128
  • \n
  • Properties for configuring an isolated JsonMapper or ObjectMapper are incorrectly named #48116
  • \n
  • Buildpack fails with recent Docker installs due to hardcoded version in URL #48103
  • \n
  • Image building may fail when specifying a platform if an image has already been built with a different platform #48099
  • \n
  • Default values of Kotlinx Serialization JSON configuration properties are not documented #48097
  • \n
  • Custom XML converters should override defaults in HttpMessageConverters #48096
  • \n
  • Kotlin serialization is used too aggressively when other JSON libraries are available #48070
  • \n
  • PortInUseException incorrectly thrown on failure to bind port due to Netty IP misconfiguration #48059
  • \n
  • Auto-configured JCacheMetrics cannot be customized #48057
  • \n
  • WebSecurityCustomizer beans are excluded by WebMvcTest #48055
  • \n
  • Deprecated EnvironmentPostProcessor does not resolve arguments #48047
  • \n
  • RetryPolicySettings should refer to maxRetries, not maxAttempts #48023
  • \n
  • Devtools Restarter does not work with a parameterless main method #47996
  • \n
  • Dependency management for Kafka should not manage Scala 2.12 libraries #47991
  • \n
  • spring-boot-mail should depend on jakarta.mail:jakarta.mail-api and org.eclipse.angus:angus-mail instead of org.eclipse.angus:jakarta.mail #47983
  • \n
  • spring-boot-starter-data-mongodb-reactive has dependency on reactor-test #47982
  • \n
  • Support for ReactiveElasticsearchClient is in the wrong module #47848
  • \n
\n

:notebook_with_decorative_cover: Documentation

\n
    \n
  • Removed property spring.test.webclient.register-rest-template is still documented #48199
  • \n
  • Mention support for detecting AWS ECS in "Deploying to the Cloud" #48170
  • \n
  • Revise AWS section of "Deploying to the Cloud" in reference manual #48163
  • \n
  • Fix typo in PortInUseException Javadoc #48134
  • \n
  • Correct section about required setters in "Type-safe Configuration Properties" #48131
  • \n
  • Use since attribute in configuration properties deprecation consistently #48122
  • \n
  • Document EndpointJsonMapper and management.endpoints.jackson.isolated-json-mapper #48115
  • \n
  • Document support for configuring servlet context init parameters using properties #48112
  • \n
  • Some configuration properties are not documented in the appendix #48095
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 1c0e08b Release v4.0.0
  • \n
  • 3487928 Merge branch '3.5.x'
  • \n
  • 29b8e96 Switch make-default in preparation for Spring Boot 4.0.0
  • \n
  • 88da0dd Merge branch '3.5.x'
  • \n
  • 56feeaa Next development version (v3.5.9-SNAPSHOT)
  • \n
  • 3becdc7 Move server.error properties to spring.web.error
  • \n
  • 2b30632 Merge branch '3.5.x'
  • \n
  • 4f03b44 Merge branch '3.4.x' into 3.5.x
  • \n
  • 3d15c13 Next development version (v3.4.13-SNAPSHOT)
  • \n
  • dc140df Upgrade to Spring Framework 7.0.1
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2168/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2168/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2171", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2171/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2171/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2171/events", + "html_url": "https://github.com/hub4j/github-api/pull/2171", + "id": 3678910531, + "node_id": "PR_kwDOAAlq-s62PDmc", + "number": 2171, + "title": "Chore(deps): Bump com.squareup.okhttp3:okhttp from 4.12.0 to 5.3.2", + "user": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1576019209, + "node_id": "MDU6TGFiZWwxNTc2MDE5MjA5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/dependencies", + "name": "dependencies", + "color": "0366d6", + "default": false, + "description": "Pull requests that update a dependency file" + }, + { + "id": 2156391625, + "node_id": "MDU6TGFiZWwyMTU2MzkxNjI1", + "url": "https://api.github.com/repos/hub4j/github-api/labels/java", + "name": "java", + "color": "ffa221", + "default": false, + "description": "Pull requests that update Java code" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-12-01T02:11:39Z", + "updated_at": "2026-01-01T02:00:03Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2171", + "html_url": "https://github.com/hub4j/github-api/pull/2171", + "diff_url": "https://github.com/hub4j/github-api/pull/2171.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2171.patch", + "merged_at": null + }, + "body": "Bumps [com.squareup.okhttp3:okhttp](https://github.com/square/okhttp) from 4.12.0 to 5.3.2.\n
\nChangelog\n

Sourced from com.squareup.okhttp3:okhttp's changelog.

\n
\n

Version 5.3.2

\n

2025-11-18

\n
    \n
  • \n

    Fix: Don't delay triggering timeouts. In Okio 3.16.0 we introduced a regression that caused\ntimeouts to fire later than they were supposed to.

    \n
  • \n
  • \n

    Upgrade: [Okio 3.16.4][okio_3_16_4].

    \n
  • \n
\n

Version 5.3.1

\n

2025-11-16

\n

This release is the same as 5.3.0. Okio 3.16.3 didn't have a necessary fix!

\n
    \n
  • Upgrade: [Okio 3.16.3][okio_3_16_3].
  • \n
\n

Version 5.3.0

\n

2025-10-30

\n
    \n
  • \n

    New: Add tags to Call, including computable tags. Use this to attach application-specific\nmetadata to a Call in an EventListener or Interceptor. The tag can be read in any other\nEventListener or Interceptor.

    \n
      override fun intercept(chain: Interceptor.Chain): Response {\n    chain.call().tag(MyAnalyticsTag::class) {\n      MyAnalyticsTag(...)\n    }\n
    return chain.proceed(chain.request())\n
    \n

    }\n

    \n
  • \n
  • \n

    New: Support request bodies on HTTP/1.1 connection upgrades.

    \n
  • \n
  • \n

    New: EventListener.plus() makes it easier to observe events in multiple listeners.

    \n
  • \n
  • \n

    Fix: Don't spam logs with ‘Method isLoggable in android.util.Log not mocked.’ when using\nOkHttp in Robolectric and Paparazzi tests.

    \n
  • \n
  • \n

    Upgrade: [Kotlin 2.2.21][kotlin_2_2_21].

    \n
  • \n
  • \n

    Upgrade: [Okio 3.16.2][okio_3_16_2].

    \n
  • \n
  • \n

    Upgrade: [ZSTD-KMP 0.4.0][zstd_kmp_0_4_0]. This update fixes a bug that caused APKs to fail\n[16 KB ELF alignment checks][elf_alignment].

    \n
  • \n
\n

Version 5.2.3

\n

2025-11-18

\n\n
\n

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.squareup.okhttp3:okhttp&package-manager=maven&previous-version=4.12.0&new-version=5.3.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2171/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2171/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2153", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2153/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2153/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2153/events", + "html_url": "https://github.com/hub4j/github-api/pull/2153", + "id": 3547050854, + "node_id": "PR_kwDOAAlq-s6vY_6j", + "number": 2153, + "title": "(Spike) Move v2 to new package. ", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-10-24T00:06:08Z", + "updated_at": "2025-10-24T00:06:08Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2153", + "html_url": "https://github.com/hub4j/github-api/pull/2153", + "diff_url": "https://github.com/hub4j/github-api/pull/2153.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2153.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nThis is spike considering what it would look like if we published each new version in it's own package. \r\nThe most complex code should be move to internal for reuse in both v1 and v2 public apis. \r\n\r\nMove most v2 to new package. \r\nThen pull rc1 back into existing package. \r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [ ] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [ ] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [ ] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2153/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2153/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2146", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2146/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2146/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2146/events", + "html_url": "https://github.com/hub4j/github-api/pull/2146", + "id": 3453632014, + "node_id": "PR_kwDOAAlq-s6qgk4K", + "number": 2146, + "title": "[feat] Add support for the device authentication flow for github apps", + "user": { + "login": "PierreBtz", + "id": 9881659, + "node_id": "MDQ6VXNlcjk4ODE2NTk=", + "avatar_url": "https://avatars.githubusercontent.com/u/9881659?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/PierreBtz", + "html_url": "https://github.com/PierreBtz", + "followers_url": "https://api.github.com/users/PierreBtz/followers", + "following_url": "https://api.github.com/users/PierreBtz/following{/other_user}", + "gists_url": "https://api.github.com/users/PierreBtz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/PierreBtz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/PierreBtz/subscriptions", + "organizations_url": "https://api.github.com/users/PierreBtz/orgs", + "repos_url": "https://api.github.com/users/PierreBtz/repos", + "events_url": "https://api.github.com/users/PierreBtz/events{/privacy}", + "received_events_url": "https://api.github.com/users/PierreBtz/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-09-25T13:25:37Z", + "updated_at": "2025-09-26T09:05:45Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2146", + "html_url": "https://github.com/hub4j/github-api/pull/2146", + "diff_url": "https://github.com/hub4j/github-api/pull/2146.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2146.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\n*Opening as a draft since the tests are not ready and I have questions about them*\r\n\r\nThis PR provides support for the device authentication flow for github apps, as documented in https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app#using-the-device-flow-to-generate-a-user-access-token (access token generation) and here https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/refreshing-user-access-tokens#refreshing-a-user-access-token-with-a-refresh-token (refresh token).\r\n\r\nThis is needed when developing java CLIs that need to authenticate to GitHub through a GitHub application.\r\n\r\nReproducing here the documentation to help with the understanding:\r\n\r\n```\r\n In order to authenticate to GitHub as an user using the device flow of your GitHub App, you need to use the <<>>\r\n authentication provider that will take care of retrieving a user access token and refresh it when needed for you.\r\n You need to handle two things by yourself:\r\n 1. You need to provide a <<>> that will be called when a new user access token is retrieved (either on initial creation or on refresh).\r\n It is up to you to store the credential object securely the library does not take care of that.\r\n 2. You need to provide a <<>> that will be called when a user interaction is needed to complete the device flow.\r\n The library provides a basic implementation <<>> that will log the instructions to the console but you could imagine a more complex\r\n implementation that would for example open the user browser automatically (or call some automation that will input the information automatically for instance).\r\n\r\n Here is a complete example to get started:\r\n\r\n+-----+\r\n var clientId = \"\";\r\n var objectMapper = new ObjectMapper();\r\n objectMapper.registerModule(new JavaTimeModule());\r\n\r\n // for demo purpose only, this is not proper secret management!!!\r\n var appCredentialsFile = Path.of(\"/tmp/github-app-credentials.json\");\r\n DeviceFlowGithubAppCredentials appCredentials;\r\n if (Files.exists(appCredentialsFile)) {\r\n appCredentials = objectMapper.readValue(appCredentialsFile.toFile(), DeviceFlowGithubAppCredentials.class);\r\n } else {\r\n appCredentials = EMPTY_CREDENTIALS;\r\n }\r\n\r\n var gh = new GitHubBuilder().withAuthorizationProvider(\r\n new DeviceFlowGithubAppAuthorizationProvider(clientId, appCredentials, ac -> {\r\n // in this basic example, we serialize the credentials as json to a file\r\n // this is not proper secret management and you should probably use something more secure\r\n try {\r\n objectMapper.writeValue(appCredentialsFile.toFile(), ac);\r\n } catch (IOException e) {\r\n throw new RuntimeException(e);\r\n }\r\n }, new LoggerDeviceFlowGithubAppInputManager())).build();\r\n+-----+\r\n``` \r\n\r\nOpened questions I have:\r\n\r\n* I'm not too happy that the main class (`DeviceFlowGithubAppAuthorizationProvider`) cannot be in the authorization package (needs access to a package protected method).\r\n* I'm not too sure how to process with tests: I cannot use the recording method since the authorization process is not going through the api endpoints but through the UI ones (`https://github.com/...`). I didn't find anything in the base class test that would help with this. Also I have to use the `.setRawUrlPath(\"https://github.com/login/oauth/access_token\")` which cannot be intercepted as is obviously. This is not only a problem for tests but also for on prem Github and my current thinking is that I need to enrich the API and the testing framework to support a `uiUrl` that would be the equivalent of the `apiUrl` for the UI.\r\n\r\nSince this starts to widen the impact of this change I'm opening this draft to discuss the potential approaches before going further.\r\n\r\n\r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2146/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2146/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2099", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2099/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2099/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2099/events", + "html_url": "https://github.com/hub4j/github-api/pull/2099", + "id": 3037229321, + "node_id": "PR_kwDOAAlq-s6U0PLi", + "number": 2099, + "title": "Refactor pagination", + "user": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2025-05-03T07:23:17Z", + "updated_at": "2025-09-20T08:14:09Z", + "closed_at": null, + "author_association": "MEMBER", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2099", + "html_url": "https://github.com/hub4j/github-api/pull/2099", + "diff_url": "https://github.com/hub4j/github-api/pull/2099.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2099.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [ ] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [ ] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [ ] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2099/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2099/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1986", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1986/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1986/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1986/events", + "html_url": "https://github.com/hub4j/github-api/pull/1986", + "id": 2697030696, + "node_id": "PR_kwDOAAlq-s6DSCb3", + "number": 1986, + "title": "initial feature add", + "user": { + "login": "gitPushPuppets", + "id": 49495486, + "node_id": "MDQ6VXNlcjQ5NDk1NDg2", + "avatar_url": "https://avatars.githubusercontent.com/u/49495486?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gitPushPuppets", + "html_url": "https://github.com/gitPushPuppets", + "followers_url": "https://api.github.com/users/gitPushPuppets/followers", + "following_url": "https://api.github.com/users/gitPushPuppets/following{/other_user}", + "gists_url": "https://api.github.com/users/gitPushPuppets/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gitPushPuppets/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gitPushPuppets/subscriptions", + "organizations_url": "https://api.github.com/users/gitPushPuppets/orgs", + "repos_url": "https://api.github.com/users/gitPushPuppets/repos", + "events_url": "https://api.github.com/users/gitPushPuppets/events{/privacy}", + "received_events_url": "https://api.github.com/users/gitPushPuppets/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 4789870627, + "node_id": "LA_kwDOAAlq-s8AAAABHX-gIw", + "url": "https://api.github.com/repos/hub4j/github-api/labels/work-abandoned", + "name": "work-abandoned", + "color": "000000", + "default": false, + "description": "There hasn't been any activity on the PR in a while. Another contributor might want to pick it up." + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 1, + "created_at": "2024-11-27T04:41:38Z", + "updated_at": "2025-09-04T14:41:30Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/1986", + "html_url": "https://github.com/hub4j/github-api/pull/1986", + "diff_url": "https://github.com/hub4j/github-api/pull/1986.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/1986.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [ ] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [ ] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [ ] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1986/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1986/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2108", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2108/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2108/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2108/events", + "html_url": "https://github.com/hub4j/github-api/pull/2108", + "id": 3148050956, + "node_id": "PR_kwDOAAlq-s6ancHC", + "number": 2108, + "title": "Add missing properties to GHAsset and GHRelease", + "user": { + "login": "solonovamax", + "id": 46940694, + "node_id": "MDQ6VXNlcjQ2OTQwNjk0", + "avatar_url": "https://avatars.githubusercontent.com/u/46940694?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/solonovamax", + "html_url": "https://github.com/solonovamax", + "followers_url": "https://api.github.com/users/solonovamax/followers", + "following_url": "https://api.github.com/users/solonovamax/following{/other_user}", + "gists_url": "https://api.github.com/users/solonovamax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/solonovamax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/solonovamax/subscriptions", + "organizations_url": "https://api.github.com/users/solonovamax/orgs", + "repos_url": "https://api.github.com/users/solonovamax/repos", + "events_url": "https://api.github.com/users/solonovamax/events{/privacy}", + "received_events_url": "https://api.github.com/users/solonovamax/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 4, + "created_at": "2025-06-15T20:42:27Z", + "updated_at": "2025-07-30T16:23:40Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2108", + "html_url": "https://github.com/hub4j/github-api/pull/2108", + "diff_url": "https://github.com/hub4j/github-api/pull/2108.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2108.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nAdds missing fields for the `GHAsset` and `GHRelease` classes.\r\nSee: https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28\r\n\r\nI didn't bother adding tests because it's just new fields/getters. \r\n\r\nFixes #2102\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [x] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2108/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2108/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2098", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2098/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2098/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2098/events", + "html_url": "https://github.com/hub4j/github-api/pull/2098", + "id": 3033530320, + "node_id": "PR_kwDOAAlq-s6Un7vp", + "number": 2098, + "title": "Add polymorphic deserialization for the GHAppInstallation account field", + "user": { + "login": "anujhydrabadi", + "id": 129152617, + "node_id": "U_kgDOB7K2aQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129152617?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/anujhydrabadi", + "html_url": "https://github.com/anujhydrabadi", + "followers_url": "https://api.github.com/users/anujhydrabadi/followers", + "following_url": "https://api.github.com/users/anujhydrabadi/following{/other_user}", + "gists_url": "https://api.github.com/users/anujhydrabadi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anujhydrabadi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anujhydrabadi/subscriptions", + "organizations_url": "https://api.github.com/users/anujhydrabadi/orgs", + "repos_url": "https://api.github.com/users/anujhydrabadi/repos", + "events_url": "https://api.github.com/users/anujhydrabadi/events{/privacy}", + "received_events_url": "https://api.github.com/users/anujhydrabadi/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2025-05-01T09:37:33Z", + "updated_at": "2025-05-01T09:38:01Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2098", + "html_url": "https://github.com/hub4j/github-api/pull/2098", + "diff_url": "https://github.com/hub4j/github-api/pull/2098.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2098.patch", + "merged_at": null + }, + "body": "# Description\r\nFixes #1497 \r\nRecovering PR #1522 \r\nThere is a problem: this works fine for events, but when deserializing App Installation GET API responses, the `type` field (based on which we identify whether the `account` is User or Org) gets unset to `null`. The `account` polymorphic deserialization part works fine though. Perhaps there is a difference in how we are using Jackson at both places (events vs regular API responses), but I have not been able to figure it out yet. \r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [ ] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site \"-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED\"` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2098/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2098/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2065", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/2065/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/2065/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/2065/events", + "html_url": "https://github.com/hub4j/github-api/pull/2065", + "id": 2934401236, + "node_id": "PR_kwDOAAlq-s6PaV84", + "number": 2065, + "title": "Chore(deps): Bump spotbugs.version from 4.8.6 to 4.9.3", + "user": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 1576019209, + "node_id": "MDU6TGFiZWwxNTc2MDE5MjA5", + "url": "https://api.github.com/repos/hub4j/github-api/labels/dependencies", + "name": "dependencies", + "color": "0366d6", + "default": false, + "description": "Pull requests that update a dependency file" + }, + { + "id": 2156391625, + "node_id": "MDU6TGFiZWwyMTU2MzkxNjI1", + "url": "https://api.github.com/repos/hub4j/github-api/labels/java", + "name": "java", + "color": "ffa221", + "default": false, + "description": "Pull requests that update Java code" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2025-03-20T07:38:54Z", + "updated_at": "2025-05-01T02:35:32Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/2065", + "html_url": "https://github.com/hub4j/github-api/pull/2065", + "diff_url": "https://github.com/hub4j/github-api/pull/2065.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/2065.patch", + "merged_at": null + }, + "body": "Bumps `spotbugs.version` from 4.8.6 to 4.9.3.\nUpdates `com.github.spotbugs:spotbugs-annotations` from 4.8.6 to 4.9.3\n
\nRelease notes\n

Sourced from com.github.spotbugs:spotbugs-annotations's releases.

\n
\n

SpotBugs 4.9.3

\n

CHANGELOG

\n

Added

\n
    \n
  • Introduced UselessSuppressionDetector to report the useless annotations instead of NoteSuppressedWarnings (#3348)
  • \n
\n

Fixed

\n
    \n
  • Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3351)
  • \n
\n

CHECKSUM

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
filechecksum (sha256)
spotbugs-4.9.3-javadoc.jar3d0d103724cbaaffc27f17d28d9b17f8972fb378397f8f04f6f05268bde110b7
spotbugs-4.9.3-sources.jar0aa5c905469eb578a3dbe09dcf704cf892568610cdb58550b142d658e37a29d4
spotbugs-4.9.3.tgzd464d56050cf1dbda032e9482e1188f7cd7b7646eaff79c2e6cbe4d6822f4d9f
spotbugs-4.9.3.zip3b2dcf86f97d701700121cee4bd22305d4b54fd9ed7666fa0f53933a4ab92251
spotbugs-annotations-4.9.3-javadoc.jar5fce79dc01a97aae84670922dd3581aa621b980535e4f6695a71db553dcb9cb4
spotbugs-annotations-4.9.3-sources.jar990ad9f3500499a99466b7c1e01284f4f41d1499358e7dc38c8defc59dab114c
spotbugs-annotations.jar13532bfe2f45fcd491432221df72d9cd0efb8f987c9245e12befa192c8925ce3
spotbugs-ant-4.9.3-javadoc.jar346eb5215f9d157ab46c3216a783416e2fa2e8c9d4458143267fb518f81c7d77
spotbugs-ant-4.9.3-sources.jar591073402e4110093a380169acd3f33b26c2f893c2eaed5a6460d9be0b26014e
spotbugs-ant.jar3a6f453696294d5314e648d4891d35e34315e11cb63c758a1601021cc0d803d1
spotbugs.jar710e8b98f1ae23cdb71aaaf07e8d71fb63b44f2bbbaa1df3c3ba0de62aba6ec9
test-harness-4.9.3-javadoc.jar57f51147e289b5c6493f844beaac97cde57773a1d16ce064e9deb8963b3f99ce
test-harness-4.9.3-sources.jar22688f14ef808cde65cc46e86d41c617fc397fc4967516006a73ce8bad658b9f
test-harness-4.9.3.jar9bf5bba9546e4f89032006261dd2921a79fc3044e473ee1fa73af870cb43da15
test-harness-core-4.9.3-javadoc.jar15aac012f3a8c8d6600075efe824aecab8233778e58345fecca65d7970256311
test-harness-core-4.9.3-sources.jar13825de35190089490c7e290b52bafe6a9b08ab431177c0191dae9cf2a88a55d
test-harness-core-4.9.3.jar3c74cc6d2d6f999d403f00f97685587e617d2bf1bfc348bbd0597e785c83feec
test-harness-jupiter-4.9.3-javadoc.jara8f276fb01743b8dc9f8cd6b517ae0748e38f673e31615a923c9c61f5fd9de58
test-harness-jupiter-4.9.3-sources.jar0aefbc5c8bd406e5dc0b1d59bc3afc6889c02010d486b22242f4f19a1a935800
test-harness-jupiter-4.9.3.jar0e9509de32f8fbc94cf088dbee80394fa93807a766532568e652cd622ce737c8
\n

SpotBugs 4.9.2

\n

CHANGELOG

\n

Added

\n
    \n
  • Reporting useless @SuppressFBWarnings annotations (#641)
  • \n
\n

Fixed

\n
    \n
  • Fixed html bug descriptions for AT_STALE_THREAD_WRITE_OF_PRIMITIVE and AT_NONATOMIC_64BIT_PRIMITIVE (#3303)
  • \n
  • Fixed an HSM_HIDING_METHOD false positive when ECJ generates a synthetic method for an enum switch (#3305)
  • \n
  • Fix AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD false negatives, detector depending on method order.
  • \n
  • Fix THROWS_METHOD_THROWS_CLAUSE_THROWABLE reported in a method calling MethodHandle.invokeExact due to its polymorphic signature (#3309)
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive in inner class (#3310).
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive for ECJ compiled enum switches (#3316)
  • \n
  • Fix RC_REF_COMPARISON false positive with Lombok With annotation (#3319)
  • \n
  • Avoid calling File.getCanonicalPath twice to improve performance (#3325)
  • \n
  • Fix MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR and MC_OVERRIDABLE_METHOD_CALL_IN_CLONE false positive when the overridable method is outside the class (#3328).
  • \n
  • Fix NullPointerException thrown from ThrowingExceptions detector (#3337).
  • \n
\n

Removed

\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from com.github.spotbugs:spotbugs-annotations's changelog.

\n
\n

4.9.3 - 2025-03-14

\n

Added

\n
    \n
  • Introduced UselessSuppressionDetector to report the useless annotations instead of NoteSuppressedWarnings (#3348)
  • \n
\n

Fixed

\n
    \n
  • Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3351)
  • \n
\n

4.9.2 - 2025-03-01

\n

Added

\n
    \n
  • Reporting useless @SuppressFBWarnings annotations (#641)
  • \n
\n

Fixed

\n
    \n
  • Fixed html bug descriptions for AT_STALE_THREAD_WRITE_OF_PRIMITIVE and AT_NONATOMIC_64BIT_PRIMITIVE (#3303)
  • \n
  • Fixed an HSM_HIDING_METHOD false positive when ECJ generates a synthetic method for an enum switch (#3305)
  • \n
  • Fix AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD false negatives, detector depending on method order.
  • \n
  • Fix THROWS_METHOD_THROWS_CLAUSE_THROWABLE reported in a method calling MethodHandle.invokeExact due to its polymorphic signature (#3309)
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive in inner class (#3310).
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive for ECJ compiled enum switches (#3316)
  • \n
  • Fix RC_REF_COMPARISON false positive with Lombok With annotation (#3319)
  • \n
  • Avoid calling File.getCanonicalPath twice to improve performance (#3325)
  • \n
  • Fix MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR and MC_OVERRIDABLE_METHOD_CALL_IN_CLONE false positive when the overridable method is outside the class (#3328).
  • \n
  • Fix NullPointerException thrown from ThrowingExceptions detector (#3337).
  • \n
\n

Removed

\n
    \n
  • Removed the TLW_TWO_LOCK_NOTIFY, LI_LAZY_INIT_INSTANCE, BRSA_BAD_RESULTSET_ACCESS, BC_NULL_INSTANCEOF, NP_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR and RCN_REDUNDANT_CHECKED_NULL_COMPARISON deprecated bug patterns.
  • \n
\n

4.9.1 - 2025-02-02

\n

Added

\n
    \n
  • New detector SharedVariableAtomicityDetector for new bug types AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE, AT_NONATOMIC_64BIT_PRIMITIVE and AT_STALE_THREAD_WRITE_OF_PRIMITIVE (See SEI CERT rules VNA00-J, VNA02-J and VNA05-J).
  • \n
  • New detector FindHiddenMethod for bug type HSM_HIDING_METHOD. This bug is reported whenever a subclass method hides the static method of super class. (See SEI CERT MET07-J).
  • \n
\n

Fixed

\n
    \n
  • Fixed the parsing of generics methods in ThrowingExceptions (#3267)
  • \n
  • Accept the 1st parameter of java.util.concurrent.CompletableFuture's completeOnTimeout(), getNow() and obtrudeValue() functions as nullable (#1001).
  • \n
  • Fixed the analysis error when FindReturnRef was checking instructions corresponding to a CFG branch that was optimized away (#3266)
  • \n
  • Added execute file permission to files in the distribution archive (#3274)
  • \n
  • Fixed a stack overflow in MultipleInstantiationsOfSingletons when a singleton initializer makes recursive calls (#3280)
  • \n
  • Fixed NPE in FindReturnRef on inner class fields (#3283)
  • \n
  • Fixed NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE false positive when add edu.umd.cs.findbugs.annotations.Nullable (#3243)
  • \n
\n

4.9.0 - 2025-01-15

\n

Added

\n
    \n
  • Updated the SuppressFBWarnings annotation to support finer grained bug suppressions (#3102)
  • \n
  • SimpleDateFormat, DateTimeFormatter, FastDateFormat string check for bad combinations of flag formatting (#637)
  • \n
  • New detector ResourceInMultipleThreadsDetector and introduced new bug type:\n
      \n
    • AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD is reported in case of unsafe resource access in multiple threads.
    • \n
    \n
  • \n
\n

Fixed

\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 1f6a719 release v4.9.3
  • \n
  • 30f22d8 fix(deps): update junit5 monorepo to v5.12.1 (#3357)
  • \n
  • 4b0cfff cleanup: remove redundant implementations of getDetectorClassName() (#3352)
  • \n
  • bd996f4 chore(deps): update dependency com.diffplug.gradle:goomph to v4.3.0 (#3355)
  • \n
  • e46c442 Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3353)
  • \n
  • 7450785 Introduce UselessSuppressionDetector to report the useless suppressions
  • \n
  • 830e10c fix(deps): update dependency checkstyle to v10.21.4 (#3347)
  • \n
  • b5c7686 fix(deps): update dependency org.checkerframework:checker-qual to v3.49.1 (#3...
  • \n
  • c4b59b1 chore(deps): update sphinxdoc/sphinx docker tag to v8.2.3 (#3344)
  • \n
  • 7fd6fa4 fix(deps): update mockito monorepo to v5.16.0 (#3345)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\nUpdates `com.github.spotbugs:spotbugs` from 4.8.6 to 4.9.3\n
\nRelease notes\n

Sourced from com.github.spotbugs:spotbugs's releases.

\n
\n

SpotBugs 4.9.3

\n

CHANGELOG

\n

Added

\n
    \n
  • Introduced UselessSuppressionDetector to report the useless annotations instead of NoteSuppressedWarnings (#3348)
  • \n
\n

Fixed

\n
    \n
  • Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3351)
  • \n
\n

CHECKSUM

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
filechecksum (sha256)
spotbugs-4.9.3-javadoc.jar3d0d103724cbaaffc27f17d28d9b17f8972fb378397f8f04f6f05268bde110b7
spotbugs-4.9.3-sources.jar0aa5c905469eb578a3dbe09dcf704cf892568610cdb58550b142d658e37a29d4
spotbugs-4.9.3.tgzd464d56050cf1dbda032e9482e1188f7cd7b7646eaff79c2e6cbe4d6822f4d9f
spotbugs-4.9.3.zip3b2dcf86f97d701700121cee4bd22305d4b54fd9ed7666fa0f53933a4ab92251
spotbugs-annotations-4.9.3-javadoc.jar5fce79dc01a97aae84670922dd3581aa621b980535e4f6695a71db553dcb9cb4
spotbugs-annotations-4.9.3-sources.jar990ad9f3500499a99466b7c1e01284f4f41d1499358e7dc38c8defc59dab114c
spotbugs-annotations.jar13532bfe2f45fcd491432221df72d9cd0efb8f987c9245e12befa192c8925ce3
spotbugs-ant-4.9.3-javadoc.jar346eb5215f9d157ab46c3216a783416e2fa2e8c9d4458143267fb518f81c7d77
spotbugs-ant-4.9.3-sources.jar591073402e4110093a380169acd3f33b26c2f893c2eaed5a6460d9be0b26014e
spotbugs-ant.jar3a6f453696294d5314e648d4891d35e34315e11cb63c758a1601021cc0d803d1
spotbugs.jar710e8b98f1ae23cdb71aaaf07e8d71fb63b44f2bbbaa1df3c3ba0de62aba6ec9
test-harness-4.9.3-javadoc.jar57f51147e289b5c6493f844beaac97cde57773a1d16ce064e9deb8963b3f99ce
test-harness-4.9.3-sources.jar22688f14ef808cde65cc46e86d41c617fc397fc4967516006a73ce8bad658b9f
test-harness-4.9.3.jar9bf5bba9546e4f89032006261dd2921a79fc3044e473ee1fa73af870cb43da15
test-harness-core-4.9.3-javadoc.jar15aac012f3a8c8d6600075efe824aecab8233778e58345fecca65d7970256311
test-harness-core-4.9.3-sources.jar13825de35190089490c7e290b52bafe6a9b08ab431177c0191dae9cf2a88a55d
test-harness-core-4.9.3.jar3c74cc6d2d6f999d403f00f97685587e617d2bf1bfc348bbd0597e785c83feec
test-harness-jupiter-4.9.3-javadoc.jara8f276fb01743b8dc9f8cd6b517ae0748e38f673e31615a923c9c61f5fd9de58
test-harness-jupiter-4.9.3-sources.jar0aefbc5c8bd406e5dc0b1d59bc3afc6889c02010d486b22242f4f19a1a935800
test-harness-jupiter-4.9.3.jar0e9509de32f8fbc94cf088dbee80394fa93807a766532568e652cd622ce737c8
\n

SpotBugs 4.9.2

\n

CHANGELOG

\n

Added

\n
    \n
  • Reporting useless @SuppressFBWarnings annotations (#641)
  • \n
\n

Fixed

\n
    \n
  • Fixed html bug descriptions for AT_STALE_THREAD_WRITE_OF_PRIMITIVE and AT_NONATOMIC_64BIT_PRIMITIVE (#3303)
  • \n
  • Fixed an HSM_HIDING_METHOD false positive when ECJ generates a synthetic method for an enum switch (#3305)
  • \n
  • Fix AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD false negatives, detector depending on method order.
  • \n
  • Fix THROWS_METHOD_THROWS_CLAUSE_THROWABLE reported in a method calling MethodHandle.invokeExact due to its polymorphic signature (#3309)
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive in inner class (#3310).
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive for ECJ compiled enum switches (#3316)
  • \n
  • Fix RC_REF_COMPARISON false positive with Lombok With annotation (#3319)
  • \n
  • Avoid calling File.getCanonicalPath twice to improve performance (#3325)
  • \n
  • Fix MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR and MC_OVERRIDABLE_METHOD_CALL_IN_CLONE false positive when the overridable method is outside the class (#3328).
  • \n
  • Fix NullPointerException thrown from ThrowingExceptions detector (#3337).
  • \n
\n

Removed

\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from com.github.spotbugs:spotbugs's changelog.

\n
\n

4.9.3 - 2025-03-14

\n

Added

\n
    \n
  • Introduced UselessSuppressionDetector to report the useless annotations instead of NoteSuppressedWarnings (#3348)
  • \n
\n

Fixed

\n
    \n
  • Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3351)
  • \n
\n

4.9.2 - 2025-03-01

\n

Added

\n
    \n
  • Reporting useless @SuppressFBWarnings annotations (#641)
  • \n
\n

Fixed

\n
    \n
  • Fixed html bug descriptions for AT_STALE_THREAD_WRITE_OF_PRIMITIVE and AT_NONATOMIC_64BIT_PRIMITIVE (#3303)
  • \n
  • Fixed an HSM_HIDING_METHOD false positive when ECJ generates a synthetic method for an enum switch (#3305)
  • \n
  • Fix AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD false negatives, detector depending on method order.
  • \n
  • Fix THROWS_METHOD_THROWS_CLAUSE_THROWABLE reported in a method calling MethodHandle.invokeExact due to its polymorphic signature (#3309)
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive in inner class (#3310).
  • \n
  • Fix AT_STALE_THREAD_WRITE_OF_PRIMITIVE false positive for ECJ compiled enum switches (#3316)
  • \n
  • Fix RC_REF_COMPARISON false positive with Lombok With annotation (#3319)
  • \n
  • Avoid calling File.getCanonicalPath twice to improve performance (#3325)
  • \n
  • Fix MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR and MC_OVERRIDABLE_METHOD_CALL_IN_CLONE false positive when the overridable method is outside the class (#3328).
  • \n
  • Fix NullPointerException thrown from ThrowingExceptions detector (#3337).
  • \n
\n

Removed

\n
    \n
  • Removed the TLW_TWO_LOCK_NOTIFY, LI_LAZY_INIT_INSTANCE, BRSA_BAD_RESULTSET_ACCESS, BC_NULL_INSTANCEOF, NP_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR and RCN_REDUNDANT_CHECKED_NULL_COMPARISON deprecated bug patterns.
  • \n
\n

4.9.1 - 2025-02-02

\n

Added

\n
    \n
  • New detector SharedVariableAtomicityDetector for new bug types AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE, AT_NONATOMIC_64BIT_PRIMITIVE and AT_STALE_THREAD_WRITE_OF_PRIMITIVE (See SEI CERT rules VNA00-J, VNA02-J and VNA05-J).
  • \n
  • New detector FindHiddenMethod for bug type HSM_HIDING_METHOD. This bug is reported whenever a subclass method hides the static method of super class. (See SEI CERT MET07-J).
  • \n
\n

Fixed

\n
    \n
  • Fixed the parsing of generics methods in ThrowingExceptions (#3267)
  • \n
  • Accept the 1st parameter of java.util.concurrent.CompletableFuture's completeOnTimeout(), getNow() and obtrudeValue() functions as nullable (#1001).
  • \n
  • Fixed the analysis error when FindReturnRef was checking instructions corresponding to a CFG branch that was optimized away (#3266)
  • \n
  • Added execute file permission to files in the distribution archive (#3274)
  • \n
  • Fixed a stack overflow in MultipleInstantiationsOfSingletons when a singleton initializer makes recursive calls (#3280)
  • \n
  • Fixed NPE in FindReturnRef on inner class fields (#3283)
  • \n
  • Fixed NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE false positive when add edu.umd.cs.findbugs.annotations.Nullable (#3243)
  • \n
\n

4.9.0 - 2025-01-15

\n

Added

\n
    \n
  • Updated the SuppressFBWarnings annotation to support finer grained bug suppressions (#3102)
  • \n
  • SimpleDateFormat, DateTimeFormatter, FastDateFormat string check for bad combinations of flag formatting (#637)
  • \n
  • New detector ResourceInMultipleThreadsDetector and introduced new bug type:\n
      \n
    • AT_UNSAFE_RESOURCE_ACCESS_IN_THREAD is reported in case of unsafe resource access in multiple threads.
    • \n
    \n
  • \n
\n

Fixed

\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 1f6a719 release v4.9.3
  • \n
  • 30f22d8 fix(deps): update junit5 monorepo to v5.12.1 (#3357)
  • \n
  • 4b0cfff cleanup: remove redundant implementations of getDetectorClassName() (#3352)
  • \n
  • bd996f4 chore(deps): update dependency com.diffplug.gradle:goomph to v4.3.0 (#3355)
  • \n
  • e46c442 Do not report US_USELESS_SUPPRESSION_ON_METHOD on synthetic methods (#3353)
  • \n
  • 7450785 Introduce UselessSuppressionDetector to report the useless suppressions
  • \n
  • 830e10c fix(deps): update dependency checkstyle to v10.21.4 (#3347)
  • \n
  • b5c7686 fix(deps): update dependency org.checkerframework:checker-qual to v3.49.1 (#3...
  • \n
  • c4b59b1 chore(deps): update sphinxdoc/sphinx docker tag to v8.2.3 (#3344)
  • \n
  • 7fd6fa4 fix(deps): update mockito monorepo to v5.16.0 (#3345)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/2065/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/2065/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1917", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1917/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1917/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1917/events", + "html_url": "https://github.com/hub4j/github-api/pull/1917", + "id": 2492934092, + "node_id": "PR_kwDOAAlq-s55wQBP", + "number": 1917, + "title": "Support setting & checking AutomatedSecurityFixes", + "user": { + "login": "ranma2913", + "id": 4295880, + "node_id": "MDQ6VXNlcjQyOTU4ODA=", + "avatar_url": "https://avatars.githubusercontent.com/u/4295880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ranma2913", + "html_url": "https://github.com/ranma2913", + "followers_url": "https://api.github.com/users/ranma2913/followers", + "following_url": "https://api.github.com/users/ranma2913/following{/other_user}", + "gists_url": "https://api.github.com/users/ranma2913/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ranma2913/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ranma2913/subscriptions", + "organizations_url": "https://api.github.com/users/ranma2913/orgs", + "repos_url": "https://api.github.com/users/ranma2913/repos", + "events_url": "https://api.github.com/users/ranma2913/events{/privacy}", + "received_events_url": "https://api.github.com/users/ranma2913/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 4789870627, + "node_id": "LA_kwDOAAlq-s8AAAABHX-gIw", + "url": "https://api.github.com/repos/hub4j/github-api/labels/work-abandoned", + "name": "work-abandoned", + "color": "000000", + "default": false, + "description": "There hasn't been any activity on the PR in a while. Another contributor might want to pick it up." + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2024-08-28T20:27:53Z", + "updated_at": "2025-01-14T18:08:46Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/1917", + "html_url": "https://github.com/hub4j/github-api/pull/1917", + "diff_url": "https://github.com/hub4j/github-api/pull/1917.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/1917.patch", + "merged_at": null + }, + "body": "https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#check-if-automated-security-fixes-are-enabled-for-a-repository\r\n\r\n# Description\r\n\r\nFixes #1916\r\n\r\nThis change will support Support Endpoints:\r\n\r\n https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#check-if-automated-security-fixes-are-enabled-for-a-repository\r\n https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#enable-automated-security-fixes\r\n https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#disable-automated-security-fixes\r\n\r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [x] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [x] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1917/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1917/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1787", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1787/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1787/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1787/events", + "html_url": "https://github.com/hub4j/github-api/pull/1787", + "id": 2122147185, + "node_id": "PR_kwDOAAlq-s5mNyo1", + "number": 1787, + "title": "Code Scanning API support", + "user": { + "login": "wwong", + "id": 1160302, + "node_id": "MDQ6VXNlcjExNjAzMDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1160302?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/wwong", + "html_url": "https://github.com/wwong", + "followers_url": "https://api.github.com/users/wwong/followers", + "following_url": "https://api.github.com/users/wwong/following{/other_user}", + "gists_url": "https://api.github.com/users/wwong/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wwong/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wwong/subscriptions", + "organizations_url": "https://api.github.com/users/wwong/orgs", + "repos_url": "https://api.github.com/users/wwong/repos", + "events_url": "https://api.github.com/users/wwong/events{/privacy}", + "received_events_url": "https://api.github.com/users/wwong/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 4789870627, + "node_id": "LA_kwDOAAlq-s8AAAABHX-gIw", + "url": "https://api.github.com/repos/hub4j/github-api/labels/work-abandoned", + "name": "work-abandoned", + "color": "000000", + "default": false, + "description": "There hasn't been any activity on the PR in a while. Another contributor might want to pick it up." + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 6, + "created_at": "2024-02-07T04:08:42Z", + "updated_at": "2024-07-01T19:15:15Z", + "closed_at": null, + "author_association": "NONE", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/1787", + "html_url": "https://github.com/hub4j/github-api/pull/1787", + "diff_url": "https://github.com/hub4j/github-api/pull/1787.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/1787.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\nFollowing up on open comments from https://github.com/hub4j/github-api/pull/1142 and https://github.com/cortexapps/github-api/pull/8\r\n\r\nI don't currently have access to the security alerts for the example test repo (https://github.com/hub4j-test-org/Pixi), so the response fields might be slightly outdated until I (or someone else) can re-record the wiremock samples.\r\n\r\nStart of an (incomplete) implementation for https://github.com/hub4j/github-api/issues/1133 (will add more endpoints in a later PR)\r\n\r\nThis change adds the read-only calls for the following endpoints, as they were originally implemented in previous PRs:\r\n* [List code scanning alerts for a repository](https://docs.github.com/en/rest/code-scanning/code-scanning?apiVersion=2022-11-28#list-code-scanning-alerts-for-a-repository)\r\n* [Get a code scanning alert](https://docs.github.com/en/rest/code-scanning/code-scanning?apiVersion=2022-11-28#get-a-code-scanning-alert)\r\n\r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Add JavaDocs and other comments explaining the behavior. \r\n- [x] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [x] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [x] Run `mvn -D enable-ci clean install site` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [ ] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [ ] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [ ] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1787/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1787/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1730", + "repository_url": "https://api.github.com/repos/hub4j/github-api", + "labels_url": "https://api.github.com/repos/hub4j/github-api/issues/1730/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/issues/1730/comments", + "events_url": "https://api.github.com/repos/hub4j/github-api/issues/1730/events", + "html_url": "https://github.com/hub4j/github-api/pull/1730", + "id": 1952864832, + "node_id": "PR_kwDOAAlq-s5dTnjz", + "number": 1730, + "title": "Paginator", + "user": { + "login": "anujhydrabadi", + "id": 129152617, + "node_id": "U_kgDOB7K2aQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129152617?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/anujhydrabadi", + "html_url": "https://github.com/anujhydrabadi", + "followers_url": "https://api.github.com/users/anujhydrabadi/followers", + "following_url": "https://api.github.com/users/anujhydrabadi/following{/other_user}", + "gists_url": "https://api.github.com/users/anujhydrabadi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anujhydrabadi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anujhydrabadi/subscriptions", + "organizations_url": "https://api.github.com/users/anujhydrabadi/orgs", + "repos_url": "https://api.github.com/users/anujhydrabadi/repos", + "events_url": "https://api.github.com/users/anujhydrabadi/events{/privacy}", + "received_events_url": "https://api.github.com/users/anujhydrabadi/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 4789870627, + "node_id": "LA_kwDOAAlq-s8AAAABHX-gIw", + "url": "https://api.github.com/repos/hub4j/github-api/labels/work-abandoned", + "name": "work-abandoned", + "color": "000000", + "default": false, + "description": "There hasn't been any activity on the PR in a while. Another contributor might want to pick it up." + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": null, + "comments": 3, + "created_at": "2023-10-19T18:48:14Z", + "updated_at": "2024-06-20T03:14:40Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "type": null, + "active_lock_reason": null, + "draft": true, + "pull_request": { + "url": "https://api.github.com/repos/hub4j/github-api/pulls/1730", + "html_url": "https://github.com/hub4j/github-api/pull/1730", + "diff_url": "https://github.com/hub4j/github-api/pull/1730.diff", + "patch_url": "https://github.com/hub4j/github-api/pull/1730.patch", + "merged_at": null + }, + "body": "# Description\r\n\r\n`paginator()` method in `PagedIterable` to support starting at a particular page, and next, previous, first, last and jumping to any particular page, along with a few other supporting methods. Made in parallel to `iterator()` method so as to keep backward compatibility, but supports all functionality that `iterator()` provides.\r\n\r\nFixes #348 \r\nFixes #1614 \r\nFixes #448 \r\nFixes #1197 \r\n\r\n# Before submitting a PR:\r\n\r\n- [x] Changes must not break binary backwards compatibility. If you are unclear on how to make the change you think is needed while maintaining backward compatibility, [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Add JavaDocs and other comments explaining the behavior. \r\n- [ ] When adding or updating methods that fetch entities, add `@link` JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest . \r\n- [ ] Add tests that cover any added or changed code. This generally requires capturing snapshot test data. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\r\n- [ ] Run `mvn -D enable-ci clean install site` locally. If this command doesn't succeed, your change will not pass CI.\r\n- [x] Push your changes to a branch other than `main`. You will create your PR from that branch.\r\n\r\n# When creating a PR: \r\n\r\n- [x] Fill in the \"Description\" above with clear summary of the changes. This includes:\r\n - [x] If this PR fixes one or more issues, include \"Fixes #\" lines for each issue. \r\n - [ ] Provide links to relevant documentation on https://docs.github.com/en/rest where possible. If not including links, explain why not.\r\n- [ ] All lines of new code should be covered by tests as reported by code coverage. Any lines that are not covered must have PR comments explaining why they cannot be covered. For example, \"Reaching this particular exception is hard and is not a particular common scenario.\"\r\n- [x] Enable \"Allow edits from maintainers\".\r\n", + "reactions": { + "url": "https://api.github.com/repos/hub4j/github-api/issues/1730/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j/github-api/issues/1730/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + } + ] +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/mappings/1-user.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/mappings/1-user.json new file mode 100644 index 0000000000..5e6914f8ac --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/mappings/1-user.json @@ -0,0 +1,48 @@ +{ + "id": "10a0d673-1b68-4b43-a693-0aa4af0ce268", + "name": "user", + "request": { + "url": "/user", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "1-user.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:38:35 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"15d7e1ad92a3639b979fc55254902e63ee0bfa5c8f6766990bf989044d491ce1\"", + "Last-Modified": "Sat, 24 Jan 2026 22:07:12 GMT", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4970", + "X-RateLimit-Reset": "1769372833", + "X-RateLimit-Used": "30", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "F729:24E46A:660091E:5785FC3:6976713B" + } + }, + "uuid": "10a0d673-1b68-4b43-a693-0aa4af0ce268", + "persistent": true, + "insertionIndex": 1 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/mappings/2-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/mappings/2-search_issues.json new file mode 100644 index 0000000000..a1a95a6c55 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/mappings/2-search_issues.json @@ -0,0 +1,49 @@ +{ + "id": "ec183035-31a6-476e-b33b-99fbc7df7a18", + "name": "search_issues", + "request": { + "url": "/search/issues?sort=updated&q=repo%3Ahub4j%2Fgithub-api+is%3Apr+is%3Aopen", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "2-search_issues.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:38:36 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "no-cache", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "X-RateLimit-Limit": "30", + "X-RateLimit-Remaining": "29", + "X-RateLimit-Reset": "1769369976", + "X-RateLimit-Used": "1", + "X-RateLimit-Resource": "search", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-GitHub-Request-Id": "F72B:121DD1:616A142:52B0E01:6976713B" + } + }, + "uuid": "ec183035-31a6-476e-b33b-99fbc7df7a18", + "persistent": true, + "scenarioName": "scenario-1-search-issues", + "requiredScenarioState": "Started", + "newScenarioState": "scenario-1-search-issues-2", + "insertionIndex": 2 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/mappings/3-search_issues.json b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/mappings/3-search_issues.json new file mode 100644 index 0000000000..d7e7f00bf6 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/AppTest/wiremock/testIssueSearchPullRequestsOnly/mappings/3-search_issues.json @@ -0,0 +1,48 @@ +{ + "id": "237fcf1d-1d48-4f46-8ea8-4a6db6c14953", + "name": "search_issues", + "request": { + "url": "/search/issues?sort=updated&q=repo%3Ahub4j%2Fgithub-api+is%3Apr+is%3Aopen", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "3-search_issues.json", + "headers": { + "Date": "Sun, 25 Jan 2026 19:38:37 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "no-cache", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "X-OAuth-Scopes": "repo", + "X-Accepted-OAuth-Scopes": "", + "github-authentication-token-expiration": "2026-02-19 19:55:13 UTC", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "X-RateLimit-Limit": "30", + "X-RateLimit-Remaining": "28", + "X-RateLimit-Reset": "1769369976", + "X-RateLimit-Used": "2", + "X-RateLimit-Resource": "search", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-GitHub-Request-Id": "F72C:202497:650445E:56326B6:6976713C" + } + }, + "uuid": "237fcf1d-1d48-4f46-8ea8-4a6db6c14953", + "persistent": true, + "scenarioName": "scenario-1-search-issues", + "requiredScenarioState": "scenario-1-search-issues-2", + "insertionIndex": 3 +} \ No newline at end of file