diff --git a/README.md b/README.md index 6e8bda4..b28e305 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,14 @@ jira: titlePattern: ".*\\bmaven\\b.*\\bplugin\\b.*" # will ignore build dependency upgrades i.e. maven plugin version upgrades. - user: all-contributors[bot] titlePattern: ".*" + # ignore check rule can also be performed against a GH team within an org. + # in such case the username is ignored and only team/title are considered: + - team: + # A team name within the organization: + name: team-name + # Organization name, i.e. hibernate + organization: org-name + titlePattern: ".*" # To skip commits that contain only irrelevant files for JIRA-related checks (commit includes JIRA issue key), # a list of ignored files rules can be configured: ignoreFiles: diff --git a/src/main/java/org/hibernate/infra/bot/CheckPullRequestContributionRules.java b/src/main/java/org/hibernate/infra/bot/CheckPullRequestContributionRules.java index cf73ae5..bb7e1c6 100644 --- a/src/main/java/org/hibernate/infra/bot/CheckPullRequestContributionRules.java +++ b/src/main/java/org/hibernate/infra/bot/CheckPullRequestContributionRules.java @@ -32,7 +32,9 @@ import org.kohsuke.github.GHPullRequest; import org.kohsuke.github.GHPullRequestCommitDetail; import org.kohsuke.github.GHRepository; +import org.kohsuke.github.GHTeam; import org.kohsuke.github.GHUser; +import org.kohsuke.github.GitHub; public class CheckPullRequestContributionRules { @@ -58,35 +60,36 @@ void pullRequestChanged( @PullRequest.Opened @PullRequest.Reopened @PullRequest.Edited @PullRequest.Synchronize GHEventPayload.PullRequest payload, @ConfigFile("hibernate-github-bot.yml") RepositoryConfig repositoryConfig, - @ConfigFile("PULL_REQUEST_TEMPLATE.md") String pullRequestTemplate) throws IOException { - checkPullRequestContributionRules( payload.getRepository(), repositoryConfig, pullRequestTemplate, payload.getPullRequest() ); + @ConfigFile("PULL_REQUEST_TEMPLATE.md") String pullRequestTemplate, + GitHub gitHub) throws IOException { + checkPullRequestContributionRules( payload.getRepository(), gitHub, repositoryConfig, pullRequestTemplate, payload.getPullRequest() ); } void checkRunRequested(@CheckRun.Rerequested GHEventPayload.CheckRun payload, @ConfigFile("hibernate-github-bot.yml") RepositoryConfig repositoryConfig, - @ConfigFile("PULL_REQUEST_TEMPLATE.md") String pullRequestTemplate) throws IOException { + @ConfigFile("PULL_REQUEST_TEMPLATE.md") String pullRequestTemplate, + GitHub gitHub) throws IOException { for ( GHPullRequest pullRequest : payload.getCheckRun().getPullRequests() ) { - checkPullRequestContributionRules( payload.getRepository(), repositoryConfig, pullRequestTemplate, pullRequest ); + checkPullRequestContributionRules( payload.getRepository(), gitHub, repositoryConfig, pullRequestTemplate, pullRequest ); } } void checkSuiteRequested(@CheckSuite.Requested @CheckSuite.Rerequested GHEventPayload.CheckSuite payload, @ConfigFile("hibernate-github-bot.yml") RepositoryConfig repositoryConfig, - @ConfigFile("PULL_REQUEST_TEMPLATE.md") String pullRequestTemplate) throws IOException { + @ConfigFile("PULL_REQUEST_TEMPLATE.md") String pullRequestTemplate, + GitHub gitHub) throws IOException { for ( GHPullRequest pullRequest : payload.getCheckSuite().getPullRequests() ) { - checkPullRequestContributionRules( payload.getRepository(), repositoryConfig, pullRequestTemplate, pullRequest ); + checkPullRequestContributionRules( payload.getRepository(), gitHub, repositoryConfig, pullRequestTemplate, pullRequest ); } } - private void checkPullRequestContributionRules(GHRepository repository, RepositoryConfig repositoryConfig, - String pullRequestTemplate, - GHPullRequest pullRequest) - throws IOException { + private void checkPullRequestContributionRules(GHRepository repository, GitHub gitHub, RepositoryConfig repositoryConfig, + String pullRequestTemplate, GHPullRequest pullRequest) throws IOException { if ( !shouldCheck( repository, pullRequest ) ) { return; } - PullRequestCheckRunContext context = new PullRequestCheckRunContext( deploymentConfig, repository, repositoryConfig, pullRequest ); + PullRequestCheckRunContext context = new PullRequestCheckRunContext( deploymentConfig, gitHub, repository, repositoryConfig, pullRequest ); List checks = createChecks( repositoryConfig, pullRequestTemplate ); List outputs = new ArrayList<>(); for ( PullRequestCheck check : checks ) { @@ -323,8 +326,21 @@ protected boolean shouldCheckPullRequest(PullRequestCheckRunContext context) thr GHUser author = context.pullRequest.getUser(); String title = context.pullRequest.getTitle(); for ( RepositoryConfig.IgnoreConfiguration ignore : ignoredPRConfigurations ) { - if ( ignore.getUser().equals( author.getLogin() ) - && ignore.getTitlePattern().matcher( title ).matches() ) { + if ( ignore.getTeam().isPresent() ) { + boolean userTeamCanSkip = false; + var teamToFind = ignore.getTeam().get(); + GHTeam team = context.gitHub.getOrganization( teamToFind.getOrganization() ).getTeamByName( teamToFind.getName() ); + for ( GHUser user : team.listMembers() ) { + if ( user.getLogin().equals( author.getLogin() ) ) { + userTeamCanSkip = true; + break; + } + } + if ( userTeamCanSkip && ignore.getTitlePattern().matcher( title ).matches() ) { + return false; + } + } + else if ( ignore.getUser().equals( author.getLogin() ) && ignore.getTitlePattern().matcher( title ).matches() ) { return false; } } diff --git a/src/main/java/org/hibernate/infra/bot/config/RepositoryConfig.java b/src/main/java/org/hibernate/infra/bot/config/RepositoryConfig.java index e277199..32ab729 100644 --- a/src/main/java/org/hibernate/infra/bot/config/RepositoryConfig.java +++ b/src/main/java/org/hibernate/infra/bot/config/RepositoryConfig.java @@ -75,6 +75,7 @@ public static class IgnoreConfiguration { private String user; private Pattern titlePattern; + private Optional team = Optional.empty(); public String getUser() { return user; @@ -91,6 +92,35 @@ public Pattern getTitlePattern() { public void setTitlePattern(String titlePattern) { this.titlePattern = Patterns.compile( titlePattern ); } + + public Optional getTeam() { + return team; + } + + public void setTeam(GitHubTeam team) { + this.team = Optional.of( team ); + } + + public static class GitHubTeam { + private String name; + private String organization; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getOrganization() { + return organization; + } + + public void setOrganization(String organization) { + this.organization = organization; + } + } } public static class Develocity { diff --git a/src/main/java/org/hibernate/infra/bot/prcheck/PullRequestCheckRunContext.java b/src/main/java/org/hibernate/infra/bot/prcheck/PullRequestCheckRunContext.java index b508e01..61b2361 100644 --- a/src/main/java/org/hibernate/infra/bot/prcheck/PullRequestCheckRunContext.java +++ b/src/main/java/org/hibernate/infra/bot/prcheck/PullRequestCheckRunContext.java @@ -5,17 +5,20 @@ import org.kohsuke.github.GHPullRequest; import org.kohsuke.github.GHRepository; +import org.kohsuke.github.GitHub; public final class PullRequestCheckRunContext { public final DeploymentConfig deploymentConfig; + public final GitHub gitHub; public final GHRepository repository; public final GHPullRequest pullRequest; public final RepositoryConfig repositoryConfig; - public PullRequestCheckRunContext(DeploymentConfig deploymentConfig, GHRepository repository, - RepositoryConfig repositoryConfig, GHPullRequest pullRequest) { + public PullRequestCheckRunContext(DeploymentConfig deploymentConfig, GitHub gitHub, GHRepository repository, + RepositoryConfig repositoryConfig, GHPullRequest pullRequest) { this.deploymentConfig = deploymentConfig; + this.gitHub = gitHub; this.repository = repository; this.repositoryConfig = repositoryConfig; this.pullRequest = pullRequest; diff --git a/src/test/java/org/hibernate/infra/bot/tests/CheckPullRequestContributionRulesLicenseTest.java b/src/test/java/org/hibernate/infra/bot/tests/CheckPullRequestContributionRulesLicenseTest.java index 41666eb..73d5926 100644 --- a/src/test/java/org/hibernate/infra/bot/tests/CheckPullRequestContributionRulesLicenseTest.java +++ b/src/test/java/org/hibernate/infra/bot/tests/CheckPullRequestContributionRulesLicenseTest.java @@ -2,12 +2,15 @@ import static io.quarkiverse.githubapp.testing.GitHubAppTesting.given; import static org.assertj.core.api.Assertions.assertThat; +import static org.hibernate.infra.bot.tests.PullRequestMockHelper.mockPagedIterable; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import java.io.IOException; +import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -17,9 +20,15 @@ import org.kohsuke.github.GHCheckRun; import org.kohsuke.github.GHCheckRunBuilder; import org.kohsuke.github.GHEvent; +import org.kohsuke.github.GHOrganization; import org.kohsuke.github.GHPullRequest; import org.kohsuke.github.GHRepository; +import org.kohsuke.github.GHTeam; +import org.kohsuke.github.GHUser; +import org.kohsuke.github.GitHub; +import org.kohsuke.github.PagedIterable; import org.mockito.ArgumentCaptor; +import org.mockito.ArgumentMatchers; import org.mockito.junit.jupiter.MockitoExtension; @QuarkusTest @@ -208,4 +217,67 @@ void licenseCheckIgnored() throws IOException { } ); } + @Test + void licenseCheckIgnoredByTeam() throws IOException { + long repoId = 344815557L; + long prId = 585627026L; + given() + .github( mocks -> { + mocks.configFile( "hibernate-github-bot.yml" ) + .fromString( """ + jira: + projectKey: "HSEARCH" + # We also ignore jira keys check as dependabot PRs won't have them anyways: + ignore: + - user: dependabot[bot] + titlePattern: ".*\\\\bmaven\\\\b.*\\\\bplugin\\\\b.*" + licenseAgreement: + enabled: true + ignore: + - team: + name: skippable + organization: hibernate + titlePattern: ".*+" + """ ); + mocks.configFile( "PULL_REQUEST_TEMPLATE.md" ) + .fromString( """ + [Please describe here what your change is about] + + + ---------------------- + By submitting this pull request, I confirm that my contribution is made under the terms of the [Apache 2.0 license](https://www.apache.org/licenses/LICENSE-2.0.txt) + and can be relicensed under the terms of the [LGPL v2.1 license](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) in the future at the maintainers' discretion. + For more information on licensing, please check [here](https://github.com/hibernate/hibernate-search/blob/main/CONTRIBUTING.md#legal). + + ---------------------- + """ ); + + GHRepository repoMock = mocks.repository( "yrodiere/hibernate-github-bot-playground" ); + when( repoMock.getId() ).thenReturn( repoId ); + GitHub gitHubMock = mocks.installationClient( 15144501L ); // see the submitted JSON file for this value + GHOrganization organization = mock( GHOrganization.class ); + GHTeam team = mock( GHTeam.class ); + GHUser user = mock( GHUser.class ); + when( user.getLogin() ).thenReturn( "dependabot[bot]" ); + PagedIterable page = mockPagedIterable( List.of( user ) ); + when( team.listMembers() ).thenReturn( page ); + when( organization.getTeamByName( ArgumentMatchers.eq( "skippable" ) ) ).thenReturn( team ); + when( gitHubMock.getOrganization( ( anyString() ) ) ).thenReturn( organization ); + + PullRequestMockHelper.start( mocks, prId, repoMock ) + .noComments(); + + mockCheckRuns( repoMock, "6e9f11a1e2946b207c6eb245ec942f2b5a3ea156" ); + } ) + .when() + .payloadFromClasspath( "/pullrequest-opened-hsearch-1111-skippable-team-member.json" ) + .event( GHEvent.PULL_REQUEST ) + .then() + .github( mocks -> { + verifyNoMoreInteractions( mocks.ghObjects() ); + } ); + } + } diff --git a/src/test/resources/pullrequest-opened-hsearch-1111-skippable-team-member.json b/src/test/resources/pullrequest-opened-hsearch-1111-skippable-team-member.json new file mode 100644 index 0000000..916c15e --- /dev/null +++ b/src/test/resources/pullrequest-opened-hsearch-1111-skippable-team-member.json @@ -0,0 +1,478 @@ +{ + "action": "opened", + "number": 1, + "pull_request": { + "url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls/1", + "id": 585627026, + "node_id": "MDExOlB1bGxSZXF1ZXN0NTg1NjI3MDI2", + "html_url": "https://github.com/yrodiere/hibernate-github-bot-playground/pull/1", + "diff_url": "https://github.com/yrodiere/hibernate-github-bot-playground/pull/1.diff", + "patch_url": "https://github.com/yrodiere/hibernate-github-bot-playground/pull/1.patch", + "issue_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues/1", + "number": 1, + "state": "open", + "locked": false, + "title": "Bump maven-clean-plugin from 3.2.0 to 3.3.1", + "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", + "site_admin": false + }, + "body": "Bumps [maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.2.0 to 3.3.1.\n
\nRelease notes\n

Sourced from maven-clean-plugin's releases.

\n
\n

maven-clean-plugin-3.3.1

\n

What's Changed

\n\n

New Contributors

\n\n

Full Changelog: https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.2.0...maven-clean-plugin-3.3.1

\n
\n
\n
\nCommits\n
    \n
  • 9a76f97 [maven-release-plugin] prepare release maven-clean-plugin-3.3.1
  • \n
  • 91e81a2 Move plexus-xml to the provided scope
  • \n
  • c83dfcb [maven-release-plugin] prepare for next development iteration
  • \n
  • a4ad88f [maven-release-plugin] prepare release maven-clean-plugin-3.3.0
  • \n
  • 13c5a24 [MCLEAN-101] Fix wrong Jenkins URL
  • \n
  • 14b375e [MCLEAN-107] Upgrade to plexus-utils 4.0.0 and plexus-xml 4.0.0 (#26)
  • \n
  • 7350464 [MCLEAN-93] Support junctions on NTFS (#10)
  • \n
  • c185ad1 [MCLEAN-105] Ignore reformat
  • \n
  • 7b05397 [MCLEAN-105] Reformat
  • \n
  • 64b8b2e [MCLEAN-105] Bump maven-plugins from 38 to 39
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.maven.plugins:maven-clean-plugin&package-manager=maven&previous-version=3.2.0&new-version=3.3.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually 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 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
", + "created_at": "2021-03-05T13:52:31Z", + "updated_at": "2021-03-05T13:52:31Z", + "closed_at": null, + "merged_at": null, + "merge_commit_sha": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_teams": [], + "labels": [], + "milestone": null, + "draft": false, + "commits_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls/1/commits", + "review_comments_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls/1/comments", + "review_comment_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues/1/comments", + "statuses_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/statuses/6e9f11a1e2946b207c6eb245ec942f2b5a3ea156", + "head": { + "label": "yrodiere:yrodiere-patch-1", + "ref": "yrodiere-patch-1", + "sha": "6e9f11a1e2946b207c6eb245ec942f2b5a3ea156", + "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", + "site_admin": false + }, + "repo": { + "id": 344815557, + "node_id": "MDEwOlJlcG9zaXRvcnkzNDQ4MTU1NTc=", + "name": "hibernate-github-bot-playground", + "full_name": "yrodiere/hibernate-github-bot-playground", + "private": false, + "owner": { + "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", + "site_admin": false + }, + "html_url": "https://github.com/yrodiere/hibernate-github-bot-playground", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground", + "forks_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/forks", + "keys_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/teams", + "hooks_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/hooks", + "issue_events_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues/events{/number}", + "events_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/events", + "assignees_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/assignees{/user}", + "branches_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/branches{/branch}", + "tags_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/tags", + "blobs_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/languages", + "stargazers_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/stargazers", + "contributors_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/contributors", + "subscribers_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/subscribers", + "subscription_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/subscription", + "commits_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/contents/{+path}", + "compare_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/merges", + "archive_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/downloads", + "issues_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues{/number}", + "pulls_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/labels{/name}", + "releases_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/releases{/id}", + "deployments_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/deployments", + "created_at": "2021-03-05T13:13:43Z", + "updated_at": "2021-03-05T13:27:59Z", + "pushed_at": "2021-03-05T13:52:31Z", + "git_url": "git://github.com/yrodiere/hibernate-github-bot-playground.git", + "ssh_url": "git@github.com:yrodiere/hibernate-github-bot-playground.git", + "clone_url": "https://github.com/yrodiere/hibernate-github-bot-playground.git", + "svn_url": "https://github.com/yrodiere/hibernate-github-bot-playground", + "homepage": null, + "size": 0, + "stargazers_count": 0, + "watchers_count": 0, + "language": null, + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "forks": 0, + "open_issues": 1, + "watchers": 0, + "default_branch": "main", + "allow_squash_merge": true, + "allow_merge_commit": true, + "allow_rebase_merge": true, + "delete_branch_on_merge": false + } + }, + "base": { + "label": "yrodiere:main", + "ref": "main", + "sha": "cfb01674fb6ac59109b79108d859bed6271ec531", + "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", + "site_admin": false + }, + "repo": { + "id": 344815557, + "node_id": "MDEwOlJlcG9zaXRvcnkzNDQ4MTU1NTc=", + "name": "hibernate-github-bot-playground", + "full_name": "yrodiere/hibernate-github-bot-playground", + "private": false, + "owner": { + "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", + "site_admin": false + }, + "html_url": "https://github.com/yrodiere/hibernate-github-bot-playground", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground", + "forks_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/forks", + "keys_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/teams", + "hooks_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/hooks", + "issue_events_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues/events{/number}", + "events_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/events", + "assignees_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/assignees{/user}", + "branches_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/branches{/branch}", + "tags_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/tags", + "blobs_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/languages", + "stargazers_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/stargazers", + "contributors_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/contributors", + "subscribers_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/subscribers", + "subscription_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/subscription", + "commits_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/contents/{+path}", + "compare_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/merges", + "archive_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/downloads", + "issues_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues{/number}", + "pulls_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/labels{/name}", + "releases_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/releases{/id}", + "deployments_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/deployments", + "created_at": "2021-03-05T13:13:43Z", + "updated_at": "2021-03-05T13:27:59Z", + "pushed_at": "2021-03-05T13:52:31Z", + "git_url": "git://github.com/yrodiere/hibernate-github-bot-playground.git", + "ssh_url": "git@github.com:yrodiere/hibernate-github-bot-playground.git", + "clone_url": "https://github.com/yrodiere/hibernate-github-bot-playground.git", + "svn_url": "https://github.com/yrodiere/hibernate-github-bot-playground", + "homepage": null, + "size": 0, + "stargazers_count": 0, + "watchers_count": 0, + "language": null, + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "forks": 0, + "open_issues": 1, + "watchers": 0, + "default_branch": "main", + "allow_squash_merge": true, + "allow_merge_commit": true, + "allow_rebase_merge": true, + "delete_branch_on_merge": false + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls/1" + }, + "html": { + "href": "https://github.com/yrodiere/hibernate-github-bot-playground/pull/1" + }, + "issue": { + "href": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues/1" + }, + "comments": { + "href": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues/1/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls/1/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls/1/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/statuses/6e9f11a1e2946b207c6eb245ec942f2b5a3ea156" + } + }, + "author_association": "OWNER", + "auto_merge": null, + "active_lock_reason": null, + "merged": false, + "mergeable": null, + "rebaseable": null, + "mergeable_state": "unknown", + "merged_by": null, + "comments": 0, + "review_comments": 0, + "maintainer_can_modify": false, + "commits": 1, + "additions": 1, + "deletions": 0, + "changed_files": 1 + }, + "repository": { + "id": 344815557, + "node_id": "MDEwOlJlcG9zaXRvcnkzNDQ4MTU1NTc=", + "name": "hibernate-github-bot-playground", + "full_name": "yrodiere/hibernate-github-bot-playground", + "private": false, + "owner": { + "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", + "site_admin": false + }, + "html_url": "https://github.com/yrodiere/hibernate-github-bot-playground", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground", + "forks_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/forks", + "keys_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/teams", + "hooks_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/hooks", + "issue_events_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues/events{/number}", + "events_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/events", + "assignees_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/assignees{/user}", + "branches_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/branches{/branch}", + "tags_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/tags", + "blobs_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/languages", + "stargazers_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/stargazers", + "contributors_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/contributors", + "subscribers_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/subscribers", + "subscription_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/subscription", + "commits_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/contents/{+path}", + "compare_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/merges", + "archive_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/downloads", + "issues_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/issues{/number}", + "pulls_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/labels{/name}", + "releases_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/releases{/id}", + "deployments_url": "https://api.github.com/repos/yrodiere/hibernate-github-bot-playground/deployments", + "created_at": "2021-03-05T13:13:43Z", + "updated_at": "2021-03-05T13:27:59Z", + "pushed_at": "2021-03-05T13:52:31Z", + "git_url": "git://github.com/yrodiere/hibernate-github-bot-playground.git", + "ssh_url": "git@github.com:yrodiere/hibernate-github-bot-playground.git", + "clone_url": "https://github.com/yrodiere/hibernate-github-bot-playground.git", + "svn_url": "https://github.com/yrodiere/hibernate-github-bot-playground", + "homepage": null, + "size": 0, + "stargazers_count": 0, + "watchers_count": 0, + "language": null, + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "forks": 0, + "open_issues": 1, + "watchers": 0, + "default_branch": "main" + }, + "sender": { + "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", + "site_admin": false + }, + "installation": { + "id": 15144501, + "node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTUxNDQ1MDE=" + } +}