]> source.dussan.org Git - gitea.git/commitdiff
Upgrade github.com/google/go-github v32.1.0 -> v37.0.0 (#16661)
author6543 <6543@obermui.de>
Tue, 10 Aug 2021 09:49:43 +0000 (11:49 +0200)
committerGitHub <noreply@github.com>
Tue, 10 Aug 2021 09:49:43 +0000 (11:49 +0200)
* Upgrade github.com/google/go-github vv32.1.0 -> v37.0.0

* refactor: use GetX() func to reduce code

223 files changed:
go.mod
go.sum
modules/migrations/error.go
modules/migrations/github.go
vendor/github.com/google/go-github/v32/AUTHORS [deleted file]
vendor/github.com/google/go-github/v32/LICENSE [deleted file]
vendor/github.com/google/go-github/v32/github/actions.go [deleted file]
vendor/github.com/google/go-github/v32/github/actions_artifacts.go [deleted file]
vendor/github.com/google/go-github/v32/github/actions_runners.go [deleted file]
vendor/github.com/google/go-github/v32/github/actions_secrets.go [deleted file]
vendor/github.com/google/go-github/v32/github/actions_workflow_jobs.go [deleted file]
vendor/github.com/google/go-github/v32/github/actions_workflow_runs.go [deleted file]
vendor/github.com/google/go-github/v32/github/actions_workflows.go [deleted file]
vendor/github.com/google/go-github/v32/github/activity.go [deleted file]
vendor/github.com/google/go-github/v32/github/activity_events.go [deleted file]
vendor/github.com/google/go-github/v32/github/activity_notifications.go [deleted file]
vendor/github.com/google/go-github/v32/github/activity_star.go [deleted file]
vendor/github.com/google/go-github/v32/github/activity_watching.go [deleted file]
vendor/github.com/google/go-github/v32/github/admin.go [deleted file]
vendor/github.com/google/go-github/v32/github/admin_orgs.go [deleted file]
vendor/github.com/google/go-github/v32/github/admin_stats.go [deleted file]
vendor/github.com/google/go-github/v32/github/admin_users.go [deleted file]
vendor/github.com/google/go-github/v32/github/apps.go [deleted file]
vendor/github.com/google/go-github/v32/github/apps_installation.go [deleted file]
vendor/github.com/google/go-github/v32/github/apps_manifest.go [deleted file]
vendor/github.com/google/go-github/v32/github/apps_marketplace.go [deleted file]
vendor/github.com/google/go-github/v32/github/authorizations.go [deleted file]
vendor/github.com/google/go-github/v32/github/checks.go [deleted file]
vendor/github.com/google/go-github/v32/github/code-scanning.go [deleted file]
vendor/github.com/google/go-github/v32/github/doc.go [deleted file]
vendor/github.com/google/go-github/v32/github/event.go [deleted file]
vendor/github.com/google/go-github/v32/github/event_types.go [deleted file]
vendor/github.com/google/go-github/v32/github/gists.go [deleted file]
vendor/github.com/google/go-github/v32/github/gists_comments.go [deleted file]
vendor/github.com/google/go-github/v32/github/git.go [deleted file]
vendor/github.com/google/go-github/v32/github/git_blobs.go [deleted file]
vendor/github.com/google/go-github/v32/github/git_commits.go [deleted file]
vendor/github.com/google/go-github/v32/github/git_refs.go [deleted file]
vendor/github.com/google/go-github/v32/github/git_tags.go [deleted file]
vendor/github.com/google/go-github/v32/github/git_trees.go [deleted file]
vendor/github.com/google/go-github/v32/github/github-accessors.go [deleted file]
vendor/github.com/google/go-github/v32/github/github.go [deleted file]
vendor/github.com/google/go-github/v32/github/gitignore.go [deleted file]
vendor/github.com/google/go-github/v32/github/interactions.go [deleted file]
vendor/github.com/google/go-github/v32/github/interactions_orgs.go [deleted file]
vendor/github.com/google/go-github/v32/github/interactions_repos.go [deleted file]
vendor/github.com/google/go-github/v32/github/issues.go [deleted file]
vendor/github.com/google/go-github/v32/github/issues_assignees.go [deleted file]
vendor/github.com/google/go-github/v32/github/issues_comments.go [deleted file]
vendor/github.com/google/go-github/v32/github/issues_events.go [deleted file]
vendor/github.com/google/go-github/v32/github/issues_labels.go [deleted file]
vendor/github.com/google/go-github/v32/github/issues_milestones.go [deleted file]
vendor/github.com/google/go-github/v32/github/issues_timeline.go [deleted file]
vendor/github.com/google/go-github/v32/github/licenses.go [deleted file]
vendor/github.com/google/go-github/v32/github/messages.go [deleted file]
vendor/github.com/google/go-github/v32/github/migrations.go [deleted file]
vendor/github.com/google/go-github/v32/github/migrations_source_import.go [deleted file]
vendor/github.com/google/go-github/v32/github/migrations_user.go [deleted file]
vendor/github.com/google/go-github/v32/github/misc.go [deleted file]
vendor/github.com/google/go-github/v32/github/orgs.go [deleted file]
vendor/github.com/google/go-github/v32/github/orgs_hooks.go [deleted file]
vendor/github.com/google/go-github/v32/github/orgs_members.go [deleted file]
vendor/github.com/google/go-github/v32/github/orgs_outside_collaborators.go [deleted file]
vendor/github.com/google/go-github/v32/github/orgs_projects.go [deleted file]
vendor/github.com/google/go-github/v32/github/orgs_users_blocking.go [deleted file]
vendor/github.com/google/go-github/v32/github/packages.go [deleted file]
vendor/github.com/google/go-github/v32/github/projects.go [deleted file]
vendor/github.com/google/go-github/v32/github/pulls.go [deleted file]
vendor/github.com/google/go-github/v32/github/pulls_comments.go [deleted file]
vendor/github.com/google/go-github/v32/github/pulls_reviewers.go [deleted file]
vendor/github.com/google/go-github/v32/github/pulls_reviews.go [deleted file]
vendor/github.com/google/go-github/v32/github/reactions.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_collaborators.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_comments.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_commits.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_community_health.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_contents.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_deployments.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_forks.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_hooks.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_invitations.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_keys.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_merging.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_pages.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_prereceive_hooks.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_projects.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_releases.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_stats.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_statuses.go [deleted file]
vendor/github.com/google/go-github/v32/github/repos_traffic.go [deleted file]
vendor/github.com/google/go-github/v32/github/search.go [deleted file]
vendor/github.com/google/go-github/v32/github/strings.go [deleted file]
vendor/github.com/google/go-github/v32/github/teams.go [deleted file]
vendor/github.com/google/go-github/v32/github/teams_discussion_comments.go [deleted file]
vendor/github.com/google/go-github/v32/github/teams_discussions.go [deleted file]
vendor/github.com/google/go-github/v32/github/teams_members.go [deleted file]
vendor/github.com/google/go-github/v32/github/timestamp.go [deleted file]
vendor/github.com/google/go-github/v32/github/users.go [deleted file]
vendor/github.com/google/go-github/v32/github/users_administration.go [deleted file]
vendor/github.com/google/go-github/v32/github/users_blocking.go [deleted file]
vendor/github.com/google/go-github/v32/github/users_emails.go [deleted file]
vendor/github.com/google/go-github/v32/github/users_followers.go [deleted file]
vendor/github.com/google/go-github/v32/github/users_gpg_keys.go [deleted file]
vendor/github.com/google/go-github/v32/github/users_keys.go [deleted file]
vendor/github.com/google/go-github/v32/github/users_projects.go [deleted file]
vendor/github.com/google/go-github/v32/github/with_appengine.go [deleted file]
vendor/github.com/google/go-github/v32/github/without_appengine.go [deleted file]
vendor/github.com/google/go-github/v37/AUTHORS [new file with mode: 0644]
vendor/github.com/google/go-github/v37/LICENSE [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/actions.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/actions_artifacts.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/actions_runner_groups.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/actions_runners.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/actions_secrets.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/actions_workflow_jobs.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/actions_workflow_runs.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/actions_workflows.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/activity.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/activity_events.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/activity_notifications.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/activity_star.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/activity_watching.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/admin.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/admin_orgs.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/admin_stats.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/admin_users.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/apps.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/apps_installation.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/apps_manifest.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/apps_marketplace.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/authorizations.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/billing.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/checks.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/code-scanning.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/doc.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/enterprise.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/enterprise_actions_runners.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/enterprise_audit_log.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/event.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/event_types.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/gists.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/gists_comments.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/git.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/git_blobs.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/git_commits.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/git_refs.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/git_tags.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/git_trees.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/github-accessors.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/github.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/gitignore.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/interactions.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/interactions_orgs.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/interactions_repos.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/issue_import.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/issues.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/issues_assignees.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/issues_comments.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/issues_events.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/issues_labels.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/issues_milestones.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/issues_timeline.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/licenses.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/messages.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/migrations.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/migrations_source_import.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/migrations_user.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/misc.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/orgs.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/orgs_actions_allowed.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/orgs_actions_permissions.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/orgs_audit_log.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/orgs_hooks.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/orgs_members.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/orgs_outside_collaborators.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/orgs_projects.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/orgs_users_blocking.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/packages.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/projects.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/pulls.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/pulls_comments.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/pulls_reviewers.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/pulls_reviews.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/reactions.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_collaborators.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_comments.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_commits.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_community_health.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_contents.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_deployments.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_environments.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_forks.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_hooks.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_invitations.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_keys.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_merging.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_pages.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_prereceive_hooks.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_projects.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_releases.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_stats.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_statuses.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/repos_traffic.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/search.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/strings.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/teams.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/teams_discussion_comments.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/teams_discussions.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/teams_members.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/timestamp.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/users.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/users_administration.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/users_blocking.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/users_emails.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/users_followers.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/users_gpg_keys.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/users_keys.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/users_projects.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/with_appengine.go [new file with mode: 0644]
vendor/github.com/google/go-github/v37/github/without_appengine.go [new file with mode: 0644]
vendor/modules.txt

diff --git a/go.mod b/go.mod
index ea97bc548e9e946395b7b73e93f334e9ed77eaa3..1bd7d03d77dad3fec8383d51ca657cf323a7f1ab 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -52,7 +52,7 @@ require (
        github.com/gogs/go-gogs-client v0.0.0-20210131175652-1d7215cd8d85
        github.com/golang-jwt/jwt v3.2.2+incompatible
        github.com/golang/snappy v0.0.4 // indirect
-       github.com/google/go-github/v32 v32.1.0
+       github.com/google/go-github/v37 v37.0.0
        github.com/google/go-querystring v1.1.0 // indirect
        github.com/google/uuid v1.2.0
        github.com/gorilla/context v1.1.1
@@ -124,7 +124,7 @@ require (
        go.uber.org/atomic v1.8.0 // indirect
        go.uber.org/multierr v1.7.0 // indirect
        go.uber.org/zap v1.18.1 // indirect
-       golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e
+       golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97
        golang.org/x/net v0.0.0-20210716203947-853a461950ff
        golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914
        golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
diff --git a/go.sum b/go.sum
index 24ac6a65a3249cef5b69d61c5d656d92bef92485..752399d3d5abc30c71a2709542db3ecffafb6bea 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -529,8 +529,8 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
 github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-github/v32 v32.1.0 h1:GWkQOdXqviCPx7Q7Fj+KyPoGm4SwHRh8rheoPhd27II=
-github.com/google/go-github/v32 v32.1.0/go.mod h1:rIEpZD9CTDQwDK9GDrtMTycQNA4JU3qBsCizh3q2WCI=
+github.com/google/go-github/v37 v37.0.0 h1:rCspN8/6kB1BAJWZfuafvHhyfIo5fkAulaP/3bOQ/tM=
+github.com/google/go-github/v37 v37.0.0/go.mod h1:LM7in3NmXDrX58GbEHy7FtNLbI2JijX93RnMKvWG3m4=
 github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
@@ -1145,8 +1145,9 @@ golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWP
 golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
-golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e h1:gsTQYXdTw2Gq7RBsWvlQ91b+aEQ6bXFUngBGuR8sPpI=
 golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
+golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
index 1c77fa9f2f288a8ca87cf1c5532b1ea8a41dce46..da8e7e058242e3c56970d9385ba74939078fd94c 100644 (file)
@@ -8,7 +8,7 @@ package migrations
 import (
        "errors"
 
-       "github.com/google/go-github/v32/github"
+       "github.com/google/go-github/v37/github"
 )
 
 var (
index 7d4c492c24c3a4d7df32c95e066f4931eea045ce..cc5279e38fb30449789d12a4318b6255914edc08 100644 (file)
@@ -20,7 +20,7 @@ import (
        "code.gitea.io/gitea/modules/structs"
        "code.gitea.io/gitea/modules/util"
 
-       "github.com/google/go-github/v32/github"
+       "github.com/google/go-github/v37/github"
        "golang.org/x/oauth2"
 )
 
@@ -154,20 +154,15 @@ func (g *GithubDownloaderV3) GetRepoInfo() (*base.Repository, error) {
        }
        g.rate = &resp.Rate
 
-       defaultBranch := ""
-       if gr.DefaultBranch != nil {
-               defaultBranch = *gr.DefaultBranch
-       }
-
        // convert github repo to stand Repo
        return &base.Repository{
                Owner:         g.repoOwner,
                Name:          gr.GetName(),
-               IsPrivate:     *gr.Private,
+               IsPrivate:     gr.GetPrivate(),
                Description:   gr.GetDescription(),
                OriginalURL:   gr.GetHTMLURL(),
                CloneURL:      gr.GetCloneURL(),
-               DefaultBranch: defaultBranch,
+               DefaultBranch: gr.GetDefaultBranch(),
        }, nil
 }
 
@@ -201,20 +196,16 @@ func (g *GithubDownloaderV3) GetMilestones() ([]*base.Milestone, error) {
                g.rate = &resp.Rate
 
                for _, m := range ms {
-                       var desc string
-                       if m.Description != nil {
-                               desc = *m.Description
-                       }
                        var state = "open"
                        if m.State != nil {
                                state = *m.State
                        }
                        milestones = append(milestones, &base.Milestone{
-                               Title:       *m.Title,
-                               Description: desc,
+                               Title:       m.GetTitle(),
+                               Description: m.GetDescription(),
                                Deadline:    m.DueOn,
                                State:       state,
-                               Created:     *m.CreatedAt,
+                               Created:     m.GetCreatedAt(),
                                Updated:     m.UpdatedAt,
                                Closed:      m.ClosedAt,
                        })
@@ -227,14 +218,10 @@ func (g *GithubDownloaderV3) GetMilestones() ([]*base.Milestone, error) {
 }
 
 func convertGithubLabel(label *github.Label) *base.Label {
-       var desc string
-       if label.Description != nil {
-               desc = *label.Description
-       }
        return &base.Label{
-               Name:        *label.Name,
-               Color:       *label.Color,
-               Description: desc,
+               Name:        label.GetName(),
+               Color:       label.GetColor(),
+               Description: label.GetDescription(),
        }
 }
 
@@ -266,24 +253,16 @@ func (g *GithubDownloaderV3) GetLabels() ([]*base.Label, error) {
 
 func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease) *base.Release {
        r := &base.Release{
-               TagName:         *rel.TagName,
-               TargetCommitish: *rel.TargetCommitish,
-               Draft:           *rel.Draft,
-               Prerelease:      *rel.Prerelease,
-               Created:         rel.CreatedAt.Time,
-               PublisherID:     *rel.Author.ID,
-               PublisherName:   *rel.Author.Login,
-       }
-
-       if rel.Body != nil {
-               r.Body = *rel.Body
-       }
-       if rel.Name != nil {
-               r.Name = *rel.Name
-       }
-
-       if rel.Author.Email != nil {
-               r.PublisherEmail = *rel.Author.Email
+               Name:            rel.GetName(),
+               TagName:         rel.GetTagName(),
+               TargetCommitish: rel.GetTargetCommitish(),
+               Draft:           rel.GetDraft(),
+               Prerelease:      rel.GetPrerelease(),
+               Created:         rel.GetCreatedAt().Time,
+               PublisherID:     rel.GetAuthor().GetID(),
+               PublisherName:   rel.GetAuthor().GetLogin(),
+               PublisherEmail:  rel.GetAuthor().GetEmail(),
+               Body:            rel.GetBody(),
        }
 
        if rel.PublishedAt != nil {
@@ -293,8 +272,8 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease)
        for _, asset := range rel.Assets {
                var assetID = *asset.ID // Don't optimize this, for closure we need a local variable
                r.Assets = append(r.Assets, &base.ReleaseAsset{
-                       ID:            *asset.ID,
-                       Name:          *asset.Name,
+                       ID:            asset.GetID(),
+                       Name:          asset.GetName(),
                        ContentType:   asset.ContentType,
                        Size:          asset.Size,
                        DownloadCount: asset.DownloadCount,
@@ -388,24 +367,12 @@ func (g *GithubDownloaderV3) GetIssues(page, perPage int) ([]*base.Issue, bool,
                if issue.IsPullRequest() {
                        continue
                }
-               var body string
-               if issue.Body != nil {
-                       body = *issue.Body
-               }
-               var milestone string
-               if issue.Milestone != nil {
-                       milestone = *issue.Milestone.Title
-               }
+
                var labels = make([]*base.Label, 0, len(issue.Labels))
                for _, l := range issue.Labels {
                        labels = append(labels, convertGithubLabel(l))
                }
 
-               var email string
-               if issue.User.Email != nil {
-                       email = *issue.User.Email
-               }
-
                // get reactions
                var reactions []*base.Reaction
                for i := 1; ; i++ {
@@ -430,21 +397,27 @@ func (g *GithubDownloaderV3) GetIssues(page, perPage int) ([]*base.Issue, bool,
                        }
                }
 
+               var assignees []string
+               for i := range issue.Assignees {
+                       assignees = append(assignees, issue.Assignees[i].GetLogin())
+               }
+
                allIssues = append(allIssues, &base.Issue{
                        Title:       *issue.Title,
                        Number:      int64(*issue.Number),
-                       PosterID:    *issue.User.ID,
-                       PosterName:  *issue.User.Login,
-                       PosterEmail: email,
-                       Content:     body,
-                       Milestone:   milestone,
-                       State:       *issue.State,
-                       Created:     *issue.CreatedAt,
-                       Updated:     *issue.UpdatedAt,
+                       PosterID:    issue.GetUser().GetID(),
+                       PosterName:  issue.GetUser().GetLogin(),
+                       PosterEmail: issue.GetUser().GetEmail(),
+                       Content:     issue.GetBody(),
+                       Milestone:   issue.GetMilestone().GetTitle(),
+                       State:       issue.GetState(),
+                       Created:     issue.GetCreatedAt(),
+                       Updated:     issue.GetUpdatedAt(),
                        Labels:      labels,
                        Reactions:   reactions,
                        Closed:      issue.ClosedAt,
-                       IsLocked:    *issue.Locked,
+                       IsLocked:    issue.GetLocked(),
+                       Assignees:   assignees,
                })
        }
 
@@ -487,11 +460,6 @@ func (g *GithubDownloaderV3) getComments(issueNumber int64) ([]*base.Comment, er
                }
                g.rate = &resp.Rate
                for _, comment := range comments {
-                       var email string
-                       if comment.User.Email != nil {
-                               email = *comment.User.Email
-                       }
-
                        // get reactions
                        var reactions []*base.Reaction
                        for i := 1; ; i++ {
@@ -515,14 +483,15 @@ func (g *GithubDownloaderV3) getComments(issueNumber int64) ([]*base.Comment, er
                                        })
                                }
                        }
+
                        allComments = append(allComments, &base.Comment{
                                IssueIndex:  issueNumber,
-                               PosterID:    *comment.User.ID,
-                               PosterName:  *comment.User.Login,
-                               PosterEmail: email,
-                               Content:     *comment.Body,
-                               Created:     *comment.CreatedAt,
-                               Updated:     *comment.UpdatedAt,
+                               PosterID:    comment.GetUser().GetID(),
+                               PosterName:  comment.GetUser().GetLogin(),
+                               PosterEmail: comment.GetUser().GetEmail(),
+                               Content:     comment.GetBody(),
+                               Created:     comment.GetCreatedAt(),
+                               Updated:     comment.GetUpdatedAt(),
                                Reactions:   reactions,
                        })
                }
@@ -558,11 +527,6 @@ func (g *GithubDownloaderV3) GetAllComments(page, perPage int) ([]*base.Comment,
        log.Trace("Request get comments %d/%d, but in fact get %d", perPage, page, len(comments))
        g.rate = &resp.Rate
        for _, comment := range comments {
-               var email string
-               if comment.User.Email != nil {
-                       email = *comment.User.Email
-               }
-
                // get reactions
                var reactions []*base.Reaction
                for i := 1; ; i++ {
@@ -590,12 +554,12 @@ func (g *GithubDownloaderV3) GetAllComments(page, perPage int) ([]*base.Comment,
                issueIndex, _ := strconv.ParseInt((*comment.IssueURL)[idx+1:], 10, 64)
                allComments = append(allComments, &base.Comment{
                        IssueIndex:  issueIndex,
-                       PosterID:    *comment.User.ID,
-                       PosterName:  *comment.User.Login,
-                       PosterEmail: email,
-                       Content:     *comment.Body,
-                       Created:     *comment.CreatedAt,
-                       Updated:     *comment.UpdatedAt,
+                       PosterID:    comment.GetUser().GetID(),
+                       PosterName:  comment.GetUser().GetLogin(),
+                       PosterEmail: comment.GetUser().GetEmail(),
+                       Content:     comment.GetBody(),
+                       Created:     comment.GetCreatedAt(),
+                       Updated:     comment.GetUpdatedAt(),
                        Reactions:   reactions,
                })
        }
@@ -626,59 +590,11 @@ func (g *GithubDownloaderV3) GetPullRequests(page, perPage int) ([]*base.PullReq
        log.Trace("Request get pull requests %d/%d, but in fact get %d", perPage, page, len(prs))
        g.rate = &resp.Rate
        for _, pr := range prs {
-               var body string
-               if pr.Body != nil {
-                       body = *pr.Body
-               }
-               var milestone string
-               if pr.Milestone != nil {
-                       milestone = *pr.Milestone.Title
-               }
                var labels = make([]*base.Label, 0, len(pr.Labels))
                for _, l := range pr.Labels {
                        labels = append(labels, convertGithubLabel(l))
                }
 
-               var email string
-               if pr.User.Email != nil {
-                       email = *pr.User.Email
-               }
-               var merged bool
-               // pr.Merged is not valid, so use MergedAt to test if it's merged
-               if pr.MergedAt != nil {
-                       merged = true
-               }
-
-               var (
-                       headRepoName string
-                       cloneURL     string
-                       headRef      string
-                       headSHA      string
-               )
-               if pr.Head.Repo != nil {
-                       if pr.Head.Repo.Name != nil {
-                               headRepoName = *pr.Head.Repo.Name
-                       }
-                       if pr.Head.Repo.CloneURL != nil {
-                               cloneURL = *pr.Head.Repo.CloneURL
-                       }
-               }
-               if pr.Head.Ref != nil {
-                       headRef = *pr.Head.Ref
-               }
-               if pr.Head.SHA != nil {
-                       headSHA = *pr.Head.SHA
-               }
-               var mergeCommitSHA string
-               if pr.MergeCommitSHA != nil {
-                       mergeCommitSHA = *pr.MergeCommitSHA
-               }
-
-               var headUserName string
-               if pr.Head.User != nil && pr.Head.User.Login != nil {
-                       headUserName = *pr.Head.User.Login
-               }
-
                // get reactions
                var reactions []*base.Reaction
                for i := 1; ; i++ {
@@ -704,36 +620,36 @@ func (g *GithubDownloaderV3) GetPullRequests(page, perPage int) ([]*base.PullReq
                }
 
                allPRs = append(allPRs, &base.PullRequest{
-                       Title:          *pr.Title,
-                       Number:         int64(*pr.Number),
-                       PosterName:     *pr.User.Login,
-                       PosterID:       *pr.User.ID,
-                       PosterEmail:    email,
-                       Content:        body,
-                       Milestone:      milestone,
-                       State:          *pr.State,
-                       Created:        *pr.CreatedAt,
-                       Updated:        *pr.UpdatedAt,
+                       Title:          pr.GetTitle(),
+                       Number:         int64(pr.GetNumber()),
+                       PosterID:       pr.GetUser().GetID(),
+                       PosterName:     pr.GetUser().GetLogin(),
+                       PosterEmail:    pr.GetUser().GetEmail(),
+                       Content:        pr.GetBody(),
+                       Milestone:      pr.GetMilestone().GetTitle(),
+                       State:          pr.GetState(),
+                       Created:        pr.GetCreatedAt(),
+                       Updated:        pr.GetUpdatedAt(),
                        Closed:         pr.ClosedAt,
                        Labels:         labels,
-                       Merged:         merged,
-                       MergeCommitSHA: mergeCommitSHA,
+                       Merged:         pr.MergedAt != nil,
+                       MergeCommitSHA: pr.GetMergeCommitSHA(),
                        MergedTime:     pr.MergedAt,
                        IsLocked:       pr.ActiveLockReason != nil,
                        Head: base.PullRequestBranch{
-                               Ref:       headRef,
-                               SHA:       headSHA,
-                               RepoName:  headRepoName,
-                               OwnerName: headUserName,
-                               CloneURL:  cloneURL,
+                               Ref:       pr.GetHead().GetRef(),
+                               SHA:       pr.GetHead().GetSHA(),
+                               OwnerName: pr.GetHead().GetUser().GetLogin(),
+                               RepoName:  pr.GetHead().GetRepo().GetName(),
+                               CloneURL:  pr.GetHead().GetRepo().GetCloneURL(),
                        },
                        Base: base.PullRequestBranch{
-                               Ref:       *pr.Base.Ref,
-                               SHA:       *pr.Base.SHA,
-                               RepoName:  *pr.Base.Repo.Name,
-                               OwnerName: *pr.Base.User.Login,
+                               Ref:       pr.GetBase().GetRef(),
+                               SHA:       pr.GetBase().GetSHA(),
+                               RepoName:  pr.GetBase().GetRepo().GetName(),
+                               OwnerName: pr.GetBase().GetUser().GetLogin(),
                        },
-                       PatchURL:  *pr.PatchURL,
+                       PatchURL:  pr.GetPatchURL(),
                        Reactions: reactions,
                })
        }
diff --git a/vendor/github.com/google/go-github/v32/AUTHORS b/vendor/github.com/google/go-github/v32/AUTHORS
deleted file mode 100644 (file)
index cafdf91..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-# This is the official list of go-github authors for copyright purposes.
-#
-# This does not necessarily list everyone who has contributed code, since in
-# some cases, their employer may be the copyright holder. To see the full list
-# of contributors, see the revision history in source control or
-# https://github.com/google/go-github/graphs/contributors.
-#
-# Authors who wish to be recognized in this file should add themselves (or
-# their employer, as appropriate).
-
-178inaba <masahiro.furudate@gmail.com>
-2BFL <imqksl@gmail.com>
-413x <dedifferentiator@gmail.com>
-Abhinav Gupta <mail@abhinavg.net>
-adrienzieba <adrien.zieba@appdirect.com>
-Ahmed Hagy <a.akram93@gmail.com>
-Aidan Steele <aidan.steele@glassechidna.com.au>
-Ainsley Chong <ainsley.chong@gmail.com>
-ajz01 <azdenek@yahoo.com>
-Akeda Bagus <akeda@x-team.com>
-Akhil Mohan <akhilerm@gmail.com>
-Alec Thomas <alec@swapoff.org>
-Aleks Clark <aleks.clark@gmail.com>
-Alex Bramley <a.bramley@gmail.com>
-Alex Orr <Alexorr.CSE@gmail.com>
-Alexander Harkness <me@bearbin.net>
-Allen Sun <shlallen1990@gmail.com>
-Amey Sakhadeo <me@ameyms.com>
-Anders Janmyr <anders@janmyr.com>
-Andreas Garnæs <https://github.com/andreas>
-Andrew Ryabchun <aryabchun@mail.ua>
-Andy Grunwald <andygrunwald@gmail.com>
-Andy Hume <andyhume@gmail.com>
-Andy Lindeman <andy@lindeman.io>
-angie pinilla <angelinepinilla@gmail.com>
-anjanashenoy <anjanashenoy1@gmail.com>
-Anshuman Bhartiya <anshuman.bhartiya@gmail.com>
-Antoine <antoine.tu@mail.mcgill.ca>
-Antoine Pelisse <apelisse@gmail.com>
-Anubha Kushwaha <anubha_bt2k14@dtu.ac.in>
-appilon <apilon@hashicorp.com>
-Aravind <aravindkp@outlook.in>
-Arda Kuyumcu <kuyumcuarda@gmail.com>
-Arıl Bozoluk <arilbozoluk@hotmail.com>
-Austin Burdine <acburdine@gmail.com>
-Austin Dizzy <dizzy@wow.com>
-Ben Batha <bhbatha@gmail.com>
-Benjamen Keroack <benjamen@dollarshaveclub.com>
-Beshr Kayali <beshrkayali@gmail.com>
-Beyang Liu <beyang.liu@gmail.com>
-Billy Lynch <wlynch92@gmail.com>
-Björn Häuser <b.haeuser@rebuy.de>
-Brad Harris <bmharris@gmail.com>
-Brad Moylan <moylan.brad@gmail.com>
-Bradley Falzon <brad@teambrad.net>
-Brandon Cook <phylake@gmail.com>
-Brian Egizi <brian@mojotech.com>
-Bryan Boreham <bryan@weave.works>
-Cami Diez <diezcami@gmail.com>
-Carl Johnson <me@carlmjohnson.net>
-Carlos Alexandro Becker <caarlos0@gmail.com>
-Carlos Tadeu Panato Junior <ctadeu@gmail.com>
-chandresh-pancholi <chandreshpancholi007@gmail.com>
-Charles Fenwick Elliott <Charles@FenwickElliott.io>
-Charlie Yan <charlieyan08@gmail.com>
-Chris King <chriskingnet@gmail.com>
-Chris Raborg <craborg57@gmail.com>
-Chris Roche <chris@vsco.co>
-Chris Schaefer <chris@dtzq.com>
-chrisforrette <chris@chrisforrette.com>
-Christian Muehlhaeuser <muesli@gmail.com>
-Christoph Sassenberg <defsprite@gmail.com>
-Colin Misare <github.com/cmisare>
-Craig Peterson <cpeterson@stackoverflow.com>
-Cristian Maglie <c.maglie@bug.st>
-Daehyeok Mun <daehyeok@gmail.com>
-Daniel Leavitt <daniel.leavitt@gmail.com>
-Daniel Nilsson <daniel.nilsson1989@gmail.com>
-Daoq <masseto2002@gmail.com>
-Dave Du Cros <davidducros@gmail.com>
-Dave Henderson <dhenderson@gmail.com>
-Dave Protasowski <dprotaso@gmail.com>
-David Deng <daviddengcn@gmail.com>
-David Jannotta <djannotta@gmail.com>
-David Ji <github.com/davidji99>
-David Lopez Reyes <davidlopezre@gmail.com>
-Davide Zipeto <dawez1@gmail.com>
-Dennis Webb <dennis@bluesentryit.com>
-Dhi Aurrahman <diorahman@rockybars.com>
-Diego Lapiduz <diego.lapiduz@cfpb.gov>
-Dmitri Shuralyov <shurcooL@gmail.com>
-dmnlk <seikima2demon@gmail.com>
-Don Petersen <don@donpetersen.net>
-Doug Turner <doug.turner@gmail.com>
-Drew Fradette <drew.fradette@gmail.com>
-Eivind <eivindkn@gmail.com>
-Eli Uriegas <seemethere101@gmail.com>
-Elliott Beach <elliott2.71828@gmail.com>
-Emerson Wood <emersonwood94@gmail.com>
-eperm <staffordworrell@gmail.com>
-Erick Fejta <erick@fejta.com>
-erwinvaneyk <erwinvaneyk@gmail.com>
-Evan Elias <evanjelias@gmail.com>
-Fabrice <fabrice.vaillant@student.ecp.fr>
-Felix Geisendörfer <felix@debuggable.com>
-Filippo Valsorda <hi@filippo.io>
-Florian Forster <ff@octo.it>
-Francesc Gil <xescugil@gmail.com>
-Francis <hello@francismakes.com>
-Francisco Guimarães <francisco.cpg@gmail.com>
-Fredrik Jönsson <fredrik.jonsson@izettle.com>
-Garrett Squire <garrettsquire@gmail.com>
-George Kontridze <george.kontridze@gmail.com>
-Georgy Buranov <gburanov@gmail.com>
-Glen Mailer <glenjamin@gmail.com>
-Gnahz <p@oath.pl>
-Google Inc.
-Grachev Mikhail <work@mgrachev.com>
-griffin_stewie <panterathefamilyguy@gmail.com>
-Guillaume Jacquet <guillaume.jacquet@gmail.com>
-Guz Alexander <kalimatas@gmail.com>
-Guðmundur Bjarni Ã“lafsson <gudmundur@github.com>
-Hanno Hecker <hanno.hecker@zalando.de>
-Hari haran <hariharan.uno@gmail.com>
-haya14busa <haya14busa@gmail.com>
-haya14busa <hayabusa1419@gmail.com>
-Huy Tr <kingbazoka@gmail.com>
-huydx <doxuanhuy@gmail.com>
-i2bskn <i2bskn@gmail.com>
-Ioannis Georgoulas <igeorgoulas21@gmail.com>
-Isao Jonas <isao.jonas@gmail.com>
-isqua <isqua@isqua.ru>
-Jameel Haffejee <RC1140@republiccommandos.co.za>
-James Cockbain <james.cockbain@ibm.com>
-Jan Kosecki <jan.kosecki91@gmail.com>
-Javier Campanini <jcampanini@palantir.com>
-Jens Rantil <jens.rantil@gmail.com>
-Jeremy Morris <jeremylevanmorris@gmail.com>
-Jesse Newland <jesse@jnewland.com>
-Jihoon Chung <j.c@navercorp.com>
-Jimmi Dyson <jimmidyson@gmail.com>
-Joan Saum <joan.saum@epitech.eu>
-Joe Tsai <joetsai@digital-static.net>
-John Barton <jrbarton@gmail.com>
-John Engelman <john.r.engelman@gmail.com>
-Jordan Brockopp <jdbro94@gmail.com>
-Jordan Sussman <jordansail22@gmail.com>
-Joshua Bezaleel Abednego <joshua.bezaleel@gmail.com>
-JP Phillips <jonphill9@gmail.com>
-jpbelanger-mtl <jp.belanger@gmail.com>
-Juan Basso <jrbasso@gmail.com>
-Julien Garcia Gonzalez <garciagonzalez.julien@gmail.com>
-Julien Rostand <jrostand@users.noreply.github.com>
-Junya Kono <junya03dance@gmail.com>
-Justin Abrahms <justin@abrah.ms>
-Jusung Lee <e.jusunglee@gmail.com>
-jzhoucliqr <jzhou@cliqr.com>
-kadern0 <kaderno@gmail.com>
-Katrina Owen <kytrinyx@github.com>
-Kautilya Tripathi <tripathi.kautilya@gmail.com>
-Keita Urashima <ursm@ursm.jp>
-Kevin Burke <kev@inburke.com>
-Konrad Malawski <konrad.malawski@project13.pl>
-Kookheon Kwon <kucuny@gmail.com>
-Krzysztof Kowalczyk <kkowalczyk@gmail.com>
-Kshitij Saraogi <KshitijSaraogi@gmail.com>
-kyokomi <kyoko1220adword@gmail.com>
-Laurent Verdoïa <verdoialaurent@gmail.com>
-Liam Galvin <liam@liam-galvin.co.uk>
-Lovro Mažgon <lovro.mazgon@gmail.com>
-Lucas Alcantara <lucasalcantaraf@gmail.com>
-Luke Evers <me@lukevers.com>
-Luke Kysow <lkysow@gmail.com>
-Luke Roberts <email@luke-roberts.co.uk>
-Luke Young <luke@hydrantlabs.org>
-lynn [they] <lynncyrin@gmail.com>
-Maksim Zhylinski <uzzable@gmail.com>
-Mark Tareshawty <tarebyte@github.com>
-Martin-Louis Bright <mlbright@gmail.com>
-Martins Sipenko <martins.sipenko@gmail.com>
-Marwan Sulaiman <marwan.sameer@gmail.com>
-Masayuki Izumi <m@izum.in>
-Mat Geist <matgeist@gmail.com>
-Matt <alpmatthew@gmail.com>
-Matt Brender <mjbrender@gmail.com>
-Matt Gaunt <matt@gauntface.co.uk>
-Matt Landis <landis.matt@gmail.com>
-Maxime Bury <maxime.bury@gmail.com>
-Michael Spiegel <michael.m.spiegel@gmail.com>
-Michael Tiller <michael.tiller@gmail.com>
-MichaÅ‚ Glapa <michal.glapa@gmail.com>
-Nadav Kaner <nadavkaner1@gmail.com>
-Nathan VanBenschoten <nvanbenschoten@gmail.com>
-Navaneeth Suresh <navaneeths1998@gmail.com>
-Neil O'Toole <neilotoole@apache.org>
-Nick Miyake <nmiyake@palantir.com>
-Nick Spragg <nick.spragg@bbc.co.uk>
-Nikhita Raghunath <nikitaraghunath@gmail.com>
-Noah Zoschke <noah+sso2@convox.com>
-ns-cweber <cweber@narrativescience.com>
-Ole Orhagen <ole.orhagen@northern.tech>
-Oleg Kovalov <iamolegkovalov@gmail.com>
-OndÅ™ej Kupka <ondra.cap@gmail.com>
-Palash Nigam <npalash25@gmail.com>
-Panagiotis Moustafellos <pmoust@gmail.com>
-Parham Alvani <parham.alvani@gmail.com>
-Parker Moore <parkrmoore@gmail.com>
-parkhyukjun89 <park.hyukjun89@gmail.com>
-Patrick DeVivo <patrick.devivo@gmail.com>
-Patrick Marabeas <patrick@marabeas.io>
-Pavel Shtanko <pavel.shtanko@gmail.com>
-Pete Wagner <thepwagner@github.com>
-Petr Shevtsov <petr.shevtsov@gmail.com>
-Pierre Carrier <pierre@meteor.com>
-Piotr Zurek <p.zurek@gmail.com>
-Pratik Mallya <pratik.mallya@gmail.com>
-Qais Patankar <qaisjp@gmail.com>
-Quang Le Hong <iamquang95@gmail.com>
-Quentin Leffray <fiahil@gmail.com>
-Quinn Slack <qslack@qslack.com>
-Rackspace US, Inc.
-Radek Simko <radek.simko@gmail.com>
-RadliÅ„ski Ignacy <radlinsk@student.agh.edu.pl>
-Rajat Jindal <rajatjindal83@gmail.com>
-Rajendra arora <rajendraarora16@yahoo.com>
-Ranbir Singh <binkkatal.r@gmail.com>
-Ravi Shekhar Jethani <rsjethani@gmail.com>
-RaviTeja Pothana <ravi-teja@live.com>
-rc1140 <jameel@republiccommandos.co.za>
-Red Hat, Inc.
-Reinier Timmer <reinier.timmer@ah.nl>
-Ricco Førgaard <ricco@fiskeben.dk>
-Rob Figueiredo <robfig@yext.com>
-Rohit Upadhyay <urohit011@gmail.com>
-Ronak Jain <ronakjain@outlook.in>
-Ruben Vereecken <rubenvereecken@gmail.com>
-Ryan Leung <rleungx@gmail.com>
-Ryan Lower <rpjlower@gmail.com>
-Ryo Nakao <nakabonne@gmail.com>
-Safwan Olaimat <safwan.olaimat@gmail.com>
-Sahil Dua <sahildua2305@gmail.com>
-saisi <saisi@users.noreply.github.com>
-Sam Minnée <sam@silverstripe.com>
-Sandeep Sukhani <sandeep.d.sukhani@gmail.com>
-Sander Knape <s.knape88@gmail.com>
-Sander van Harmelen <svanharmelen@schubergphilis.com>
-Sanket Payghan <sanket.payghan8@gmail.com>
-Sarasa Kisaragi <lingsamuelgrace@gmail.com>
-Sean Wang <sean@decrypted.org>
-Sebastian Mandrean <sebastian.mandrean@gmail.com>
-Sebastian Mæland Pedersen <sem.pedersen@stud.uis.no>
-Sergey Romanov <xxsmotur@gmail.com>
-Sergio Garcia <sergio.garcia@gmail.com>
-Sevki <s@sevki.org>
-Shagun Khemka <shagun.khemka60@gmail.com>
-shakeelrao <shakeelrao79@gmail.com>
-Shawn Catanzarite <me@shawncatz.com>
-Shawn Smith <shawnpsmith@gmail.com>
-Shibasis Patel <patelshibasis@gmail.com>
-Shrikrishna Singh <krishnasingh.ss30@gmail.com>
-sona-tar <sona.zip@gmail.com>
-SoundCloud, Ltd.
-Sridhar Mocherla <srmocher@microsoft.com>
-SriVignessh Pss <sriknowledge@gmail.com>
-Stefan Sedich <stefan.sedich@gmail.com>
-Stian Eikeland <stian@eikeland.se>
-Suhaib Mujahid <suhaibmujahid@gmail.com>
-Szymon Kodrebski <simonkey007@gmail.com>
-Takayuki Watanabe <takanabe.w@gmail.com>
-Taketoshi Fujiwara <taketoshi.fujiwara@gmail.com>
-Tasya Aditya Rukmana <tadityar@gmail.com>
-Thomas Bruyelle <thomas.bruyelle@gmail.com>
-Timothée Peignier <timothee.peignier@tryphon.org>
-tkhandel <tarunkhandelwal.iitr@gmail.com>
-Trey Tacon <ttacon@gmail.com>
-ttacon <ttacon@gmail.com>
-Vaibhav Singh <vaibhav.singh.14cse@bml.edu.in>
-Varadarajan Aravamudhan <varadaraajan@gmail.com>
-Victor Castell <victor@victorcastell.com>
-Victor Vrantchan <vrancean+github@gmail.com>
-vikkyomkar <vikky.omkar@samsung.com>
-Vlad Ungureanu <vladu@palantir.com>
-Wasim Thabraze <wasim@thabraze.me>
-Weslei Juan Moser Pereira <wesleimsr@gmail.com>
-Will Maier <wcmaier@gmail.com>
-Willem D'Haeseleer <dhwillem@gmail.com>
-William Bailey <mail@williambailey.org.uk>
-William Cooke <pipeston@gmail.com>
-xibz <impactbchang@gmail.com>
-Yann Malet <yann.malet@gmail.com>
-Yannick Utard <yannickutard@gmail.com>
-Yicheng Qin <qycqycqycqycqyc@gmail.com>
-Yosuke Akatsuka <yosuke.akatsuka@access-company.com>
-Yumikiyo Osanai <yumios.art@gmail.com>
-Zach Latta <zach@zachlatta.com>
diff --git a/vendor/github.com/google/go-github/v32/LICENSE b/vendor/github.com/google/go-github/v32/LICENSE
deleted file mode 100644 (file)
index 28b6486..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2013 The go-github AUTHORS. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-   * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-   * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-   * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/google/go-github/v32/github/actions.go b/vendor/github.com/google/go-github/v32/github/actions.go
deleted file mode 100644 (file)
index f9f7f8e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2020 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-// ActionsService handles communication with the actions related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/
-type ActionsService service
diff --git a/vendor/github.com/google/go-github/v32/github/actions_artifacts.go b/vendor/github.com/google/go-github/v32/github/actions_artifacts.go
deleted file mode 100644 (file)
index a236253..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright 2020 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "net/http"
-       "net/url"
-)
-
-// Artifact reprents a GitHub artifact.  Artifacts allow sharing
-// data between jobs in a workflow and provide storage for data
-// once a workflow is complete.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/artifacts/
-type Artifact struct {
-       ID                 *int64     `json:"id,omitempty"`
-       NodeID             *string    `json:"node_id,omitempty"`
-       Name               *string    `json:"name,omitempty"`
-       SizeInBytes        *int64     `json:"size_in_bytes,omitempty"`
-       ArchiveDownloadURL *string    `json:"archive_download_url,omitempty"`
-       Expired            *bool      `json:"expired,omitempty"`
-       CreatedAt          *Timestamp `json:"created_at,omitempty"`
-       ExpiresAt          *Timestamp `json:"expires_at,omitempty"`
-}
-
-// ArtifactList represents a list of GitHub artifacts.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/artifacts/
-type ArtifactList struct {
-       TotalCount *int64      `json:"total_count,omitempty"`
-       Artifacts  []*Artifact `json:"artifacts,omitempty"`
-}
-
-// ListArtifacts lists all artifacts that belong to a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/artifacts/#list-artifacts-for-a-repository
-func (s *ActionsService) ListArtifacts(ctx context.Context, owner, repo string, opts *ListOptions) (*ArtifactList, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/artifacts", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       artifactList := new(ArtifactList)
-       resp, err := s.client.Do(ctx, req, artifactList)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return artifactList, resp, nil
-}
-
-// ListWorkflowRunArtifacts lists all artifacts that belong to a workflow run.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/artifacts/#list-workflow-run-artifacts
-func (s *ActionsService) ListWorkflowRunArtifacts(ctx context.Context, owner, repo string, runID int64, opts *ListOptions) (*ArtifactList, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/artifacts", owner, repo, runID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       artifactList := new(ArtifactList)
-       resp, err := s.client.Do(ctx, req, artifactList)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return artifactList, resp, nil
-}
-
-// GetArtifact gets a specific artifact for a workflow run.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/artifacts/#get-an-artifact
-func (s *ActionsService) GetArtifact(ctx context.Context, owner, repo string, artifactID int64) (*Artifact, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/artifacts/%v", owner, repo, artifactID)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       artifact := new(Artifact)
-       resp, err := s.client.Do(ctx, req, artifact)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return artifact, resp, nil
-}
-
-// DownloadArtifact gets a redirect URL to download an archive for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/artifacts/#download-an-artifact
-func (s *ActionsService) DownloadArtifact(ctx context.Context, owner, repo string, artifactID int64, followRedirects bool) (*url.URL, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/artifacts/%v/zip", owner, repo, artifactID)
-
-       resp, err := s.getDownloadArtifactFromURL(ctx, u, followRedirects)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       if resp.StatusCode != http.StatusFound {
-               return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status)
-       }
-       parsedURL, err := url.Parse(resp.Header.Get("Location"))
-       return parsedURL, newResponse(resp), nil
-}
-
-func (s *ActionsService) getDownloadArtifactFromURL(ctx context.Context, u string, followRedirects bool) (*http.Response, error) {
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       var resp *http.Response
-       // Use http.DefaultTransport if no custom Transport is configured
-       req = withContext(ctx, req)
-       if s.client.client.Transport == nil {
-               resp, err = http.DefaultTransport.RoundTrip(req)
-       } else {
-               resp, err = s.client.client.Transport.RoundTrip(req)
-       }
-       if err != nil {
-               return nil, err
-       }
-       resp.Body.Close()
-
-       // If redirect response is returned, follow it
-       if followRedirects && resp.StatusCode == http.StatusMovedPermanently {
-               u = resp.Header.Get("Location")
-               resp, err = s.getDownloadArtifactFromURL(ctx, u, false)
-       }
-       return resp, err
-}
-
-// DeleteArtifact deletes a workflow run artifact.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/artifacts/#delete-an-artifact
-func (s *ActionsService) DeleteArtifact(ctx context.Context, owner, repo string, artifactID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/artifacts/%v", owner, repo, artifactID)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/actions_runners.go b/vendor/github.com/google/go-github/v32/github/actions_runners.go
deleted file mode 100644 (file)
index 2cac674..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-// Copyright 2020 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// RunnerApplicationDownload represents a binary for the self-hosted runner application that can be downloaded.
-type RunnerApplicationDownload struct {
-       OS           *string `json:"os,omitempty"`
-       Architecture *string `json:"architecture,omitempty"`
-       DownloadURL  *string `json:"download_url,omitempty"`
-       Filename     *string `json:"filename,omitempty"`
-}
-
-// ListRunnerApplicationDownloads lists self-hosted runner application binaries that can be downloaded and run.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#list-runner-applications-for-a-repository
-func (s *ActionsService) ListRunnerApplicationDownloads(ctx context.Context, owner, repo string) ([]*RunnerApplicationDownload, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runners/downloads", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var rads []*RunnerApplicationDownload
-       resp, err := s.client.Do(ctx, req, &rads)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return rads, resp, nil
-}
-
-// RegistrationToken represents a token that can be used to add a self-hosted runner to a repository.
-type RegistrationToken struct {
-       Token     *string    `json:"token,omitempty"`
-       ExpiresAt *Timestamp `json:"expires_at,omitempty"`
-}
-
-// CreateRegistrationToken creates a token that can be used to add a self-hosted runner.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#create-a-registration-token-for-a-repository
-func (s *ActionsService) CreateRegistrationToken(ctx context.Context, owner, repo string) (*RegistrationToken, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runners/registration-token", owner, repo)
-
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       registrationToken := new(RegistrationToken)
-       resp, err := s.client.Do(ctx, req, registrationToken)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return registrationToken, resp, nil
-}
-
-// Runner represents a self-hosted runner registered with a repository.
-type Runner struct {
-       ID     *int64  `json:"id,omitempty"`
-       Name   *string `json:"name,omitempty"`
-       OS     *string `json:"os,omitempty"`
-       Status *string `json:"status,omitempty"`
-}
-
-// Runners represents a collection of self-hosted runners for a repository.
-type Runners struct {
-       TotalCount int       `json:"total_count"`
-       Runners    []*Runner `json:"runners"`
-}
-
-// ListRunners lists all the self-hosted runners for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#list-self-hosted-runners-for-a-repository
-func (s *ActionsService) ListRunners(ctx context.Context, owner, repo string, opts *ListOptions) (*Runners, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runners", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       runners := &Runners{}
-       resp, err := s.client.Do(ctx, req, &runners)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return runners, resp, nil
-}
-
-// GetRunner gets a specific self-hosted runner for a repository using its runner ID.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#get-a-self-hosted-runner-for-a-repository
-func (s *ActionsService) GetRunner(ctx context.Context, owner, repo string, runnerID int64) (*Runner, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runners/%v", owner, repo, runnerID)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       runner := new(Runner)
-       resp, err := s.client.Do(ctx, req, runner)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return runner, resp, nil
-}
-
-// RemoveToken represents a token that can be used to remove a self-hosted runner from a repository.
-type RemoveToken struct {
-       Token     *string    `json:"token,omitempty"`
-       ExpiresAt *Timestamp `json:"expires_at,omitempty"`
-}
-
-// CreateRemoveToken creates a token that can be used to remove a self-hosted runner from a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#create-a-remove-token-for-a-repository
-func (s *ActionsService) CreateRemoveToken(ctx context.Context, owner, repo string) (*RemoveToken, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runners/remove-token", owner, repo)
-
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       removeToken := new(RemoveToken)
-       resp, err := s.client.Do(ctx, req, removeToken)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return removeToken, resp, nil
-}
-
-// RemoveRunner forces the removal of a self-hosted runner in a repository using the runner id.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#delete-a-self-hosted-runner-from-a-repository
-func (s *ActionsService) RemoveRunner(ctx context.Context, owner, repo string, runnerID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runners/%v", owner, repo, runnerID)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListOrganizationRunnerApplicationDownloads lists self-hosted runner application binaries that can be downloaded and run.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#list-runner-applications-for-an-organization
-func (s *ActionsService) ListOrganizationRunnerApplicationDownloads(ctx context.Context, owner string) ([]*RunnerApplicationDownload, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/runners/downloads", owner)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var rads []*RunnerApplicationDownload
-       resp, err := s.client.Do(ctx, req, &rads)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return rads, resp, nil
-}
-
-// CreateOrganizationRegistrationToken creates a token that can be used to add a self-hosted runner to an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#create-a-registration-token-for-an-organization
-func (s *ActionsService) CreateOrganizationRegistrationToken(ctx context.Context, owner string) (*RegistrationToken, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/runners/registration-token", owner)
-
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       registrationToken := new(RegistrationToken)
-       resp, err := s.client.Do(ctx, req, registrationToken)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return registrationToken, resp, nil
-}
-
-// ListOrganizationRunners lists all the self-hosted runners for an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#list-self-hosted-runners-for-an-organization
-func (s *ActionsService) ListOrganizationRunners(ctx context.Context, owner string, opts *ListOptions) (*Runners, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/runners", owner)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       runners := &Runners{}
-       resp, err := s.client.Do(ctx, req, &runners)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return runners, resp, nil
-}
-
-// GetOrganizationRunner gets a specific self-hosted runner for an organization using its runner ID.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#get-a-self-hosted-runner-for-an-organization
-func (s *ActionsService) GetOrganizationRunner(ctx context.Context, owner string, runnerID int64) (*Runner, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/runners/%v", owner, runnerID)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       runner := new(Runner)
-       resp, err := s.client.Do(ctx, req, runner)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return runner, resp, nil
-}
-
-// CreateOrganizationRemoveToken creates a token that can be used to remove a self-hosted runner from an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#create-a-remove-token-for-an-organization
-func (s *ActionsService) CreateOrganizationRemoveToken(ctx context.Context, owner string) (*RemoveToken, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/runners/remove-token", owner)
-
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       removeToken := new(RemoveToken)
-       resp, err := s.client.Do(ctx, req, removeToken)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return removeToken, resp, nil
-}
-
-// RemoveOrganizationRunner forces the removal of a self-hosted runner from an organization using the runner id.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#delete-a-self-hosted-runner-from-an-organization
-func (s *ActionsService) RemoveOrganizationRunner(ctx context.Context, owner string, runnerID int64) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/runners/%v", owner, runnerID)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/actions_secrets.go b/vendor/github.com/google/go-github/v32/github/actions_secrets.go
deleted file mode 100644 (file)
index 695accf..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-// Copyright 2020 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// PublicKey represents the public key that should be used to encrypt secrets.
-type PublicKey struct {
-       KeyID *string `json:"key_id"`
-       Key   *string `json:"key"`
-}
-
-// GetRepoPublicKey gets a public key that should be used for secret encryption.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#get-a-repository-public-key
-func (s *ActionsService) GetRepoPublicKey(ctx context.Context, owner, repo string) (*PublicKey, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/secrets/public-key", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       pubKey := new(PublicKey)
-       resp, err := s.client.Do(ctx, req, pubKey)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return pubKey, resp, nil
-}
-
-// GetOrgPublicKey gets a public key that should be used for secret encryption.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#get-an-organization-public-key
-func (s *ActionsService) GetOrgPublicKey(ctx context.Context, org string) (*PublicKey, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/secrets/public-key", org)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       pubKey := new(PublicKey)
-       resp, err := s.client.Do(ctx, req, pubKey)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return pubKey, resp, nil
-}
-
-// Secret represents a repository action secret.
-type Secret struct {
-       Name                    string    `json:"name"`
-       CreatedAt               Timestamp `json:"created_at"`
-       UpdatedAt               Timestamp `json:"updated_at"`
-       Visibility              string    `json:"visibility,omitempty"`
-       SelectedRepositoriesURL string    `json:"selected_repositories_url,omitempty"`
-}
-
-// Secrets represents one item from the ListSecrets response.
-type Secrets struct {
-       TotalCount int       `json:"total_count"`
-       Secrets    []*Secret `json:"secrets"`
-}
-
-// ListRepoSecrets lists all secrets available in a repository
-// without revealing their encrypted values.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#list-repository-secrets
-func (s *ActionsService) ListRepoSecrets(ctx context.Context, owner, repo string, opts *ListOptions) (*Secrets, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/secrets", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       secrets := new(Secrets)
-       resp, err := s.client.Do(ctx, req, &secrets)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return secrets, resp, nil
-}
-
-// GetRepoSecret gets a single repository secret without revealing its encrypted value.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#get-a-repository-secret
-func (s *ActionsService) GetRepoSecret(ctx context.Context, owner, repo, name string) (*Secret, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/secrets/%v", owner, repo, name)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       secret := new(Secret)
-       resp, err := s.client.Do(ctx, req, secret)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return secret, resp, nil
-}
-
-// SelectedRepoIDs are the repository IDs that have access to the secret.
-type SelectedRepoIDs []int64
-
-// EncryptedSecret represents a secret that is encrypted using a public key.
-//
-// The value of EncryptedValue must be your secret, encrypted with
-// LibSodium (see documentation here: https://libsodium.gitbook.io/doc/bindings_for_other_languages)
-// using the public key retrieved using the GetPublicKey method.
-type EncryptedSecret struct {
-       Name                  string          `json:"-"`
-       KeyID                 string          `json:"key_id"`
-       EncryptedValue        string          `json:"encrypted_value"`
-       Visibility            string          `json:"visibility,omitempty"`
-       SelectedRepositoryIDs SelectedRepoIDs `json:"selected_repository_ids,omitempty"`
-}
-
-// CreateOrUpdateRepoSecret creates or updates a repository secret with an encrypted value.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#create-or-update-a-repository-secret
-func (s *ActionsService) CreateOrUpdateRepoSecret(ctx context.Context, owner, repo string, eSecret *EncryptedSecret) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/secrets/%v", owner, repo, eSecret.Name)
-
-       req, err := s.client.NewRequest("PUT", u, eSecret)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DeleteRepoSecret deletes a secret in a repository using the secret name.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#delete-a-repository-secret
-func (s *ActionsService) DeleteRepoSecret(ctx context.Context, owner, repo, name string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/secrets/%v", owner, repo, name)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListOrgSecrets lists all secrets available in an organization
-// without revealing their encrypted values.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#list-organization-secrets
-func (s *ActionsService) ListOrgSecrets(ctx context.Context, org string, opts *ListOptions) (*Secrets, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/secrets", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       secrets := new(Secrets)
-       resp, err := s.client.Do(ctx, req, &secrets)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return secrets, resp, nil
-}
-
-// GetOrgSecret gets a single organization secret without revealing its encrypted value.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#get-an-organization-secret
-func (s *ActionsService) GetOrgSecret(ctx context.Context, org, name string) (*Secret, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/secrets/%v", org, name)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       secret := new(Secret)
-       resp, err := s.client.Do(ctx, req, secret)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return secret, resp, nil
-}
-
-// CreateOrUpdateOrgSecret creates or updates an organization secret with an encrypted value.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#create-or-update-an-organization-secret
-func (s *ActionsService) CreateOrUpdateOrgSecret(ctx context.Context, org string, eSecret *EncryptedSecret) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/secrets/%v", org, eSecret.Name)
-
-       req, err := s.client.NewRequest("PUT", u, eSecret)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// SelectedReposList represents the list of repositories selected for an organization secret.
-type SelectedReposList struct {
-       TotalCount   *int          `json:"total_count,omitempty"`
-       Repositories []*Repository `json:"repositories,omitempty"`
-}
-
-// ListSelectedReposForOrgSecret lists all repositories that have access to a secret.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#list-selected-repositories-for-an-organization-secret
-func (s *ActionsService) ListSelectedReposForOrgSecret(ctx context.Context, org, name string) (*SelectedReposList, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/secrets/%v/repositories", org, name)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       result := new(SelectedReposList)
-       resp, err := s.client.Do(ctx, req, result)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return result, resp, nil
-}
-
-// SetSelectedReposForOrgSecret sets the repositories that have access to a secret.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#set-selected-repositories-for-an-organization-secret
-func (s *ActionsService) SetSelectedReposForOrgSecret(ctx context.Context, org, name string, ids SelectedRepoIDs) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/secrets/%v/repositories", org, name)
-
-       type repoIDs struct {
-               SelectedIDs SelectedRepoIDs `json:"selected_repository_ids,omitempty"`
-       }
-
-       req, err := s.client.NewRequest("PUT", u, repoIDs{SelectedIDs: ids})
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// AddSelectedRepoToOrgSecret adds a repository to an organization secret.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#add-selected-repository-to-an-organization-secret
-func (s *ActionsService) AddSelectedRepoToOrgSecret(ctx context.Context, org, name string, repo *Repository) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/secrets/%v/repositories/%v", org, name, *repo.ID)
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// RemoveSelectedRepoFromOrgSecret removes a repository from an organization secret.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#remove-selected-repository-from-an-organization-secret
-func (s *ActionsService) RemoveSelectedRepoFromOrgSecret(ctx context.Context, org, name string, repo *Repository) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/secrets/%v/repositories/%v", org, name, *repo.ID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DeleteOrgSecret deletes a secret in an organization using the secret name.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/secrets/#delete-an-organization-secret
-func (s *ActionsService) DeleteOrgSecret(ctx context.Context, org, name string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/actions/secrets/%v", org, name)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/actions_workflow_jobs.go b/vendor/github.com/google/go-github/v32/github/actions_workflow_jobs.go
deleted file mode 100644 (file)
index f1506ff..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2020 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "net/http"
-       "net/url"
-)
-
-// TaskStep represents a single task step from a sequence of tasks of a job.
-type TaskStep struct {
-       Name        *string    `json:"name,omitempty"`
-       Status      *string    `json:"status,omitempty"`
-       Conclusion  *string    `json:"conclusion,omitempty"`
-       Number      *int64     `json:"number,omitempty"`
-       StartedAt   *Timestamp `json:"started_at,omitempty"`
-       CompletedAt *Timestamp `json:"completed_at,omitempty"`
-}
-
-// WorkflowJob represents a repository action workflow job.
-type WorkflowJob struct {
-       ID          *int64      `json:"id,omitempty"`
-       RunID       *int64      `json:"run_id,omitempty"`
-       RunURL      *string     `json:"run_url,omitempty"`
-       NodeID      *string     `json:"node_id,omitempty"`
-       HeadSHA     *string     `json:"head_sha,omitempty"`
-       URL         *string     `json:"url,omitempty"`
-       HTMLURL     *string     `json:"html_url,omitempty"`
-       Status      *string     `json:"status,omitempty"`
-       Conclusion  *string     `json:"conclusion,omitempty"`
-       StartedAt   *Timestamp  `json:"started_at,omitempty"`
-       CompletedAt *Timestamp  `json:"completed_at,omitempty"`
-       Name        *string     `json:"name,omitempty"`
-       Steps       []*TaskStep `json:"steps,omitempty"`
-       CheckRunURL *string     `json:"check_run_url,omitempty"`
-}
-
-// Jobs represents a slice of repository action workflow job.
-type Jobs struct {
-       TotalCount *int           `json:"total_count,omitempty"`
-       Jobs       []*WorkflowJob `json:"jobs,omitempty"`
-}
-
-// ListWorkflowJobsOptions specifies optional parameters to ListWorkflowJobs.
-type ListWorkflowJobsOptions struct {
-       // Filter specifies how jobs should be filtered by their completed_at timestamp.
-       // Possible values are:
-       //     latest - Returns jobs from the most recent execution of the workflow run
-       //     all - Returns all jobs for a workflow run, including from old executions of the workflow run
-       //
-       // Default value is "latest".
-       Filter string `url:"filter,omitempty"`
-       ListOptions
-}
-
-// ListWorkflowJobs lists all jobs for a workflow run.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-jobs/#list-jobs-for-a-workflow-run
-func (s *ActionsService) ListWorkflowJobs(ctx context.Context, owner, repo string, runID int64, opts *ListWorkflowJobsOptions) (*Jobs, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/actions/runs/%v/jobs", owner, repo, runID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       jobs := new(Jobs)
-       resp, err := s.client.Do(ctx, req, &jobs)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return jobs, resp, nil
-}
-
-// GetWorkflowJobByID gets a specific job in a workflow run by ID.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-jobs/#get-a-job-for-a-workflow-run
-func (s *ActionsService) GetWorkflowJobByID(ctx context.Context, owner, repo string, jobID int64) (*WorkflowJob, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/jobs/%v", owner, repo, jobID)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       job := new(WorkflowJob)
-       resp, err := s.client.Do(ctx, req, job)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return job, resp, nil
-}
-
-// GetWorkflowJobLogs gets a redirect URL to download a plain text file of logs for a workflow job.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-jobs/#download-job-logs-for-a-workflow-run
-func (s *ActionsService) GetWorkflowJobLogs(ctx context.Context, owner, repo string, jobID int64, followRedirects bool) (*url.URL, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/jobs/%v/logs", owner, repo, jobID)
-
-       resp, err := s.getWorkflowLogsFromURL(ctx, u, followRedirects)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       if resp.StatusCode != http.StatusFound {
-               return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status)
-       }
-       parsedURL, err := url.Parse(resp.Header.Get("Location"))
-       return parsedURL, newResponse(resp), err
-}
-
-func (s *ActionsService) getWorkflowLogsFromURL(ctx context.Context, u string, followRedirects bool) (*http.Response, error) {
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       var resp *http.Response
-       // Use http.DefaultTransport if no custom Transport is configured
-       req = withContext(ctx, req)
-       if s.client.client.Transport == nil {
-               resp, err = http.DefaultTransport.RoundTrip(req)
-       } else {
-               resp, err = s.client.client.Transport.RoundTrip(req)
-       }
-       if err != nil {
-               return nil, err
-       }
-       resp.Body.Close()
-
-       // If redirect response is returned, follow it
-       if followRedirects && resp.StatusCode == http.StatusMovedPermanently {
-               u = resp.Header.Get("Location")
-               resp, err = s.getWorkflowLogsFromURL(ctx, u, false)
-       }
-       return resp, err
-
-}
diff --git a/vendor/github.com/google/go-github/v32/github/actions_workflow_runs.go b/vendor/github.com/google/go-github/v32/github/actions_workflow_runs.go
deleted file mode 100644 (file)
index 4213c6b..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-// Copyright 2020 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "net/http"
-       "net/url"
-)
-
-// WorkflowRun represents a repository action workflow run.
-type WorkflowRun struct {
-       ID             *int64         `json:"id,omitempty"`
-       NodeID         *string        `json:"node_id,omitempty"`
-       HeadBranch     *string        `json:"head_branch,omitempty"`
-       HeadSHA        *string        `json:"head_sha,omitempty"`
-       RunNumber      *int           `json:"run_number,omitempty"`
-       Event          *string        `json:"event,omitempty"`
-       Status         *string        `json:"status,omitempty"`
-       Conclusion     *string        `json:"conclusion,omitempty"`
-       WorkflowID     *int64         `json:"workflow_id,omitempty"`
-       URL            *string        `json:"url,omitempty"`
-       HTMLURL        *string        `json:"html_url,omitempty"`
-       PullRequests   []*PullRequest `json:"pull_requests,omitempty"`
-       CreatedAt      *Timestamp     `json:"created_at,omitempty"`
-       UpdatedAt      *Timestamp     `json:"updated_at,omitempty"`
-       JobsURL        *string        `json:"jobs_url,omitempty"`
-       LogsURL        *string        `json:"logs_url,omitempty"`
-       CheckSuiteURL  *string        `json:"check_suite_url,omitempty"`
-       ArtifactsURL   *string        `json:"artifacts_url,omitempty"`
-       CancelURL      *string        `json:"cancel_url,omitempty"`
-       RerunURL       *string        `json:"rerun_url,omitempty"`
-       HeadCommit     *HeadCommit    `json:"head_commit,omitempty"`
-       WorkflowURL    *string        `json:"workflow_url,omitempty"`
-       Repository     *Repository    `json:"repository,omitempty"`
-       HeadRepository *Repository    `json:"head_repository,omitempty"`
-}
-
-// WorkflowRuns represents a slice of repository action workflow run.
-type WorkflowRuns struct {
-       TotalCount   *int           `json:"total_count,omitempty"`
-       WorkflowRuns []*WorkflowRun `json:"workflow_runs,omitempty"`
-}
-
-// ListWorkflowRunsOptions specifies optional parameters to ListWorkflowRuns.
-type ListWorkflowRunsOptions struct {
-       Actor  string `url:"actor,omitempty"`
-       Branch string `url:"branch,omitempty"`
-       Event  string `url:"event,omitempty"`
-       Status string `url:"status,omitempty"`
-       ListOptions
-}
-
-// WorkflowRunUsage represents a usage of a specific workflow run.
-type WorkflowRunUsage struct {
-       Billable      *WorkflowRunEnvironment `json:"billable,omitempty"`
-       RunDurationMS *int64                  `json:"run_duration_ms,omitempty"`
-}
-
-// WorkflowRunEnvironment represents different runner environments available for a workflow run.
-type WorkflowRunEnvironment struct {
-       Ubuntu  *WorkflowRunBill `json:"UBUNTU,omitempty"`
-       MacOS   *WorkflowRunBill `json:"MACOS,omitempty"`
-       Windows *WorkflowRunBill `json:"WINDOWS,omitempty"`
-}
-
-// WorkflowRunBill specifies billable time for a specific environment in a workflow run.
-type WorkflowRunBill struct {
-       TotalMS *int64 `json:"total_ms,omitempty"`
-       Jobs    *int   `json:"jobs,omitempty"`
-}
-
-func (s *ActionsService) listWorkflowRuns(ctx context.Context, endpoint string, opts *ListWorkflowRunsOptions) (*WorkflowRuns, *Response, error) {
-       u, err := addOptions(endpoint, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       runs := new(WorkflowRuns)
-       resp, err := s.client.Do(ctx, req, &runs)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return runs, resp, nil
-}
-
-// ListWorkflowRunsByID lists all workflow runs by workflow ID.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs
-func (s *ActionsService) ListWorkflowRunsByID(ctx context.Context, owner, repo string, workflowID int64, opts *ListWorkflowRunsOptions) (*WorkflowRuns, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/actions/workflows/%v/runs", owner, repo, workflowID)
-       return s.listWorkflowRuns(ctx, u, opts)
-}
-
-// ListWorkflowRunsByFileName lists all workflow runs by workflow file name.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs
-func (s *ActionsService) ListWorkflowRunsByFileName(ctx context.Context, owner, repo, workflowFileName string, opts *ListWorkflowRunsOptions) (*WorkflowRuns, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/actions/workflows/%v/runs", owner, repo, workflowFileName)
-       return s.listWorkflowRuns(ctx, u, opts)
-}
-
-// ListRepositoryWorkflowRuns lists all workflow runs for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-repository
-func (s *ActionsService) ListRepositoryWorkflowRuns(ctx context.Context, owner, repo string, opts *ListWorkflowRunsOptions) (*WorkflowRuns, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/actions/runs", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       runs := new(WorkflowRuns)
-       resp, err := s.client.Do(ctx, req, &runs)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return runs, resp, nil
-}
-
-// GetWorkflowRunByID gets a specific workflow run by ID.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-runs/#get-a-workflow-run
-func (s *ActionsService) GetWorkflowRunByID(ctx context.Context, owner, repo string, runID int64) (*WorkflowRun, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v", owner, repo, runID)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       run := new(WorkflowRun)
-       resp, err := s.client.Do(ctx, req, run)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return run, resp, nil
-}
-
-// RerunWorkflow re-runs a workflow by ID.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-runs/#re-run-a-workflow
-func (s *ActionsService) RerunWorkflowByID(ctx context.Context, owner, repo string, runID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/rerun", owner, repo, runID)
-
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// CancelWorkflowRunByID cancels a workflow run by ID.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-runs/#cancel-a-workflow-run
-func (s *ActionsService) CancelWorkflowRunByID(ctx context.Context, owner, repo string, runID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/cancel", owner, repo, runID)
-
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// GetWorkflowRunLogs gets a redirect URL to download a plain text file of logs for a workflow run.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-runs/#download-workflow-run-logs
-func (s *ActionsService) GetWorkflowRunLogs(ctx context.Context, owner, repo string, runID int64, followRedirects bool) (*url.URL, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/logs", owner, repo, runID)
-
-       resp, err := s.getWorkflowLogsFromURL(ctx, u, followRedirects)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       if resp.StatusCode != http.StatusFound {
-               return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status)
-       }
-       parsedURL, err := url.Parse(resp.Header.Get("Location"))
-       return parsedURL, newResponse(resp), err
-}
-
-// DeleteWorkflowRunLogs deletes all logs for a workflow run.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-runs/#delete-workflow-run-logs
-func (s *ActionsService) DeleteWorkflowRunLogs(ctx context.Context, owner, repo string, runID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/logs", owner, repo, runID)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// GetWorkflowRunUsageByID gets a specific workflow usage run by run ID in the unit of billable milliseconds.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflow-runs/#get-workflow-run-usage
-func (s *ActionsService) GetWorkflowRunUsageByID(ctx context.Context, owner, repo string, runID int64) (*WorkflowRunUsage, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/timing", owner, repo, runID)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       workflowRunUsage := new(WorkflowRunUsage)
-       resp, err := s.client.Do(ctx, req, workflowRunUsage)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return workflowRunUsage, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/actions_workflows.go b/vendor/github.com/google/go-github/v32/github/actions_workflows.go
deleted file mode 100644 (file)
index 6dd02fe..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2020 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// Workflow represents a repository action workflow.
-type Workflow struct {
-       ID        *int64     `json:"id,omitempty"`
-       NodeID    *string    `json:"node_id,omitempty"`
-       Name      *string    `json:"name,omitempty"`
-       Path      *string    `json:"path,omitempty"`
-       State     *string    `json:"state,omitempty"`
-       CreatedAt *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt *Timestamp `json:"updated_at,omitempty"`
-       URL       *string    `json:"url,omitempty"`
-       HTMLURL   *string    `json:"html_url,omitempty"`
-       BadgeURL  *string    `json:"badge_url,omitempty"`
-}
-
-// Workflows represents a slice of repository action workflows.
-type Workflows struct {
-       TotalCount *int        `json:"total_count,omitempty"`
-       Workflows  []*Workflow `json:"workflows,omitempty"`
-}
-
-// WorkflowUsage represents a usage of a specific workflow.
-type WorkflowUsage struct {
-       Billable *WorkflowEnvironment `json:"billable,omitempty"`
-}
-
-// WorkflowEnvironment represents different runner environments available for a workflow.
-type WorkflowEnvironment struct {
-       Ubuntu  *WorkflowBill `json:"UBUNTU,omitempty"`
-       MacOS   *WorkflowBill `json:"MACOS,omitempty"`
-       Windows *WorkflowBill `json:"WINDOWS,omitempty"`
-}
-
-// WorkflowBill specifies billable time for a specific environment in a workflow.
-type WorkflowBill struct {
-       TotalMS *int64 `json:"total_ms,omitempty"`
-}
-
-// ListWorkflows lists all workflows in a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflows/#list-repository-workflows
-func (s *ActionsService) ListWorkflows(ctx context.Context, owner, repo string, opts *ListOptions) (*Workflows, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/actions/workflows", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       workflows := new(Workflows)
-       resp, err := s.client.Do(ctx, req, &workflows)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return workflows, resp, nil
-}
-
-// GetWorkflowByID gets a specific workflow by ID.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflows/#get-a-workflow
-func (s *ActionsService) GetWorkflowByID(ctx context.Context, owner, repo string, workflowID int64) (*Workflow, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v", owner, repo, workflowID)
-
-       return s.getWorkflow(ctx, u)
-}
-
-// GetWorkflowByFileName gets a specific workflow by file name.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflows/#get-a-workflow
-func (s *ActionsService) GetWorkflowByFileName(ctx context.Context, owner, repo, workflowFileName string) (*Workflow, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v", owner, repo, workflowFileName)
-
-       return s.getWorkflow(ctx, u)
-}
-
-func (s *ActionsService) getWorkflow(ctx context.Context, url string) (*Workflow, *Response, error) {
-       req, err := s.client.NewRequest("GET", url, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       workflow := new(Workflow)
-       resp, err := s.client.Do(ctx, req, workflow)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return workflow, resp, nil
-}
-
-// GetWorkflowUsageByID gets a specific workflow usage by ID in the unit of billable milliseconds.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflows/#get-workflow-usage
-func (s *ActionsService) GetWorkflowUsageByID(ctx context.Context, owner, repo string, workflowID int64) (*WorkflowUsage, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v/timing", owner, repo, workflowID)
-
-       return s.getWorkflowUsage(ctx, u)
-}
-
-// GetWorkflowUsageByFileName gets a specific workflow usage by file name in the unit of billable milliseconds.
-//
-// GitHub API docs: https://developer.github.com/v3/actions/workflows/#get-workflow-usage
-func (s *ActionsService) GetWorkflowUsageByFileName(ctx context.Context, owner, repo, workflowFileName string) (*WorkflowUsage, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v/timing", owner, repo, workflowFileName)
-
-       return s.getWorkflowUsage(ctx, u)
-}
-
-func (s *ActionsService) getWorkflowUsage(ctx context.Context, url string) (*WorkflowUsage, *Response, error) {
-       req, err := s.client.NewRequest("GET", url, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       workflowUsage := new(WorkflowUsage)
-       resp, err := s.client.Do(ctx, req, workflowUsage)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return workflowUsage, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/activity.go b/vendor/github.com/google/go-github/v32/github/activity.go
deleted file mode 100644 (file)
index f6336fc..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import "context"
-
-// ActivityService handles communication with the activity related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/
-type ActivityService service
-
-// FeedLink represents a link to a related resource.
-type FeedLink struct {
-       HRef *string `json:"href,omitempty"`
-       Type *string `json:"type,omitempty"`
-}
-
-// Feeds represents timeline resources in Atom format.
-type Feeds struct {
-       TimelineURL                 *string  `json:"timeline_url,omitempty"`
-       UserURL                     *string  `json:"user_url,omitempty"`
-       CurrentUserPublicURL        *string  `json:"current_user_public_url,omitempty"`
-       CurrentUserURL              *string  `json:"current_user_url,omitempty"`
-       CurrentUserActorURL         *string  `json:"current_user_actor_url,omitempty"`
-       CurrentUserOrganizationURL  *string  `json:"current_user_organization_url,omitempty"`
-       CurrentUserOrganizationURLs []string `json:"current_user_organization_urls,omitempty"`
-       Links                       *struct {
-               Timeline                 *FeedLink   `json:"timeline,omitempty"`
-               User                     *FeedLink   `json:"user,omitempty"`
-               CurrentUserPublic        *FeedLink   `json:"current_user_public,omitempty"`
-               CurrentUser              *FeedLink   `json:"current_user,omitempty"`
-               CurrentUserActor         *FeedLink   `json:"current_user_actor,omitempty"`
-               CurrentUserOrganization  *FeedLink   `json:"current_user_organization,omitempty"`
-               CurrentUserOrganizations []*FeedLink `json:"current_user_organizations,omitempty"`
-       } `json:"_links,omitempty"`
-}
-
-// ListFeeds lists all the feeds available to the authenticated user.
-//
-// GitHub provides several timeline resources in Atom format:
-//     Timeline: The GitHub global public timeline
-//     User: The public timeline for any user, using URI template
-//     Current user public: The public timeline for the authenticated user
-//     Current user: The private timeline for the authenticated user
-//     Current user actor: The private timeline for activity created by the
-//         authenticated user
-//     Current user organizations: The private timeline for the organizations
-//         the authenticated user is a member of.
-//
-// Note: Private feeds are only returned when authenticating via Basic Auth
-// since current feed URIs use the older, non revocable auth tokens.
-func (s *ActivityService) ListFeeds(ctx context.Context) (*Feeds, *Response, error) {
-       req, err := s.client.NewRequest("GET", "feeds", nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       f := &Feeds{}
-       resp, err := s.client.Do(ctx, req, f)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return f, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/activity_events.go b/vendor/github.com/google/go-github/v32/github/activity_events.go
deleted file mode 100644 (file)
index e795b9f..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListEvents drinks from the firehose of all public events across GitHub.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-events
-func (s *ActivityService) ListEvents(ctx context.Context, opts *ListOptions) ([]*Event, *Response, error) {
-       u, err := addOptions("events", opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var events []*Event
-       resp, err := s.client.Do(ctx, req, &events)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return events, resp, nil
-}
-
-// ListRepositoryEvents lists events for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/#list-repository-events
-func (s *ActivityService) ListRepositoryEvents(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Event, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/events", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var events []*Event
-       resp, err := s.client.Do(ctx, req, &events)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return events, resp, nil
-}
-
-// ListIssueEventsForRepository lists issue events for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/events/#list-issue-events-for-a-repository
-func (s *ActivityService) ListIssueEventsForRepository(ctx context.Context, owner, repo string, opts *ListOptions) ([]*IssueEvent, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/events", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var events []*IssueEvent
-       resp, err := s.client.Do(ctx, req, &events)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return events, resp, nil
-}
-
-// ListEventsForRepoNetwork lists public events for a network of repositories.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-events-for-a-network-of-repositories
-func (s *ActivityService) ListEventsForRepoNetwork(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Event, *Response, error) {
-       u := fmt.Sprintf("networks/%v/%v/events", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var events []*Event
-       resp, err := s.client.Do(ctx, req, &events)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return events, resp, nil
-}
-
-// ListEventsForOrganization lists public events for an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-organization-events
-func (s *ActivityService) ListEventsForOrganization(ctx context.Context, org string, opts *ListOptions) ([]*Event, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/events", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var events []*Event
-       resp, err := s.client.Do(ctx, req, &events)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return events, resp, nil
-}
-
-// ListEventsPerformedByUser lists the events performed by a user. If publicOnly is
-// true, only public events will be returned.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/#list-events-for-the-authenticated-user
-// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-events-for-a-user
-func (s *ActivityService) ListEventsPerformedByUser(ctx context.Context, user string, publicOnly bool, opts *ListOptions) ([]*Event, *Response, error) {
-       var u string
-       if publicOnly {
-               u = fmt.Sprintf("users/%v/events/public", user)
-       } else {
-               u = fmt.Sprintf("users/%v/events", user)
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var events []*Event
-       resp, err := s.client.Do(ctx, req, &events)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return events, resp, nil
-}
-
-// ListEventsReceivedByUser lists the events received by a user. If publicOnly is
-// true, only public events will be returned.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/#list-events-received-by-the-authenticated-user
-// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-events-received-by-a-user
-func (s *ActivityService) ListEventsReceivedByUser(ctx context.Context, user string, publicOnly bool, opts *ListOptions) ([]*Event, *Response, error) {
-       var u string
-       if publicOnly {
-               u = fmt.Sprintf("users/%v/received_events/public", user)
-       } else {
-               u = fmt.Sprintf("users/%v/received_events", user)
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var events []*Event
-       resp, err := s.client.Do(ctx, req, &events)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return events, resp, nil
-}
-
-// ListUserEventsForOrganization provides the user’s organization dashboard. You
-// must be authenticated as the user to view this.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/#list-organization-events-for-the-authenticated-user
-func (s *ActivityService) ListUserEventsForOrganization(ctx context.Context, org, user string, opts *ListOptions) ([]*Event, *Response, error) {
-       u := fmt.Sprintf("users/%v/events/orgs/%v", user, org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var events []*Event
-       resp, err := s.client.Do(ctx, req, &events)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return events, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/activity_notifications.go b/vendor/github.com/google/go-github/v32/github/activity_notifications.go
deleted file mode 100644 (file)
index 9c19922..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2014 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// Notification identifies a GitHub notification for a user.
-type Notification struct {
-       ID         *string              `json:"id,omitempty"`
-       Repository *Repository          `json:"repository,omitempty"`
-       Subject    *NotificationSubject `json:"subject,omitempty"`
-
-       // Reason identifies the event that triggered the notification.
-       //
-       // GitHub API docs: https://developer.github.com/v3/activity/notifications/#notification-reasons
-       Reason *string `json:"reason,omitempty"`
-
-       Unread     *bool      `json:"unread,omitempty"`
-       UpdatedAt  *time.Time `json:"updated_at,omitempty"`
-       LastReadAt *time.Time `json:"last_read_at,omitempty"`
-       URL        *string    `json:"url,omitempty"`
-}
-
-// NotificationSubject identifies the subject of a notification.
-type NotificationSubject struct {
-       Title            *string `json:"title,omitempty"`
-       URL              *string `json:"url,omitempty"`
-       LatestCommentURL *string `json:"latest_comment_url,omitempty"`
-       Type             *string `json:"type,omitempty"`
-}
-
-// NotificationListOptions specifies the optional parameters to the
-// ActivityService.ListNotifications method.
-type NotificationListOptions struct {
-       All           bool      `url:"all,omitempty"`
-       Participating bool      `url:"participating,omitempty"`
-       Since         time.Time `url:"since,omitempty"`
-       Before        time.Time `url:"before,omitempty"`
-
-       ListOptions
-}
-
-// ListNotifications lists all notifications for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/notifications/#list-notifications-for-the-authenticated-user
-func (s *ActivityService) ListNotifications(ctx context.Context, opts *NotificationListOptions) ([]*Notification, *Response, error) {
-       u := fmt.Sprintf("notifications")
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var notifications []*Notification
-       resp, err := s.client.Do(ctx, req, &notifications)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return notifications, resp, nil
-}
-
-// ListRepositoryNotifications lists all notifications in a given repository
-// for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/notifications/#list-repository-notifications-for-the-authenticated-user
-func (s *ActivityService) ListRepositoryNotifications(ctx context.Context, owner, repo string, opts *NotificationListOptions) ([]*Notification, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/notifications", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var notifications []*Notification
-       resp, err := s.client.Do(ctx, req, &notifications)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return notifications, resp, nil
-}
-
-type markReadOptions struct {
-       LastReadAt time.Time `json:"last_read_at,omitempty"`
-}
-
-// MarkNotificationsRead marks all notifications up to lastRead as read.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/notifications/#mark-as-read
-func (s *ActivityService) MarkNotificationsRead(ctx context.Context, lastRead time.Time) (*Response, error) {
-       opts := &markReadOptions{
-               LastReadAt: lastRead,
-       }
-       req, err := s.client.NewRequest("PUT", "notifications", opts)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// MarkRepositoryNotificationsRead marks all notifications up to lastRead in
-// the specified repository as read.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/notifications/#mark-repository-notifications-as-read
-func (s *ActivityService) MarkRepositoryNotificationsRead(ctx context.Context, owner, repo string, lastRead time.Time) (*Response, error) {
-       opts := &markReadOptions{
-               LastReadAt: lastRead,
-       }
-       u := fmt.Sprintf("repos/%v/%v/notifications", owner, repo)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// GetThread gets the specified notification thread.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/notifications/#get-a-thread
-func (s *ActivityService) GetThread(ctx context.Context, id string) (*Notification, *Response, error) {
-       u := fmt.Sprintf("notifications/threads/%v", id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       notification := new(Notification)
-       resp, err := s.client.Do(ctx, req, notification)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return notification, resp, nil
-}
-
-// MarkThreadRead marks the specified thread as read.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/notifications/#mark-a-thread-as-read
-func (s *ActivityService) MarkThreadRead(ctx context.Context, id string) (*Response, error) {
-       u := fmt.Sprintf("notifications/threads/%v", id)
-
-       req, err := s.client.NewRequest("PATCH", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// GetThreadSubscription checks to see if the authenticated user is subscribed
-// to a thread.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/notifications/#get-a-thread-subscription-for-the-authenticated-user
-func (s *ActivityService) GetThreadSubscription(ctx context.Context, id string) (*Subscription, *Response, error) {
-       u := fmt.Sprintf("notifications/threads/%v/subscription", id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       sub := new(Subscription)
-       resp, err := s.client.Do(ctx, req, sub)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return sub, resp, nil
-}
-
-// SetThreadSubscription sets the subscription for the specified thread for the
-// authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/notifications/#set-a-thread-subscription
-func (s *ActivityService) SetThreadSubscription(ctx context.Context, id string, subscription *Subscription) (*Subscription, *Response, error) {
-       u := fmt.Sprintf("notifications/threads/%v/subscription", id)
-
-       req, err := s.client.NewRequest("PUT", u, subscription)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       sub := new(Subscription)
-       resp, err := s.client.Do(ctx, req, sub)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return sub, resp, nil
-}
-
-// DeleteThreadSubscription deletes the subscription for the specified thread
-// for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/notifications/#delete-a-thread-subscription
-func (s *ActivityService) DeleteThreadSubscription(ctx context.Context, id string) (*Response, error) {
-       u := fmt.Sprintf("notifications/threads/%v/subscription", id)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/activity_star.go b/vendor/github.com/google/go-github/v32/github/activity_star.go
deleted file mode 100644 (file)
index 158f395..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "strings"
-)
-
-// StarredRepository is returned by ListStarred.
-type StarredRepository struct {
-       StarredAt  *Timestamp  `json:"starred_at,omitempty"`
-       Repository *Repository `json:"repo,omitempty"`
-}
-
-// Stargazer represents a user that has starred a repository.
-type Stargazer struct {
-       StarredAt *Timestamp `json:"starred_at,omitempty"`
-       User      *User      `json:"user,omitempty"`
-}
-
-// ListStargazers lists people who have starred the specified repo.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/starring/#list-stargazers
-func (s *ActivityService) ListStargazers(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Stargazer, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/stargazers", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeStarringPreview)
-
-       var stargazers []*Stargazer
-       resp, err := s.client.Do(ctx, req, &stargazers)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return stargazers, resp, nil
-}
-
-// ActivityListStarredOptions specifies the optional parameters to the
-// ActivityService.ListStarred method.
-type ActivityListStarredOptions struct {
-       // How to sort the repository list. Possible values are: created, updated,
-       // pushed, full_name. Default is "full_name".
-       Sort string `url:"sort,omitempty"`
-
-       // Direction in which to sort repositories. Possible values are: asc, desc.
-       // Default is "asc" when sort is "full_name", otherwise default is "desc".
-       Direction string `url:"direction,omitempty"`
-
-       ListOptions
-}
-
-// ListStarred lists all the repos starred by a user. Passing the empty string
-// will list the starred repositories for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/starring/#list-repositories-starred-by-a-user
-// GitHub API docs: https://developer.github.com/v3/activity/starring/#list-repositories-starred-by-the-authenticated-user
-func (s *ActivityService) ListStarred(ctx context.Context, user string, opts *ActivityListStarredOptions) ([]*StarredRepository, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v/starred", user)
-       } else {
-               u = "user/starred"
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when APIs fully launch
-       acceptHeaders := []string{mediaTypeStarringPreview, mediaTypeTopicsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var repos []*StarredRepository
-       resp, err := s.client.Do(ctx, req, &repos)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repos, resp, nil
-}
-
-// IsStarred checks if a repository is starred by authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/starring/#check-if-a-repository-is-starred-by-the-authenticated-user
-func (s *ActivityService) IsStarred(ctx context.Context, owner, repo string) (bool, *Response, error) {
-       u := fmt.Sprintf("user/starred/%v/%v", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-       resp, err := s.client.Do(ctx, req, nil)
-       starred, err := parseBoolResponse(err)
-       return starred, resp, err
-}
-
-// Star a repository as the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/starring/#star-a-repository-for-the-authenticated-user
-func (s *ActivityService) Star(ctx context.Context, owner, repo string) (*Response, error) {
-       u := fmt.Sprintf("user/starred/%v/%v", owner, repo)
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// Unstar a repository as the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/starring/#unstar-a-repository-for-the-authenticated-user
-func (s *ActivityService) Unstar(ctx context.Context, owner, repo string) (*Response, error) {
-       u := fmt.Sprintf("user/starred/%v/%v", owner, repo)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/activity_watching.go b/vendor/github.com/google/go-github/v32/github/activity_watching.go
deleted file mode 100644 (file)
index 0265a08..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2014 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// Subscription identifies a repository or thread subscription.
-type Subscription struct {
-       Subscribed *bool      `json:"subscribed,omitempty"`
-       Ignored    *bool      `json:"ignored,omitempty"`
-       Reason     *string    `json:"reason,omitempty"`
-       CreatedAt  *Timestamp `json:"created_at,omitempty"`
-       URL        *string    `json:"url,omitempty"`
-
-       // only populated for repository subscriptions
-       RepositoryURL *string `json:"repository_url,omitempty"`
-
-       // only populated for thread subscriptions
-       ThreadURL *string `json:"thread_url,omitempty"`
-}
-
-// ListWatchers lists watchers of a particular repo.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/watching/#list-watchers
-func (s *ActivityService) ListWatchers(ctx context.Context, owner, repo string, opts *ListOptions) ([]*User, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/subscribers", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var watchers []*User
-       resp, err := s.client.Do(ctx, req, &watchers)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return watchers, resp, nil
-}
-
-// ListWatched lists the repositories the specified user is watching. Passing
-// the empty string will fetch watched repos for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/watching/#list-repositories-watched-by-a-user
-// GitHub API docs: https://developer.github.com/v3/activity/watching/#list-repositories-watched-by-the-authenticated-user
-func (s *ActivityService) ListWatched(ctx context.Context, user string, opts *ListOptions) ([]*Repository, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v/subscriptions", user)
-       } else {
-               u = "user/subscriptions"
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var watched []*Repository
-       resp, err := s.client.Do(ctx, req, &watched)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return watched, resp, nil
-}
-
-// GetRepositorySubscription returns the subscription for the specified
-// repository for the authenticated user. If the authenticated user is not
-// watching the repository, a nil Subscription is returned.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/watching/#get-a-repository-subscription
-func (s *ActivityService) GetRepositorySubscription(ctx context.Context, owner, repo string) (*Subscription, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       sub := new(Subscription)
-       resp, err := s.client.Do(ctx, req, sub)
-       if err != nil {
-               // if it's just a 404, don't return that as an error
-               _, err = parseBoolResponse(err)
-               return nil, resp, err
-       }
-
-       return sub, resp, nil
-}
-
-// SetRepositorySubscription sets the subscription for the specified repository
-// for the authenticated user.
-//
-// To watch a repository, set subscription.Subscribed to true.
-// To ignore notifications made within a repository, set subscription.Ignored to true.
-// To stop watching a repository, use DeleteRepositorySubscription.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/watching/#set-a-repository-subscription
-func (s *ActivityService) SetRepositorySubscription(ctx context.Context, owner, repo string, subscription *Subscription) (*Subscription, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo)
-
-       req, err := s.client.NewRequest("PUT", u, subscription)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       sub := new(Subscription)
-       resp, err := s.client.Do(ctx, req, sub)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return sub, resp, nil
-}
-
-// DeleteRepositorySubscription deletes the subscription for the specified
-// repository for the authenticated user.
-//
-// This is used to stop watching a repository. To control whether or not to
-// receive notifications from a repository, use SetRepositorySubscription.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/watching/#delete-a-repository-subscription
-func (s *ActivityService) DeleteRepositorySubscription(ctx context.Context, owner, repo string) (*Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/admin.go b/vendor/github.com/google/go-github/v32/github/admin.go
deleted file mode 100644 (file)
index 31cd1fa..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// AdminService handles communication with the admin related methods of the
-// GitHub API. These API routes are normally only accessible for GitHub
-// Enterprise installations.
-//
-// GitHub API docs: https://developer.github.com/v3/enterprise/
-type AdminService service
-
-// TeamLDAPMapping represents the mapping between a GitHub team and an LDAP group.
-type TeamLDAPMapping struct {
-       ID          *int64  `json:"id,omitempty"`
-       LDAPDN      *string `json:"ldap_dn,omitempty"`
-       URL         *string `json:"url,omitempty"`
-       Name        *string `json:"name,omitempty"`
-       Slug        *string `json:"slug,omitempty"`
-       Description *string `json:"description,omitempty"`
-       Privacy     *string `json:"privacy,omitempty"`
-       Permission  *string `json:"permission,omitempty"`
-
-       MembersURL      *string `json:"members_url,omitempty"`
-       RepositoriesURL *string `json:"repositories_url,omitempty"`
-}
-
-func (m TeamLDAPMapping) String() string {
-       return Stringify(m)
-}
-
-// UserLDAPMapping represents the mapping between a GitHub user and an LDAP user.
-type UserLDAPMapping struct {
-       ID         *int64  `json:"id,omitempty"`
-       LDAPDN     *string `json:"ldap_dn,omitempty"`
-       Login      *string `json:"login,omitempty"`
-       AvatarURL  *string `json:"avatar_url,omitempty"`
-       GravatarID *string `json:"gravatar_id,omitempty"`
-       Type       *string `json:"type,omitempty"`
-       SiteAdmin  *bool   `json:"site_admin,omitempty"`
-
-       URL               *string `json:"url,omitempty"`
-       EventsURL         *string `json:"events_url,omitempty"`
-       FollowingURL      *string `json:"following_url,omitempty"`
-       FollowersURL      *string `json:"followers_url,omitempty"`
-       GistsURL          *string `json:"gists_url,omitempty"`
-       OrganizationsURL  *string `json:"organizations_url,omitempty"`
-       ReceivedEventsURL *string `json:"received_events_url,omitempty"`
-       ReposURL          *string `json:"repos_url,omitempty"`
-       StarredURL        *string `json:"starred_url,omitempty"`
-       SubscriptionsURL  *string `json:"subscriptions_url,omitempty"`
-}
-
-func (m UserLDAPMapping) String() string {
-       return Stringify(m)
-}
-
-// Enterprise represents the GitHub enterprise profile.
-type Enterprise struct {
-       ID          *int       `json:"id,omitempty"`
-       Slug        *string    `json:"slug,omitempty"`
-       Name        *string    `json:"name,omitempty"`
-       NodeID      *string    `json:"node_id,omitempty"`
-       AvatarURL   *string    `json:"avatar_url,omitempty"`
-       Description *string    `json:"description,omitempty"`
-       WebsiteURL  *string    `json:"website_url,omitempty"`
-       HTMLURL     *string    `json:"html_url,omitempty"`
-       CreatedAt   *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt   *Timestamp `json:"updated_at,omitempty"`
-}
-
-func (m Enterprise) String() string {
-       return Stringify(m)
-}
-
-// UpdateUserLDAPMapping updates the mapping between a GitHub user and an LDAP user.
-//
-// GitHub API docs: https://developer.github.com/v3/enterprise/ldap/#update-ldap-mapping-for-a-user
-func (s *AdminService) UpdateUserLDAPMapping(ctx context.Context, user string, mapping *UserLDAPMapping) (*UserLDAPMapping, *Response, error) {
-       u := fmt.Sprintf("admin/ldap/users/%v/mapping", user)
-       req, err := s.client.NewRequest("PATCH", u, mapping)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       m := new(UserLDAPMapping)
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// UpdateTeamLDAPMapping updates the mapping between a GitHub team and an LDAP group.
-//
-// GitHub API docs: https://developer.github.com/v3/enterprise/ldap/#update-ldap-mapping-for-a-team
-func (s *AdminService) UpdateTeamLDAPMapping(ctx context.Context, team int64, mapping *TeamLDAPMapping) (*TeamLDAPMapping, *Response, error) {
-       u := fmt.Sprintf("admin/ldap/teams/%v/mapping", team)
-       req, err := s.client.NewRequest("PATCH", u, mapping)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       m := new(TeamLDAPMapping)
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/admin_orgs.go b/vendor/github.com/google/go-github/v32/github/admin_orgs.go
deleted file mode 100644 (file)
index 448e51f..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2019 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// createOrgRequest is a subset of Organization and is used internally
-// by CreateOrg to pass only the known fields for the endpoint.
-type createOrgRequest struct {
-       Login *string `json:"login,omitempty"`
-       Admin *string `json:"admin,omitempty"`
-}
-
-// CreateOrg creates a new organization in GitHub Enterprise.
-//
-// Note that only a subset of the org fields are used and org must
-// not be nil.
-//
-// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/orgs/#create-an-organization
-func (s *AdminService) CreateOrg(ctx context.Context, org *Organization, admin string) (*Organization, *Response, error) {
-       u := "admin/organizations"
-
-       orgReq := &createOrgRequest{
-               Login: org.Login,
-               Admin: &admin,
-       }
-
-       req, err := s.client.NewRequest("POST", u, orgReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       o := new(Organization)
-       resp, err := s.client.Do(ctx, req, o)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return o, resp, nil
-}
-
-// renameOrgRequest is a subset of Organization and is used internally
-// by RenameOrg and RenameOrgByName to pass only the known fields for the endpoint.
-type renameOrgRequest struct {
-       Login *string `json:"login,omitempty"`
-}
-
-// RenameOrgResponse is the response given when renaming an Organization.
-type RenameOrgResponse struct {
-       Message *string `json:"message,omitempty"`
-       URL     *string `json:"url,omitempty"`
-}
-
-// RenameOrg renames an organization in GitHub Enterprise.
-//
-// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/orgs/#rename-an-organization
-func (s *AdminService) RenameOrg(ctx context.Context, org *Organization, newName string) (*RenameOrgResponse, *Response, error) {
-       return s.RenameOrgByName(ctx, *org.Login, newName)
-}
-
-// RenameOrgByName renames an organization in GitHub Enterprise using its current name.
-//
-// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/orgs/#rename-an-organization
-func (s *AdminService) RenameOrgByName(ctx context.Context, org, newName string) (*RenameOrgResponse, *Response, error) {
-       u := fmt.Sprintf("admin/organizations/%v", org)
-
-       orgReq := &renameOrgRequest{
-               Login: &newName,
-       }
-
-       req, err := s.client.NewRequest("PATCH", u, orgReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       o := new(RenameOrgResponse)
-       resp, err := s.client.Do(ctx, req, o)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return o, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/admin_stats.go b/vendor/github.com/google/go-github/v32/github/admin_stats.go
deleted file mode 100644 (file)
index dabefde..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// AdminStats represents a variety of stats of a GitHub Enterprise
-// installation.
-type AdminStats struct {
-       Issues     *IssueStats     `json:"issues,omitempty"`
-       Hooks      *HookStats      `json:"hooks,omitempty"`
-       Milestones *MilestoneStats `json:"milestones,omitempty"`
-       Orgs       *OrgStats       `json:"orgs,omitempty"`
-       Comments   *CommentStats   `json:"comments,omitempty"`
-       Pages      *PageStats      `json:"pages,omitempty"`
-       Users      *UserStats      `json:"users,omitempty"`
-       Gists      *GistStats      `json:"gists,omitempty"`
-       Pulls      *PullStats      `json:"pulls,omitempty"`
-       Repos      *RepoStats      `json:"repos,omitempty"`
-}
-
-func (s AdminStats) String() string {
-       return Stringify(s)
-}
-
-// IssueStats represents the number of total, open and closed issues.
-type IssueStats struct {
-       TotalIssues  *int `json:"total_issues,omitempty"`
-       OpenIssues   *int `json:"open_issues,omitempty"`
-       ClosedIssues *int `json:"closed_issues,omitempty"`
-}
-
-func (s IssueStats) String() string {
-       return Stringify(s)
-}
-
-// HookStats represents the number of total, active and inactive hooks.
-type HookStats struct {
-       TotalHooks    *int `json:"total_hooks,omitempty"`
-       ActiveHooks   *int `json:"active_hooks,omitempty"`
-       InactiveHooks *int `json:"inactive_hooks,omitempty"`
-}
-
-func (s HookStats) String() string {
-       return Stringify(s)
-}
-
-// MilestoneStats represents the number of total, open and close milestones.
-type MilestoneStats struct {
-       TotalMilestones  *int `json:"total_milestones,omitempty"`
-       OpenMilestones   *int `json:"open_milestones,omitempty"`
-       ClosedMilestones *int `json:"closed_milestones,omitempty"`
-}
-
-func (s MilestoneStats) String() string {
-       return Stringify(s)
-}
-
-// OrgStats represents the number of total, disabled organizations and the team
-// and team member count.
-type OrgStats struct {
-       TotalOrgs        *int `json:"total_orgs,omitempty"`
-       DisabledOrgs     *int `json:"disabled_orgs,omitempty"`
-       TotalTeams       *int `json:"total_teams,omitempty"`
-       TotalTeamMembers *int `json:"total_team_members,omitempty"`
-}
-
-func (s OrgStats) String() string {
-       return Stringify(s)
-}
-
-// CommentStats represents the number of total comments on commits, gists, issues
-// and pull requests.
-type CommentStats struct {
-       TotalCommitComments      *int `json:"total_commit_comments,omitempty"`
-       TotalGistComments        *int `json:"total_gist_comments,omitempty"`
-       TotalIssueComments       *int `json:"total_issue_comments,omitempty"`
-       TotalPullRequestComments *int `json:"total_pull_request_comments,omitempty"`
-}
-
-func (s CommentStats) String() string {
-       return Stringify(s)
-}
-
-// PageStats represents the total number of github pages.
-type PageStats struct {
-       TotalPages *int `json:"total_pages,omitempty"`
-}
-
-func (s PageStats) String() string {
-       return Stringify(s)
-}
-
-// UserStats represents the number of total, admin and suspended users.
-type UserStats struct {
-       TotalUsers     *int `json:"total_users,omitempty"`
-       AdminUsers     *int `json:"admin_users,omitempty"`
-       SuspendedUsers *int `json:"suspended_users,omitempty"`
-}
-
-func (s UserStats) String() string {
-       return Stringify(s)
-}
-
-// GistStats represents the number of total, private and public gists.
-type GistStats struct {
-       TotalGists   *int `json:"total_gists,omitempty"`
-       PrivateGists *int `json:"private_gists,omitempty"`
-       PublicGists  *int `json:"public_gists,omitempty"`
-}
-
-func (s GistStats) String() string {
-       return Stringify(s)
-}
-
-// PullStats represents the number of total, merged, mergable and unmergeable
-// pull-requests.
-type PullStats struct {
-       TotalPulls      *int `json:"total_pulls,omitempty"`
-       MergedPulls     *int `json:"merged_pulls,omitempty"`
-       MergablePulls   *int `json:"mergeable_pulls,omitempty"`
-       UnmergablePulls *int `json:"unmergeable_pulls,omitempty"`
-}
-
-func (s PullStats) String() string {
-       return Stringify(s)
-}
-
-// RepoStats represents the number of total, root, fork, organization repositories
-// together with the total number of pushes and wikis.
-type RepoStats struct {
-       TotalRepos  *int `json:"total_repos,omitempty"`
-       RootRepos   *int `json:"root_repos,omitempty"`
-       ForkRepos   *int `json:"fork_repos,omitempty"`
-       OrgRepos    *int `json:"org_repos,omitempty"`
-       TotalPushes *int `json:"total_pushes,omitempty"`
-       TotalWikis  *int `json:"total_wikis,omitempty"`
-}
-
-func (s RepoStats) String() string {
-       return Stringify(s)
-}
-
-// GetAdminStats returns a variety of metrics about a GitHub Enterprise
-// installation.
-//
-// Please note that this is only available to site administrators,
-// otherwise it will error with a 404 not found (instead of 401 or 403).
-//
-// GitHub API docs: https://developer.github.com/v3/enterprise-admin/admin_stats/
-func (s *AdminService) GetAdminStats(ctx context.Context) (*AdminStats, *Response, error) {
-       u := fmt.Sprintf("enterprise/stats/all")
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       m := new(AdminStats)
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/admin_users.go b/vendor/github.com/google/go-github/v32/github/admin_users.go
deleted file mode 100644 (file)
index d756a77..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2019 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// createUserRequest is a subset of User and is used internally
-// by CreateUser to pass only the known fields for the endpoint.
-type createUserRequest struct {
-       Login *string `json:"login,omitempty"`
-       Email *string `json:"email,omitempty"`
-}
-
-// CreateUser creates a new user in GitHub Enterprise.
-//
-// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#create-a-new-user
-func (s *AdminService) CreateUser(ctx context.Context, login, email string) (*User, *Response, error) {
-       u := "admin/users"
-
-       userReq := &createUserRequest{
-               Login: &login,
-               Email: &email,
-       }
-
-       req, err := s.client.NewRequest("POST", u, userReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var user User
-       resp, err := s.client.Do(ctx, req, &user)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return &user, resp, nil
-}
-
-// DeleteUser deletes a user in GitHub Enterprise.
-//
-// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#delete-a-user
-func (s *AdminService) DeleteUser(ctx context.Context, username string) (*Response, error) {
-       u := "admin/users/" + username
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       resp, err := s.client.Do(ctx, req, nil)
-       if err != nil {
-               return resp, err
-       }
-
-       return resp, nil
-}
-
-// ImpersonateUserOptions represents the scoping for the OAuth token.
-type ImpersonateUserOptions struct {
-       Scopes []string `json:"scopes,omitempty"`
-}
-
-// OAuthAPP represents the GitHub Site Administrator OAuth app.
-type OAuthAPP struct {
-       URL      *string `json:"url,omitempty"`
-       Name     *string `json:"name,omitempty"`
-       ClientID *string `json:"client_id,omitempty"`
-}
-
-func (s OAuthAPP) String() string {
-       return Stringify(s)
-}
-
-// UserAuthorization represents the impersonation response.
-type UserAuthorization struct {
-       ID             *int64     `json:"id,omitempty"`
-       URL            *string    `json:"url,omitempty"`
-       Scopes         []string   `json:"scopes,omitempty"`
-       Token          *string    `json:"token,omitempty"`
-       TokenLastEight *string    `json:"token_last_eight,omitempty"`
-       HashedToken    *string    `json:"hashed_token,omitempty"`
-       App            *OAuthAPP  `json:"app,omitempty"`
-       Note           *string    `json:"note,omitempty"`
-       NoteURL        *string    `json:"note_url,omitempty"`
-       UpdatedAt      *Timestamp `json:"updated_at,omitempty"`
-       CreatedAt      *Timestamp `json:"created_at,omitempty"`
-       Fingerprint    *string    `json:"fingerprint,omitempty"`
-}
-
-// CreateUserImpersonation creates an impersonation OAuth token.
-//
-// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#create-an-impersonation-oauth-token
-func (s *AdminService) CreateUserImpersonation(ctx context.Context, username string, opts *ImpersonateUserOptions) (*UserAuthorization, *Response, error) {
-       u := fmt.Sprintf("admin/users/%s/authorizations", username)
-
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       a := new(UserAuthorization)
-       resp, err := s.client.Do(ctx, req, a)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return a, resp, nil
-}
-
-// DeleteUserImpersonation deletes an impersonation OAuth token.
-//
-// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#delete-an-impersonation-oauth-token
-func (s *AdminService) DeleteUserImpersonation(ctx context.Context, username string) (*Response, error) {
-       u := fmt.Sprintf("admin/users/%s/authorizations", username)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       resp, err := s.client.Do(ctx, req, nil)
-       if err != nil {
-               return resp, err
-       }
-
-       return resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/apps.go b/vendor/github.com/google/go-github/v32/github/apps.go
deleted file mode 100644 (file)
index 45262c4..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// AppsService provides access to the installation related functions
-// in the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/
-type AppsService service
-
-// App represents a GitHub App.
-type App struct {
-       ID          *int64                   `json:"id,omitempty"`
-       Slug        *string                  `json:"slug,omitempty"`
-       NodeID      *string                  `json:"node_id,omitempty"`
-       Owner       *User                    `json:"owner,omitempty"`
-       Name        *string                  `json:"name,omitempty"`
-       Description *string                  `json:"description,omitempty"`
-       ExternalURL *string                  `json:"external_url,omitempty"`
-       HTMLURL     *string                  `json:"html_url,omitempty"`
-       CreatedAt   *Timestamp               `json:"created_at,omitempty"`
-       UpdatedAt   *Timestamp               `json:"updated_at,omitempty"`
-       Permissions *InstallationPermissions `json:"permissions,omitempty"`
-       Events      []string                 `json:"events,omitempty"`
-}
-
-// InstallationToken represents an installation token.
-type InstallationToken struct {
-       Token        *string                  `json:"token,omitempty"`
-       ExpiresAt    *time.Time               `json:"expires_at,omitempty"`
-       Permissions  *InstallationPermissions `json:"permissions,omitempty"`
-       Repositories []*Repository            `json:"repositories,omitempty"`
-}
-
-// InstallationTokenOptions allow restricting a token's access to specific repositories.
-type InstallationTokenOptions struct {
-       // The IDs of the repositories that the installation token can access.
-       // Providing repository IDs restricts the access of an installation token to specific repositories.
-       RepositoryIDs []int64 `json:"repository_ids,omitempty"`
-
-       // The permissions granted to the access token.
-       // The permissions object includes the permission names and their access type.
-       Permissions *InstallationPermissions `json:"permissions,omitempty"`
-}
-
-// InstallationPermissions lists the repository and organization permissions for an installation.
-//
-// Permission names taken from:
-//   https://developer.github.com/v3/apps/permissions/
-//   https://developer.github.com/enterprise/v3/apps/permissions/
-type InstallationPermissions struct {
-       Administration              *string `json:"administration,omitempty"`
-       Blocking                    *string `json:"blocking,omitempty"`
-       Checks                      *string `json:"checks,omitempty"`
-       Contents                    *string `json:"contents,omitempty"`
-       ContentReferences           *string `json:"content_references,omitempty"`
-       Deployments                 *string `json:"deployments,omitempty"`
-       Emails                      *string `json:"emails,omitempty"`
-       Followers                   *string `json:"followers,omitempty"`
-       Issues                      *string `json:"issues,omitempty"`
-       Metadata                    *string `json:"metadata,omitempty"`
-       Members                     *string `json:"members,omitempty"`
-       OrganizationAdministration  *string `json:"organization_administration,omitempty"`
-       OrganizationHooks           *string `json:"organization_hooks,omitempty"`
-       OrganizationPlan            *string `json:"organization_plan,omitempty"`
-       OrganizationPreReceiveHooks *string `json:"organization_pre_receive_hooks,omitempty"`
-       OrganizationProjects        *string `json:"organization_projects,omitempty"`
-       OrganizationUserBlocking    *string `json:"organization_user_blocking,omitempty"`
-       Packages                    *string `json:"packages,omitempty"`
-       Pages                       *string `json:"pages,omitempty"`
-       PullRequests                *string `json:"pull_requests,omitempty"`
-       RepositoryHooks             *string `json:"repository_hooks,omitempty"`
-       RepositoryProjects          *string `json:"repository_projects,omitempty"`
-       RepositoryPreReceiveHooks   *string `json:"repository_pre_receive_hooks,omitempty"`
-       SingleFile                  *string `json:"single_file,omitempty"`
-       Statuses                    *string `json:"statuses,omitempty"`
-       TeamDiscussions             *string `json:"team_discussions,omitempty"`
-       VulnerabilityAlerts         *string `json:"vulnerability_alerts,omitempty"`
-}
-
-// Installation represents a GitHub Apps installation.
-type Installation struct {
-       ID                  *int64                   `json:"id,omitempty"`
-       AppID               *int64                   `json:"app_id,omitempty"`
-       TargetID            *int64                   `json:"target_id,omitempty"`
-       Account             *User                    `json:"account,omitempty"`
-       AccessTokensURL     *string                  `json:"access_tokens_url,omitempty"`
-       RepositoriesURL     *string                  `json:"repositories_url,omitempty"`
-       HTMLURL             *string                  `json:"html_url,omitempty"`
-       TargetType          *string                  `json:"target_type,omitempty"`
-       SingleFileName      *string                  `json:"single_file_name,omitempty"`
-       RepositorySelection *string                  `json:"repository_selection,omitempty"`
-       Events              []string                 `json:"events,omitempty"`
-       Permissions         *InstallationPermissions `json:"permissions,omitempty"`
-       CreatedAt           *Timestamp               `json:"created_at,omitempty"`
-       UpdatedAt           *Timestamp               `json:"updated_at,omitempty"`
-}
-
-// Attachment represents a GitHub Apps attachment.
-type Attachment struct {
-       ID    *int64  `json:"id,omitempty"`
-       Title *string `json:"title,omitempty"`
-       Body  *string `json:"body,omitempty"`
-}
-
-func (i Installation) String() string {
-       return Stringify(i)
-}
-
-// Get a single GitHub App. Passing the empty string will get
-// the authenticated GitHub App.
-//
-// Note: appSlug is just the URL-friendly name of your GitHub App.
-// You can find this on the settings page for your GitHub App
-// (e.g., https://github.com/settings/apps/:app_slug).
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#get-the-authenticated-app
-// GitHub API docs: https://developer.github.com/v3/apps/#get-an-app
-func (s *AppsService) Get(ctx context.Context, appSlug string) (*App, *Response, error) {
-       var u string
-       if appSlug != "" {
-               u = fmt.Sprintf("apps/%v", appSlug)
-       } else {
-               u = "app"
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       app := new(App)
-       resp, err := s.client.Do(ctx, req, app)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return app, resp, nil
-}
-
-// ListInstallations lists the installations that the current GitHub App has.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#list-installations-for-the-authenticated-app
-func (s *AppsService) ListInstallations(ctx context.Context, opts *ListOptions) ([]*Installation, *Response, error) {
-       u, err := addOptions("app/installations", opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       var i []*Installation
-       resp, err := s.client.Do(ctx, req, &i)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return i, resp, nil
-}
-
-// GetInstallation returns the specified installation.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#get-an-installation-for-the-authenticated-app
-func (s *AppsService) GetInstallation(ctx context.Context, id int64) (*Installation, *Response, error) {
-       return s.getInstallation(ctx, fmt.Sprintf("app/installations/%v", id))
-}
-
-// ListUserInstallations lists installations that are accessible to the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/installations/#list-app-installations-accessible-to-the-user-access-token
-func (s *AppsService) ListUserInstallations(ctx context.Context, opts *ListOptions) ([]*Installation, *Response, error) {
-       u, err := addOptions("user/installations", opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       var i struct {
-               Installations []*Installation `json:"installations"`
-       }
-       resp, err := s.client.Do(ctx, req, &i)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return i.Installations, resp, nil
-}
-
-// SuspendInstallation suspends the specified installation.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#suspend-an-app-installation
-func (s *AppsService) SuspendInstallation(ctx context.Context, id int64) (*Response, error) {
-       u := fmt.Sprintf("app/installations/%v/suspended", id)
-
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// UnsuspendInstallation unsuspends the specified installation.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#unsuspend-an-app-installation
-func (s *AppsService) UnsuspendInstallation(ctx context.Context, id int64) (*Response, error) {
-       u := fmt.Sprintf("app/installations/%v/suspended", id)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DeleteInstallation deletes the specified installation.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#delete-an-installation-for-the-authenticated-app
-func (s *AppsService) DeleteInstallation(ctx context.Context, id int64) (*Response, error) {
-       u := fmt.Sprintf("app/installations/%v", id)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// CreateInstallationToken creates a new installation token.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#create-an-installation-access-token-for-an-app
-func (s *AppsService) CreateInstallationToken(ctx context.Context, id int64, opts *InstallationTokenOptions) (*InstallationToken, *Response, error) {
-       u := fmt.Sprintf("app/installations/%v/access_tokens", id)
-
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       t := new(InstallationToken)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// CreateAttachment creates a new attachment on user comment containing a url.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/installations/#create-a-content-attachment
-func (s *AppsService) CreateAttachment(ctx context.Context, contentReferenceID int64, title, body string) (*Attachment, *Response, error) {
-       u := fmt.Sprintf("content_references/%v/attachments", contentReferenceID)
-       payload := &Attachment{Title: String(title), Body: String(body)}
-       req, err := s.client.NewRequest("POST", u, payload)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       m := &Attachment{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// FindOrganizationInstallation finds the organization's installation information.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#get-an-organization-installation-for-the-authenticated-app
-func (s *AppsService) FindOrganizationInstallation(ctx context.Context, org string) (*Installation, *Response, error) {
-       return s.getInstallation(ctx, fmt.Sprintf("orgs/%v/installation", org))
-}
-
-// FindRepositoryInstallation finds the repository's installation information.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#get-a-repository-installation-for-the-authenticated-app
-func (s *AppsService) FindRepositoryInstallation(ctx context.Context, owner, repo string) (*Installation, *Response, error) {
-       return s.getInstallation(ctx, fmt.Sprintf("repos/%v/%v/installation", owner, repo))
-}
-
-// FindRepositoryInstallationByID finds the repository's installation information.
-//
-// Note: FindRepositoryInstallationByID uses the undocumented GitHub API endpoint /repositories/:id/installation.
-func (s *AppsService) FindRepositoryInstallationByID(ctx context.Context, id int64) (*Installation, *Response, error) {
-       return s.getInstallation(ctx, fmt.Sprintf("repositories/%d/installation", id))
-}
-
-// FindUserInstallation finds the user's installation information.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#get-a-user-installation-for-the-authenticated-app
-func (s *AppsService) FindUserInstallation(ctx context.Context, user string) (*Installation, *Response, error) {
-       return s.getInstallation(ctx, fmt.Sprintf("users/%v/installation", user))
-}
-
-func (s *AppsService) getInstallation(ctx context.Context, url string) (*Installation, *Response, error) {
-       req, err := s.client.NewRequest("GET", url, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       i := new(Installation)
-       resp, err := s.client.Do(ctx, req, i)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return i, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/apps_installation.go b/vendor/github.com/google/go-github/v32/github/apps_installation.go
deleted file mode 100644 (file)
index b6864e0..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListRepos lists the repositories that are accessible to the authenticated installation.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/installations/#list-repositories-accessible-to-the-app-installation
-func (s *AppsService) ListRepos(ctx context.Context, opts *ListOptions) ([]*Repository, *Response, error) {
-       u, err := addOptions("installation/repositories", opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       var r struct {
-               Repositories []*Repository `json:"repositories"`
-       }
-       resp, err := s.client.Do(ctx, req, &r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r.Repositories, resp, nil
-}
-
-// ListUserRepos lists repositories that are accessible
-// to the authenticated user for an installation.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/installations/#list-repositories-accessible-to-the-user-access-token
-func (s *AppsService) ListUserRepos(ctx context.Context, id int64, opts *ListOptions) ([]*Repository, *Response, error) {
-       u := fmt.Sprintf("user/installations/%v/repositories", id)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       var r struct {
-               Repositories []*Repository `json:"repositories"`
-       }
-       resp, err := s.client.Do(ctx, req, &r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r.Repositories, resp, nil
-}
-
-// AddRepository adds a single repository to an installation.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/installations/#add-a-repository-to-an-app-installation
-func (s *AppsService) AddRepository(ctx context.Context, instID, repoID int64) (*Repository, *Response, error) {
-       u := fmt.Sprintf("user/installations/%v/repositories/%v", instID, repoID)
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       r := new(Repository)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// RemoveRepository removes a single repository from an installation.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/installations/#remove-a-repository-from-an-app-installation
-func (s *AppsService) RemoveRepository(ctx context.Context, instID, repoID int64) (*Response, error) {
-       u := fmt.Sprintf("user/installations/%v/repositories/%v", instID, repoID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// RevokeInstallationToken revokes an installation token.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/installations/#revoke-an-installation-access-token
-func (s *AppsService) RevokeInstallationToken(ctx context.Context) (*Response, error) {
-       u := "installation/token"
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/apps_manifest.go b/vendor/github.com/google/go-github/v32/github/apps_manifest.go
deleted file mode 100644 (file)
index 9db76a3..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2019 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-const (
-       mediaTypeAppManifestPreview = "application/vnd.github.fury-preview+json"
-)
-
-// AppConfig describes the configuration of a GitHub App.
-type AppConfig struct {
-       ID            *int64     `json:"id,omitempty"`
-       NodeID        *string    `json:"node_id,omitempty"`
-       Owner         *User      `json:"owner,omitempty"`
-       Name          *string    `json:"name,omitempty"`
-       Description   *string    `json:"description,omitempty"`
-       ExternalURL   *string    `json:"external_url,omitempty"`
-       HTMLURL       *string    `json:"html_url,omitempty"`
-       CreatedAt     *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt     *Timestamp `json:"updated_at,omitempty"`
-       ClientID      *string    `json:"client_id,omitempty"`
-       ClientSecret  *string    `json:"client_secret,omitempty"`
-       WebhookSecret *string    `json:"webhook_secret,omitempty"`
-       PEM           *string    `json:"pem,omitempty"`
-}
-
-// CompleteAppManifest completes the App manifest handshake flow for the given
-// code.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/#create-a-github-app-from-a-manifest
-func (s *AppsService) CompleteAppManifest(ctx context.Context, code string) (*AppConfig, *Response, error) {
-       u := fmt.Sprintf("app-manifests/%s/conversions", code)
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-       req.Header.Set("Accept", mediaTypeAppManifestPreview)
-
-       cfg := new(AppConfig)
-       resp, err := s.client.Do(ctx, req, cfg)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return cfg, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/apps_marketplace.go b/vendor/github.com/google/go-github/v32/github/apps_marketplace.go
deleted file mode 100644 (file)
index 9026633..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// MarketplaceService handles communication with the marketplace related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/marketplace/
-type MarketplaceService struct {
-       client *Client
-       // Stubbed controls whether endpoints that return stubbed data are used
-       // instead of production endpoints. Stubbed data is fake data that's useful
-       // for testing your GitHub Apps. Stubbed data is hard-coded and will not
-       // change based on actual subscriptions.
-       //
-       // GitHub API docs: https://developer.github.com/v3/apps/marketplace/
-       Stubbed bool
-}
-
-// MarketplacePlan represents a GitHub Apps Marketplace Listing Plan.
-type MarketplacePlan struct {
-       URL                 *string `json:"url,omitempty"`
-       AccountsURL         *string `json:"accounts_url,omitempty"`
-       ID                  *int64  `json:"id,omitempty"`
-       Name                *string `json:"name,omitempty"`
-       Description         *string `json:"description,omitempty"`
-       MonthlyPriceInCents *int    `json:"monthly_price_in_cents,omitempty"`
-       YearlyPriceInCents  *int    `json:"yearly_price_in_cents,omitempty"`
-       // The pricing model for this listing.  Can be one of "flat-rate", "per-unit", or "free".
-       PriceModel *string   `json:"price_model,omitempty"`
-       UnitName   *string   `json:"unit_name,omitempty"`
-       Bullets    *[]string `json:"bullets,omitempty"`
-       // State can be one of the values "draft" or "published".
-       State        *string `json:"state,omitempty"`
-       HasFreeTrial *bool   `json:"has_free_trial,omitempty"`
-}
-
-// MarketplacePurchase represents a GitHub Apps Marketplace Purchase.
-type MarketplacePurchase struct {
-       // BillingCycle can be one of the values "yearly", "monthly" or nil.
-       BillingCycle    *string                 `json:"billing_cycle,omitempty"`
-       NextBillingDate *Timestamp              `json:"next_billing_date,omitempty"`
-       UnitCount       *int                    `json:"unit_count,omitempty"`
-       Plan            *MarketplacePlan        `json:"plan,omitempty"`
-       Account         *MarketplacePlanAccount `json:"account,omitempty"`
-       OnFreeTrial     *bool                   `json:"on_free_trial,omitempty"`
-       FreeTrialEndsOn *Timestamp              `json:"free_trial_ends_on,omitempty"`
-}
-
-// MarketplacePendingChange represents a pending change to a GitHub Apps Marketplace Plan.
-type MarketplacePendingChange struct {
-       EffectiveDate *Timestamp       `json:"effective_date,omitempty"`
-       UnitCount     *int             `json:"unit_count,omitempty"`
-       ID            *int64           `json:"id,omitempty"`
-       Plan          *MarketplacePlan `json:"plan,omitempty"`
-}
-
-// MarketplacePlanAccount represents a GitHub Account (user or organization) on a specific plan.
-type MarketplacePlanAccount struct {
-       URL                      *string                   `json:"url,omitempty"`
-       Type                     *string                   `json:"type,omitempty"`
-       ID                       *int64                    `json:"id,omitempty"`
-       NodeID                   *string                   `json:"node_id,omitempty"`
-       Login                    *string                   `json:"login,omitempty"`
-       Email                    *string                   `json:"email,omitempty"`
-       OrganizationBillingEmail *string                   `json:"organization_billing_email,omitempty"`
-       MarketplacePurchase      *MarketplacePurchase      `json:"marketplace_purchase,omitempty"`
-       MarketplacePendingChange *MarketplacePendingChange `json:"marketplace_pending_change,omitempty"`
-}
-
-// ListPlans lists all plans for your Marketplace listing.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#list-all-plans-for-your-marketplace-listing
-func (s *MarketplaceService) ListPlans(ctx context.Context, opts *ListOptions) ([]*MarketplacePlan, *Response, error) {
-       uri := s.marketplaceURI("plans")
-       u, err := addOptions(uri, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var plans []*MarketplacePlan
-       resp, err := s.client.Do(ctx, req, &plans)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return plans, resp, nil
-}
-
-// ListPlanAccountsForPlan lists all GitHub accounts (user or organization) on a specific plan.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#list-all-github-accounts-user-or-organization-on-a-specific-plan
-func (s *MarketplaceService) ListPlanAccountsForPlan(ctx context.Context, planID int64, opts *ListOptions) ([]*MarketplacePlanAccount, *Response, error) {
-       uri := s.marketplaceURI(fmt.Sprintf("plans/%v/accounts", planID))
-       u, err := addOptions(uri, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var accounts []*MarketplacePlanAccount
-       resp, err := s.client.Do(ctx, req, &accounts)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return accounts, resp, nil
-}
-
-// ListPlanAccountsForAccount lists all GitHub accounts (user or organization) associated with an account.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#check-if-a-github-account-is-associated-with-any-marketplace-listing
-func (s *MarketplaceService) ListPlanAccountsForAccount(ctx context.Context, accountID int64, opts *ListOptions) ([]*MarketplacePlanAccount, *Response, error) {
-       uri := s.marketplaceURI(fmt.Sprintf("accounts/%v", accountID))
-       u, err := addOptions(uri, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var accounts []*MarketplacePlanAccount
-       resp, err := s.client.Do(ctx, req, &accounts)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return accounts, resp, nil
-}
-
-// ListMarketplacePurchasesForUser lists all GitHub marketplace purchases made by a user.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#list-subscriptions-for-the-authenticated-user
-// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#list-subscriptions-for-the-authenticated-user-stubbed
-func (s *MarketplaceService) ListMarketplacePurchasesForUser(ctx context.Context, opts *ListOptions) ([]*MarketplacePurchase, *Response, error) {
-       uri := "user/marketplace_purchases"
-       if s.Stubbed {
-               uri = "user/marketplace_purchases/stubbed"
-       }
-
-       u, err := addOptions(uri, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var purchases []*MarketplacePurchase
-       resp, err := s.client.Do(ctx, req, &purchases)
-       if err != nil {
-               return nil, resp, err
-       }
-       return purchases, resp, nil
-}
-
-func (s *MarketplaceService) marketplaceURI(endpoint string) string {
-       url := "marketplace_listing"
-       if s.Stubbed {
-               url = "marketplace_listing/stubbed"
-       }
-       return url + "/" + endpoint
-}
diff --git a/vendor/github.com/google/go-github/v32/github/authorizations.go b/vendor/github.com/google/go-github/v32/github/authorizations.go
deleted file mode 100644 (file)
index ad31ebf..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-// Copyright 2015 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// Scope models a GitHub authorization scope.
-//
-// GitHub API docs: https://developer.github.com/v3/oauth/#scopes
-type Scope string
-
-// This is the set of scopes for GitHub API V3
-const (
-       ScopeNone           Scope = "(no scope)" // REVISIT: is this actually returned, or just a documentation artifact?
-       ScopeUser           Scope = "user"
-       ScopeUserEmail      Scope = "user:email"
-       ScopeUserFollow     Scope = "user:follow"
-       ScopePublicRepo     Scope = "public_repo"
-       ScopeRepo           Scope = "repo"
-       ScopeRepoDeployment Scope = "repo_deployment"
-       ScopeRepoStatus     Scope = "repo:status"
-       ScopeDeleteRepo     Scope = "delete_repo"
-       ScopeNotifications  Scope = "notifications"
-       ScopeGist           Scope = "gist"
-       ScopeReadRepoHook   Scope = "read:repo_hook"
-       ScopeWriteRepoHook  Scope = "write:repo_hook"
-       ScopeAdminRepoHook  Scope = "admin:repo_hook"
-       ScopeAdminOrgHook   Scope = "admin:org_hook"
-       ScopeReadOrg        Scope = "read:org"
-       ScopeWriteOrg       Scope = "write:org"
-       ScopeAdminOrg       Scope = "admin:org"
-       ScopeReadPublicKey  Scope = "read:public_key"
-       ScopeWritePublicKey Scope = "write:public_key"
-       ScopeAdminPublicKey Scope = "admin:public_key"
-       ScopeReadGPGKey     Scope = "read:gpg_key"
-       ScopeWriteGPGKey    Scope = "write:gpg_key"
-       ScopeAdminGPGKey    Scope = "admin:gpg_key"
-       ScopeSecurityEvents Scope = "security_events"
-)
-
-// AuthorizationsService handles communication with the authorization related
-// methods of the GitHub API.
-//
-// This service requires HTTP Basic Authentication; it cannot be accessed using
-// an OAuth token.
-//
-// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/
-type AuthorizationsService service
-
-// Authorization represents an individual GitHub authorization.
-type Authorization struct {
-       ID             *int64            `json:"id,omitempty"`
-       URL            *string           `json:"url,omitempty"`
-       Scopes         []Scope           `json:"scopes,omitempty"`
-       Token          *string           `json:"token,omitempty"`
-       TokenLastEight *string           `json:"token_last_eight,omitempty"`
-       HashedToken    *string           `json:"hashed_token,omitempty"`
-       App            *AuthorizationApp `json:"app,omitempty"`
-       Note           *string           `json:"note,omitempty"`
-       NoteURL        *string           `json:"note_url,omitempty"`
-       UpdatedAt      *Timestamp        `json:"updated_at,omitempty"`
-       CreatedAt      *Timestamp        `json:"created_at,omitempty"`
-       Fingerprint    *string           `json:"fingerprint,omitempty"`
-
-       // User is only populated by the Check and Reset methods.
-       User *User `json:"user,omitempty"`
-}
-
-func (a Authorization) String() string {
-       return Stringify(a)
-}
-
-// AuthorizationApp represents an individual GitHub app (in the context of authorization).
-type AuthorizationApp struct {
-       URL      *string `json:"url,omitempty"`
-       Name     *string `json:"name,omitempty"`
-       ClientID *string `json:"client_id,omitempty"`
-}
-
-func (a AuthorizationApp) String() string {
-       return Stringify(a)
-}
-
-// Grant represents an OAuth application that has been granted access to an account.
-type Grant struct {
-       ID        *int64            `json:"id,omitempty"`
-       URL       *string           `json:"url,omitempty"`
-       App       *AuthorizationApp `json:"app,omitempty"`
-       CreatedAt *Timestamp        `json:"created_at,omitempty"`
-       UpdatedAt *Timestamp        `json:"updated_at,omitempty"`
-       Scopes    []string          `json:"scopes,omitempty"`
-}
-
-func (g Grant) String() string {
-       return Stringify(g)
-}
-
-// AuthorizationRequest represents a request to create an authorization.
-type AuthorizationRequest struct {
-       Scopes       []Scope `json:"scopes,omitempty"`
-       Note         *string `json:"note,omitempty"`
-       NoteURL      *string `json:"note_url,omitempty"`
-       ClientID     *string `json:"client_id,omitempty"`
-       ClientSecret *string `json:"client_secret,omitempty"`
-       Fingerprint  *string `json:"fingerprint,omitempty"`
-}
-
-func (a AuthorizationRequest) String() string {
-       return Stringify(a)
-}
-
-// AuthorizationUpdateRequest represents a request to update an authorization.
-//
-// Note that for any one update, you must only provide one of the "scopes"
-// fields. That is, you may provide only one of "Scopes", or "AddScopes", or
-// "RemoveScopes".
-//
-// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization
-type AuthorizationUpdateRequest struct {
-       Scopes       []string `json:"scopes,omitempty"`
-       AddScopes    []string `json:"add_scopes,omitempty"`
-       RemoveScopes []string `json:"remove_scopes,omitempty"`
-       Note         *string  `json:"note,omitempty"`
-       NoteURL      *string  `json:"note_url,omitempty"`
-       Fingerprint  *string  `json:"fingerprint,omitempty"`
-}
-
-func (a AuthorizationUpdateRequest) String() string {
-       return Stringify(a)
-}
-
-// Check if an OAuth token is valid for a specific app.
-//
-// Note that this operation requires the use of BasicAuth, but where the
-// username is the OAuth application clientID, and the password is its
-// clientSecret. Invalid tokens will return a 404 Not Found.
-//
-// The returned Authorization.User field will be populated.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/oauth_applications/#check-a-token
-func (s *AuthorizationsService) Check(ctx context.Context, clientID, accessToken string) (*Authorization, *Response, error) {
-       u := fmt.Sprintf("applications/%v/token", clientID)
-
-       reqBody := &struct {
-               AccessToken string `json:"access_token"`
-       }{AccessToken: accessToken}
-
-       req, err := s.client.NewRequest("POST", u, reqBody)
-       if err != nil {
-               return nil, nil, err
-       }
-       req.Header.Set("Accept", mediaTypeOAuthAppPreview)
-
-       a := new(Authorization)
-       resp, err := s.client.Do(ctx, req, a)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return a, resp, nil
-}
-
-// Reset is used to reset a valid OAuth token without end user involvement.
-// Applications must save the "token" property in the response, because changes
-// take effect immediately.
-//
-// Note that this operation requires the use of BasicAuth, but where the
-// username is the OAuth application clientID, and the password is its
-// clientSecret. Invalid tokens will return a 404 Not Found.
-//
-// The returned Authorization.User field will be populated.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/oauth_applications/#reset-a-token
-func (s *AuthorizationsService) Reset(ctx context.Context, clientID, accessToken string) (*Authorization, *Response, error) {
-       u := fmt.Sprintf("applications/%v/token", clientID)
-
-       reqBody := &struct {
-               AccessToken string `json:"access_token"`
-       }{AccessToken: accessToken}
-
-       req, err := s.client.NewRequest("PATCH", u, reqBody)
-       if err != nil {
-               return nil, nil, err
-       }
-       req.Header.Set("Accept", mediaTypeOAuthAppPreview)
-
-       a := new(Authorization)
-       resp, err := s.client.Do(ctx, req, a)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return a, resp, nil
-}
-
-// Revoke an authorization for an application.
-//
-// Note that this operation requires the use of BasicAuth, but where the
-// username is the OAuth application clientID, and the password is its
-// clientSecret. Invalid tokens will return a 404 Not Found.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/oauth_applications/#delete-an-app-token
-func (s *AuthorizationsService) Revoke(ctx context.Context, clientID, accessToken string) (*Response, error) {
-       u := fmt.Sprintf("applications/%v/token", clientID)
-
-       reqBody := &struct {
-               AccessToken string `json:"access_token"`
-       }{AccessToken: accessToken}
-
-       req, err := s.client.NewRequest("DELETE", u, reqBody)
-       if err != nil {
-               return nil, err
-       }
-       req.Header.Set("Accept", mediaTypeOAuthAppPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DeleteGrant deletes an OAuth application grant. Deleting an application's
-// grant will also delete all OAuth tokens associated with the application for
-// the user.
-//
-// GitHub API docs: https://developer.github.com/v3/apps/oauth_applications/#delete-an-app-authorization
-func (s *AuthorizationsService) DeleteGrant(ctx context.Context, clientID, accessToken string) (*Response, error) {
-       u := fmt.Sprintf("applications/%v/grant", clientID)
-
-       reqBody := &struct {
-               AccessToken string `json:"access_token"`
-       }{AccessToken: accessToken}
-
-       req, err := s.client.NewRequest("DELETE", u, reqBody)
-       if err != nil {
-               return nil, err
-       }
-       req.Header.Set("Accept", mediaTypeOAuthAppPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// CreateImpersonation creates an impersonation OAuth token.
-//
-// This requires admin permissions. With the returned Authorization.Token
-// you can e.g. create or delete a user's public SSH key. NOTE: creating a
-// new token automatically revokes an existing one.
-//
-// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#create-an-impersonation-oauth-token
-func (s *AuthorizationsService) CreateImpersonation(ctx context.Context, username string, authReq *AuthorizationRequest) (*Authorization, *Response, error) {
-       u := fmt.Sprintf("admin/users/%v/authorizations", username)
-       req, err := s.client.NewRequest("POST", u, authReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       a := new(Authorization)
-       resp, err := s.client.Do(ctx, req, a)
-       if err != nil {
-               return nil, resp, err
-       }
-       return a, resp, nil
-}
-
-// DeleteImpersonation deletes an impersonation OAuth token.
-//
-// NOTE: there can be only one at a time.
-//
-// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#delete-an-impersonation-oauth-token
-func (s *AuthorizationsService) DeleteImpersonation(ctx context.Context, username string) (*Response, error) {
-       u := fmt.Sprintf("admin/users/%v/authorizations", username)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/checks.go b/vendor/github.com/google/go-github/v32/github/checks.go
deleted file mode 100644 (file)
index 55b69ab..0000000
+++ /dev/null
@@ -1,433 +0,0 @@
-// Copyright 2018 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ChecksService provides access to the Checks API in the
-// GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/
-type ChecksService service
-
-// CheckRun represents a GitHub check run on a repository associated with a GitHub app.
-type CheckRun struct {
-       ID           *int64          `json:"id,omitempty"`
-       NodeID       *string         `json:"node_id,omitempty"`
-       HeadSHA      *string         `json:"head_sha,omitempty"`
-       ExternalID   *string         `json:"external_id,omitempty"`
-       URL          *string         `json:"url,omitempty"`
-       HTMLURL      *string         `json:"html_url,omitempty"`
-       DetailsURL   *string         `json:"details_url,omitempty"`
-       Status       *string         `json:"status,omitempty"`
-       Conclusion   *string         `json:"conclusion,omitempty"`
-       StartedAt    *Timestamp      `json:"started_at,omitempty"`
-       CompletedAt  *Timestamp      `json:"completed_at,omitempty"`
-       Output       *CheckRunOutput `json:"output,omitempty"`
-       Name         *string         `json:"name,omitempty"`
-       CheckSuite   *CheckSuite     `json:"check_suite,omitempty"`
-       App          *App            `json:"app,omitempty"`
-       PullRequests []*PullRequest  `json:"pull_requests,omitempty"`
-}
-
-// CheckRunOutput represents the output of a CheckRun.
-type CheckRunOutput struct {
-       Title            *string               `json:"title,omitempty"`
-       Summary          *string               `json:"summary,omitempty"`
-       Text             *string               `json:"text,omitempty"`
-       AnnotationsCount *int                  `json:"annotations_count,omitempty"`
-       AnnotationsURL   *string               `json:"annotations_url,omitempty"`
-       Annotations      []*CheckRunAnnotation `json:"annotations,omitempty"`
-       Images           []*CheckRunImage      `json:"images,omitempty"`
-}
-
-// CheckRunAnnotation represents an annotation object for a CheckRun output.
-type CheckRunAnnotation struct {
-       Path            *string `json:"path,omitempty"`
-       StartLine       *int    `json:"start_line,omitempty"`
-       EndLine         *int    `json:"end_line,omitempty"`
-       StartColumn     *int    `json:"start_column,omitempty"`
-       EndColumn       *int    `json:"end_column,omitempty"`
-       AnnotationLevel *string `json:"annotation_level,omitempty"`
-       Message         *string `json:"message,omitempty"`
-       Title           *string `json:"title,omitempty"`
-       RawDetails      *string `json:"raw_details,omitempty"`
-}
-
-// CheckRunImage represents an image object for a CheckRun output.
-type CheckRunImage struct {
-       Alt      *string `json:"alt,omitempty"`
-       ImageURL *string `json:"image_url,omitempty"`
-       Caption  *string `json:"caption,omitempty"`
-}
-
-// CheckSuite represents a suite of check runs.
-type CheckSuite struct {
-       ID           *int64         `json:"id,omitempty"`
-       NodeID       *string        `json:"node_id,omitempty"`
-       HeadBranch   *string        `json:"head_branch,omitempty"`
-       HeadSHA      *string        `json:"head_sha,omitempty"`
-       URL          *string        `json:"url,omitempty"`
-       BeforeSHA    *string        `json:"before,omitempty"`
-       AfterSHA     *string        `json:"after,omitempty"`
-       Status       *string        `json:"status,omitempty"`
-       Conclusion   *string        `json:"conclusion,omitempty"`
-       App          *App           `json:"app,omitempty"`
-       Repository   *Repository    `json:"repository,omitempty"`
-       PullRequests []*PullRequest `json:"pull_requests,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       HeadCommit *Commit `json:"head_commit,omitempty"`
-}
-
-func (c CheckRun) String() string {
-       return Stringify(c)
-}
-
-func (c CheckSuite) String() string {
-       return Stringify(c)
-}
-
-// GetCheckRun gets a check-run for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/runs/#get-a-check-run
-func (s *ChecksService) GetCheckRun(ctx context.Context, owner, repo string, checkRunID int64) (*CheckRun, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/check-runs/%v", owner, repo, checkRunID)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       checkRun := new(CheckRun)
-       resp, err := s.client.Do(ctx, req, checkRun)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return checkRun, resp, nil
-}
-
-// GetCheckSuite gets a single check suite.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/suites/#get-a-check-suite
-func (s *ChecksService) GetCheckSuite(ctx context.Context, owner, repo string, checkSuiteID int64) (*CheckSuite, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/check-suites/%v", owner, repo, checkSuiteID)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       checkSuite := new(CheckSuite)
-       resp, err := s.client.Do(ctx, req, checkSuite)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return checkSuite, resp, nil
-}
-
-// CreateCheckRunOptions sets up parameters needed to create a CheckRun.
-type CreateCheckRunOptions struct {
-       Name        string            `json:"name"`                   // The name of the check (e.g., "code-coverage"). (Required.)
-       HeadSHA     string            `json:"head_sha"`               // The SHA of the commit. (Required.)
-       DetailsURL  *string           `json:"details_url,omitempty"`  // The URL of the integrator's site that has the full details of the check. (Optional.)
-       ExternalID  *string           `json:"external_id,omitempty"`  // A reference for the run on the integrator's system. (Optional.)
-       Status      *string           `json:"status,omitempty"`       // The current status. Can be one of "queued", "in_progress", or "completed". Default: "queued". (Optional.)
-       Conclusion  *string           `json:"conclusion,omitempty"`   // Can be one of "success", "failure", "neutral", "cancelled", "skipped", "timed_out", or "action_required". (Optional. Required if you provide a status of "completed".)
-       StartedAt   *Timestamp        `json:"started_at,omitempty"`   // The time that the check run began. (Optional.)
-       CompletedAt *Timestamp        `json:"completed_at,omitempty"` // The time the check completed. (Optional. Required if you provide conclusion.)
-       Output      *CheckRunOutput   `json:"output,omitempty"`       // Provide descriptive details about the run. (Optional)
-       Actions     []*CheckRunAction `json:"actions,omitempty"`      // Possible further actions the integrator can perform, which a user may trigger. (Optional.)
-}
-
-// CheckRunAction exposes further actions the integrator can perform, which a user may trigger.
-type CheckRunAction struct {
-       Label       string `json:"label"`       // The text to be displayed on a button in the web UI. The maximum size is 20 characters. (Required.)
-       Description string `json:"description"` // A short explanation of what this action would do. The maximum size is 40 characters. (Required.)
-       Identifier  string `json:"identifier"`  // A reference for the action on the integrator's system. The maximum size is 20 characters. (Required.)
-}
-
-// CreateCheckRun creates a check run for repository.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/runs/#create-a-check-run
-func (s *ChecksService) CreateCheckRun(ctx context.Context, owner, repo string, opts CreateCheckRunOptions) (*CheckRun, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/check-runs", owner, repo)
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       checkRun := new(CheckRun)
-       resp, err := s.client.Do(ctx, req, checkRun)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return checkRun, resp, nil
-}
-
-// UpdateCheckRunOptions sets up parameters needed to update a CheckRun.
-type UpdateCheckRunOptions struct {
-       Name        string            `json:"name"`                   // The name of the check (e.g., "code-coverage"). (Required.)
-       HeadSHA     *string           `json:"head_sha,omitempty"`     // The SHA of the commit. (Optional.)
-       DetailsURL  *string           `json:"details_url,omitempty"`  // The URL of the integrator's site that has the full details of the check. (Optional.)
-       ExternalID  *string           `json:"external_id,omitempty"`  // A reference for the run on the integrator's system. (Optional.)
-       Status      *string           `json:"status,omitempty"`       // The current status. Can be one of "queued", "in_progress", or "completed". Default: "queued". (Optional.)
-       Conclusion  *string           `json:"conclusion,omitempty"`   // Can be one of "success", "failure", "neutral", "cancelled", "skipped", "timed_out", or "action_required". (Optional. Required if you provide a status of "completed".)
-       CompletedAt *Timestamp        `json:"completed_at,omitempty"` // The time the check completed. (Optional. Required if you provide conclusion.)
-       Output      *CheckRunOutput   `json:"output,omitempty"`       // Provide descriptive details about the run. (Optional)
-       Actions     []*CheckRunAction `json:"actions,omitempty"`      // Possible further actions the integrator can perform, which a user may trigger. (Optional.)
-}
-
-// UpdateCheckRun updates a check run for a specific commit in a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/runs/#update-a-check-run
-func (s *ChecksService) UpdateCheckRun(ctx context.Context, owner, repo string, checkRunID int64, opts UpdateCheckRunOptions) (*CheckRun, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/check-runs/%v", owner, repo, checkRunID)
-       req, err := s.client.NewRequest("PATCH", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       checkRun := new(CheckRun)
-       resp, err := s.client.Do(ctx, req, checkRun)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return checkRun, resp, nil
-}
-
-// ListCheckRunAnnotations lists the annotations for a check run.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/runs/#list-check-run-annotations
-func (s *ChecksService) ListCheckRunAnnotations(ctx context.Context, owner, repo string, checkRunID int64, opts *ListOptions) ([]*CheckRunAnnotation, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/check-runs/%v/annotations", owner, repo, checkRunID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       var checkRunAnnotations []*CheckRunAnnotation
-       resp, err := s.client.Do(ctx, req, &checkRunAnnotations)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return checkRunAnnotations, resp, nil
-}
-
-// ListCheckRunsOptions represents parameters to list check runs.
-type ListCheckRunsOptions struct {
-       CheckName *string `url:"check_name,omitempty"` // Returns check runs with the specified name.
-       Status    *string `url:"status,omitempty"`     // Returns check runs with the specified status. Can be one of "queued", "in_progress", or "completed".
-       Filter    *string `url:"filter,omitempty"`     // Filters check runs by their completed_at timestamp. Can be one of "latest" (returning the most recent check runs) or "all". Default: "latest"
-
-       ListOptions
-}
-
-// ListCheckRunsResults represents the result of a check run list.
-type ListCheckRunsResults struct {
-       Total     *int        `json:"total_count,omitempty"`
-       CheckRuns []*CheckRun `json:"check_runs,omitempty"`
-}
-
-// ListCheckRunsForRef lists check runs for a specific ref.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/runs/#list-check-runs-for-a-git-reference
-func (s *ChecksService) ListCheckRunsForRef(ctx context.Context, owner, repo, ref string, opts *ListCheckRunsOptions) (*ListCheckRunsResults, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v/check-runs", owner, repo, refURLEscape(ref))
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       var checkRunResults *ListCheckRunsResults
-       resp, err := s.client.Do(ctx, req, &checkRunResults)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return checkRunResults, resp, nil
-}
-
-// ListCheckRunsCheckSuite lists check runs for a check suite.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/runs/#list-check-runs-in-a-check-suite
-func (s *ChecksService) ListCheckRunsCheckSuite(ctx context.Context, owner, repo string, checkSuiteID int64, opts *ListCheckRunsOptions) (*ListCheckRunsResults, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/check-suites/%v/check-runs", owner, repo, checkSuiteID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       var checkRunResults *ListCheckRunsResults
-       resp, err := s.client.Do(ctx, req, &checkRunResults)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return checkRunResults, resp, nil
-}
-
-// ListCheckSuiteOptions represents parameters to list check suites.
-type ListCheckSuiteOptions struct {
-       CheckName *string `url:"check_name,omitempty"` // Filters checks suites by the name of the check run.
-       AppID     *int    `url:"app_id,omitempty"`     // Filters check suites by GitHub App id.
-
-       ListOptions
-}
-
-// ListCheckSuiteResults represents the result of a check run list.
-type ListCheckSuiteResults struct {
-       Total       *int          `json:"total_count,omitempty"`
-       CheckSuites []*CheckSuite `json:"check_suites,omitempty"`
-}
-
-// ListCheckSuitesForRef lists check suite for a specific ref.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/suites/#list-check-suites-for-a-git-reference
-func (s *ChecksService) ListCheckSuitesForRef(ctx context.Context, owner, repo, ref string, opts *ListCheckSuiteOptions) (*ListCheckSuiteResults, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v/check-suites", owner, repo, refURLEscape(ref))
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       var checkSuiteResults *ListCheckSuiteResults
-       resp, err := s.client.Do(ctx, req, &checkSuiteResults)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return checkSuiteResults, resp, nil
-}
-
-// AutoTriggerCheck enables or disables automatic creation of CheckSuite events upon pushes to the repository.
-type AutoTriggerCheck struct {
-       AppID   *int64 `json:"app_id,omitempty"`  // The id of the GitHub App. (Required.)
-       Setting *bool  `json:"setting,omitempty"` // Set to "true" to enable automatic creation of CheckSuite events upon pushes to the repository, or "false" to disable them. Default: "true" (Required.)
-}
-
-// CheckSuitePreferenceOptions set options for check suite preferences for a repository.
-type CheckSuitePreferenceOptions struct {
-       AutoTriggerChecks []*AutoTriggerCheck `json:"auto_trigger_checks,omitempty"` // A slice of auto trigger checks that can be set for a check suite in a repository.
-}
-
-// CheckSuitePreferenceResults represents the results of the preference set operation.
-type CheckSuitePreferenceResults struct {
-       Preferences *PreferenceList `json:"preferences,omitempty"`
-       Repository  *Repository     `json:"repository,omitempty"`
-}
-
-// PreferenceList represents a list of auto trigger checks for repository
-type PreferenceList struct {
-       AutoTriggerChecks []*AutoTriggerCheck `json:"auto_trigger_checks,omitempty"` // A slice of auto trigger checks that can be set for a check suite in a repository.
-}
-
-// SetCheckSuitePreferences changes the default automatic flow when creating check suites.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/suites/#update-repository-preferences-for-check-suites
-func (s *ChecksService) SetCheckSuitePreferences(ctx context.Context, owner, repo string, opts CheckSuitePreferenceOptions) (*CheckSuitePreferenceResults, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/check-suites/preferences", owner, repo)
-       req, err := s.client.NewRequest("PATCH", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       var checkSuitePrefResults *CheckSuitePreferenceResults
-       resp, err := s.client.Do(ctx, req, &checkSuitePrefResults)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return checkSuitePrefResults, resp, nil
-}
-
-// CreateCheckSuiteOptions sets up parameters to manually create a check suites
-type CreateCheckSuiteOptions struct {
-       HeadSHA    string  `json:"head_sha"`              // The sha of the head commit. (Required.)
-       HeadBranch *string `json:"head_branch,omitempty"` // The name of the head branch where the code changes are implemented.
-}
-
-// CreateCheckSuite manually creates a check suite for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/suites/#create-a-check-suite
-func (s *ChecksService) CreateCheckSuite(ctx context.Context, owner, repo string, opts CreateCheckSuiteOptions) (*CheckSuite, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/check-suites", owner, repo)
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       checkSuite := new(CheckSuite)
-       resp, err := s.client.Do(ctx, req, checkSuite)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return checkSuite, resp, nil
-}
-
-// ReRequestCheckSuite triggers GitHub to rerequest an existing check suite, without pushing new code to a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/checks/suites/#rerequest-a-check-suite
-func (s *ChecksService) ReRequestCheckSuite(ctx context.Context, owner, repo string, checkSuiteID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/check-suites/%v/rerequest", owner, repo, checkSuiteID)
-
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeCheckRunsPreview)
-
-       resp, err := s.client.Do(ctx, req, nil)
-       return resp, err
-}
diff --git a/vendor/github.com/google/go-github/v32/github/code-scanning.go b/vendor/github.com/google/go-github/v32/github/code-scanning.go
deleted file mode 100644 (file)
index dc57a89..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2020 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "strconv"
-       "strings"
-)
-
-// CodeScanningService handles communication with the code scanning related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/code-scanning/
-type CodeScanningService service
-
-type Alert struct {
-       RuleID          *string    `json:"rule_id,omitempty"`
-       RuleSeverity    *string    `json:"rule_severity,omitempty"`
-       RuleDescription *string    `json:"rule_description,omitempty"`
-       Tool            *string    `json:"tool,omitempty"`
-       CreatedAt       *Timestamp `json:"created_at,omitempty"`
-       Open            *bool      `json:"open,omitempty"`
-       ClosedBy        *User      `json:"closed_by,omitempty"`
-       ClosedAt        *Timestamp `json:"closed_at,omitempty"`
-       URL             *string    `json:"url,omitempty"`
-       HTMLURL         *string    `json:"html_url,omitempty"`
-}
-
-// ID returns the ID associated with an alert. It is the number at the end of the security alert's URL.
-func (a *Alert) ID() int64 {
-       if a == nil {
-               return 0
-       }
-
-       s := a.GetHTMLURL()
-
-       // Check for an ID to parse at the end of the url
-       if i := strings.LastIndex(s, "/"); i >= 0 {
-               s = s[i+1:]
-       }
-
-       // Return the alert ID as a 64-bit integer. Unable to convert or out of range returns 0.
-       id, err := strconv.ParseInt(s, 10, 64)
-       if err != nil {
-               return 0
-       }
-
-       return id
-}
-
-// AlertListOptions specifies optional parameters to the CodeScanningService.ListAlerts
-// method.
-type AlertListOptions struct {
-       // State of the code scanning alerts to list. Set to closed to list only closed code scanning alerts. Default: open
-       State string `url:"state,omitempty"`
-
-       // Return code scanning alerts for a specific branch reference. The ref must be formatted as heads/<branch name>.
-       Ref string `url:"ref,omitempty"`
-}
-
-// ListAlertsForRepo lists code scanning alerts for a repository.
-//
-// Lists all open code scanning alerts for the default branch (usually master) and protected branches in a repository.
-// You must use an access token with the security_events scope to use this endpoint. GitHub Apps must have the security_events
-// read permission to use this endpoint.
-//
-// GitHub API docs: https://developer.github.com/v3/code-scanning/#list-code-scanning-alerts-for-a-repository
-func (s *CodeScanningService) ListAlertsForRepo(ctx context.Context, owner, repo string, opts *AlertListOptions) ([]*Alert, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/code-scanning/alerts", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var alerts []*Alert
-       resp, err := s.client.Do(ctx, req, &alerts)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return alerts, resp, nil
-}
-
-// GetAlert gets a single code scanning alert for a repository.
-//
-// You must use an access token with the security_events scope to use this endpoint.
-// GitHub Apps must have the security_events read permission to use this endpoint.
-//
-// The security alert_id is the number at the end of the security alert's URL.
-//
-// GitHub API docs: https://developer.github.com/v3/code-scanning/#get-a-code-scanning-alert
-func (s *CodeScanningService) GetAlert(ctx context.Context, owner, repo string, id int64) (*Alert, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/code-scanning/alerts/%v", owner, repo, id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       a := new(Alert)
-       resp, err := s.client.Do(ctx, req, a)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return a, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/doc.go b/vendor/github.com/google/go-github/v32/github/doc.go
deleted file mode 100644 (file)
index d1aa009..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-/*
-Package github provides a client for using the GitHub API.
-
-Usage:
-
-       import "github.com/google/go-github/v32/github" // with go modules enabled (GO111MODULE=on or outside GOPATH)
-       import "github.com/google/go-github/github"     // with go modules disabled
-
-Construct a new GitHub client, then use the various services on the client to
-access different parts of the GitHub API. For example:
-
-       client := github.NewClient(nil)
-
-       // list all organizations for user "willnorris"
-       orgs, _, err := client.Organizations.List(ctx, "willnorris", nil)
-
-Some API methods have optional parameters that can be passed. For example:
-
-       client := github.NewClient(nil)
-
-       // list public repositories for org "github"
-       opt := &github.RepositoryListByOrgOptions{Type: "public"}
-       repos, _, err := client.Repositories.ListByOrg(ctx, "github", opt)
-
-The services of a client divide the API into logical chunks and correspond to
-the structure of the GitHub API documentation at
-https://developer.github.com/v3/.
-
-NOTE: Using the https://godoc.org/context package, one can easily
-pass cancelation signals and deadlines to various services of the client for
-handling a request. In case there is no context available, then context.Background()
-can be used as a starting point.
-
-For more sample code snippets, head over to the https://github.com/google/go-github/tree/master/example directory.
-
-Authentication
-
-The go-github library does not directly handle authentication. Instead, when
-creating a new client, pass an http.Client that can handle authentication for
-you. The easiest and recommended way to do this is using the golang.org/x/oauth2
-library, but you can always use any other library that provides an http.Client.
-If you have an OAuth2 access token (for example, a personal API token), you can
-use it with the oauth2 library using:
-
-       import "golang.org/x/oauth2"
-
-       func main() {
-               ctx := context.Background()
-               ts := oauth2.StaticTokenSource(
-                       &oauth2.Token{AccessToken: "... your access token ..."},
-               )
-               tc := oauth2.NewClient(ctx, ts)
-
-               client := github.NewClient(tc)
-
-               // list all repositories for the authenticated user
-               repos, _, err := client.Repositories.List(ctx, "", nil)
-       }
-
-Note that when using an authenticated Client, all calls made by the client will
-include the specified OAuth token. Therefore, authenticated clients should
-almost never be shared between different users.
-
-See the oauth2 docs for complete instructions on using that library.
-
-For API methods that require HTTP Basic Authentication, use the
-BasicAuthTransport.
-
-GitHub Apps authentication can be provided by the
-https://github.com/bradleyfalzon/ghinstallation package.
-
-       import "github.com/bradleyfalzon/ghinstallation"
-
-       func main() {
-               // Wrap the shared transport for use with the integration ID 1 authenticating with installation ID 99.
-               itr, err := ghinstallation.NewKeyFromFile(http.DefaultTransport, 1, 99, "2016-10-19.private-key.pem")
-               if err != nil {
-                       // Handle error.
-               }
-
-               // Use installation transport with client
-               client := github.NewClient(&http.Client{Transport: itr})
-
-               // Use client...
-       }
-
-Rate Limiting
-
-GitHub imposes a rate limit on all API clients. Unauthenticated clients are
-limited to 60 requests per hour, while authenticated clients can make up to
-5,000 requests per hour. The Search API has a custom rate limit. Unauthenticated
-clients are limited to 10 requests per minute, while authenticated clients
-can make up to 30 requests per minute. To receive the higher rate limit when
-making calls that are not issued on behalf of a user,
-use UnauthenticatedRateLimitedTransport.
-
-The returned Response.Rate value contains the rate limit information
-from the most recent API call. If a recent enough response isn't
-available, you can use RateLimits to fetch the most up-to-date rate
-limit data for the client.
-
-To detect an API rate limit error, you can check if its type is *github.RateLimitError:
-
-       repos, _, err := client.Repositories.List(ctx, "", nil)
-       if _, ok := err.(*github.RateLimitError); ok {
-               log.Println("hit rate limit")
-       }
-
-Learn more about GitHub rate limiting at
-https://developer.github.com/v3/#rate-limiting.
-
-Accepted Status
-
-Some endpoints may return a 202 Accepted status code, meaning that the
-information required is not yet ready and was scheduled to be gathered on
-the GitHub side. Methods known to behave like this are documented specifying
-this behavior.
-
-To detect this condition of error, you can check if its type is
-*github.AcceptedError:
-
-       stats, _, err := client.Repositories.ListContributorsStats(ctx, org, repo)
-       if _, ok := err.(*github.AcceptedError); ok {
-               log.Println("scheduled on GitHub side")
-       }
-
-Conditional Requests
-
-The GitHub API has good support for conditional requests which will help
-prevent you from burning through your rate limit, as well as help speed up your
-application. go-github does not handle conditional requests directly, but is
-instead designed to work with a caching http.Transport. We recommend using
-https://github.com/gregjones/httpcache for that.
-
-Learn more about GitHub conditional requests at
-https://developer.github.com/v3/#conditional-requests.
-
-Creating and Updating Resources
-
-All structs for GitHub resources use pointer values for all non-repeated fields.
-This allows distinguishing between unset fields and those set to a zero-value.
-Helper functions have been provided to easily create these pointers for string,
-bool, and int values. For example:
-
-       // create a new private repository named "foo"
-       repo := &github.Repository{
-               Name:    github.String("foo"),
-               Private: github.Bool(true),
-       }
-       client.Repositories.Create(ctx, "", repo)
-
-Users who have worked with protocol buffers should find this pattern familiar.
-
-Pagination
-
-All requests for resource collections (repos, pull requests, issues, etc.)
-support pagination. Pagination options are described in the
-github.ListOptions struct and passed to the list methods directly or as an
-embedded type of a more specific list options struct (for example
-github.PullRequestListOptions). Pages information is available via the
-github.Response struct.
-
-       client := github.NewClient(nil)
-
-       opt := &github.RepositoryListByOrgOptions{
-               ListOptions: github.ListOptions{PerPage: 10},
-       }
-       // get all pages of results
-       var allRepos []*github.Repository
-       for {
-               repos, resp, err := client.Repositories.ListByOrg(ctx, "github", opt)
-               if err != nil {
-                       return err
-               }
-               allRepos = append(allRepos, repos...)
-               if resp.NextPage == 0 {
-                       break
-               }
-               opt.Page = resp.NextPage
-       }
-
-*/
-package github
diff --git a/vendor/github.com/google/go-github/v32/github/event.go b/vendor/github.com/google/go-github/v32/github/event.go
deleted file mode 100644 (file)
index 3b96b02..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2018 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "encoding/json"
-       "time"
-)
-
-// Event represents a GitHub event.
-type Event struct {
-       Type       *string          `json:"type,omitempty"`
-       Public     *bool            `json:"public,omitempty"`
-       RawPayload *json.RawMessage `json:"payload,omitempty"`
-       Repo       *Repository      `json:"repo,omitempty"`
-       Actor      *User            `json:"actor,omitempty"`
-       Org        *Organization    `json:"org,omitempty"`
-       CreatedAt  *time.Time       `json:"created_at,omitempty"`
-       ID         *string          `json:"id,omitempty"`
-}
-
-func (e Event) String() string {
-       return Stringify(e)
-}
-
-// ParsePayload parses the event payload. For recognized event types,
-// a value of the corresponding struct type will be returned.
-func (e *Event) ParsePayload() (payload interface{}, err error) {
-       switch *e.Type {
-       case "CheckRunEvent":
-               payload = &CheckRunEvent{}
-       case "CheckSuiteEvent":
-               payload = &CheckSuiteEvent{}
-       case "CommitCommentEvent":
-               payload = &CommitCommentEvent{}
-       case "CreateEvent":
-               payload = &CreateEvent{}
-       case "DeleteEvent":
-               payload = &DeleteEvent{}
-       case "DeployKeyEvent":
-               payload = &DeployKeyEvent{}
-       case "DeploymentEvent":
-               payload = &DeploymentEvent{}
-       case "DeploymentStatusEvent":
-               payload = &DeploymentStatusEvent{}
-       case "ForkEvent":
-               payload = &ForkEvent{}
-       case "GitHubAppAuthorizationEvent":
-               payload = &GitHubAppAuthorizationEvent{}
-       case "GollumEvent":
-               payload = &GollumEvent{}
-       case "InstallationEvent":
-               payload = &InstallationEvent{}
-       case "InstallationRepositoriesEvent":
-               payload = &InstallationRepositoriesEvent{}
-       case "IssueCommentEvent":
-               payload = &IssueCommentEvent{}
-       case "IssuesEvent":
-               payload = &IssuesEvent{}
-       case "LabelEvent":
-               payload = &LabelEvent{}
-       case "MarketplacePurchaseEvent":
-               payload = &MarketplacePurchaseEvent{}
-       case "MemberEvent":
-               payload = &MemberEvent{}
-       case "MembershipEvent":
-               payload = &MembershipEvent{}
-       case "MetaEvent":
-               payload = &MetaEvent{}
-       case "MilestoneEvent":
-               payload = &MilestoneEvent{}
-       case "OrganizationEvent":
-               payload = &OrganizationEvent{}
-       case "OrgBlockEvent":
-               payload = &OrgBlockEvent{}
-       case "PackageEvent":
-               payload = &PackageEvent{}
-       case "PageBuildEvent":
-               payload = &PageBuildEvent{}
-       case "PingEvent":
-               payload = &PingEvent{}
-       case "ProjectEvent":
-               payload = &ProjectEvent{}
-       case "ProjectCardEvent":
-               payload = &ProjectCardEvent{}
-       case "ProjectColumnEvent":
-               payload = &ProjectColumnEvent{}
-       case "PublicEvent":
-               payload = &PublicEvent{}
-       case "PullRequestEvent":
-               payload = &PullRequestEvent{}
-       case "PullRequestReviewEvent":
-               payload = &PullRequestReviewEvent{}
-       case "PullRequestReviewCommentEvent":
-               payload = &PullRequestReviewCommentEvent{}
-       case "PushEvent":
-               payload = &PushEvent{}
-       case "ReleaseEvent":
-               payload = &ReleaseEvent{}
-       case "RepositoryEvent":
-               payload = &RepositoryEvent{}
-       case "RepositoryDispatchEvent":
-               payload = &RepositoryDispatchEvent{}
-       case "RepositoryVulnerabilityAlertEvent":
-               payload = &RepositoryVulnerabilityAlertEvent{}
-       case "StarEvent":
-               payload = &StarEvent{}
-       case "StatusEvent":
-               payload = &StatusEvent{}
-       case "TeamEvent":
-               payload = &TeamEvent{}
-       case "TeamAddEvent":
-               payload = &TeamAddEvent{}
-       case "UserEvent":
-               payload = &UserEvent{}
-       case "WatchEvent":
-               payload = &WatchEvent{}
-       }
-       err = json.Unmarshal(*e.RawPayload, &payload)
-       return payload, err
-}
-
-// Payload returns the parsed event payload. For recognized event types,
-// a value of the corresponding struct type will be returned.
-//
-// Deprecated: Use ParsePayload instead, which returns an error
-// rather than panics if JSON unmarshaling raw payload fails.
-func (e *Event) Payload() (payload interface{}) {
-       var err error
-       payload, err = e.ParsePayload()
-       if err != nil {
-               panic(err)
-       }
-       return payload
-}
diff --git a/vendor/github.com/google/go-github/v32/github/event_types.go b/vendor/github.com/google/go-github/v32/github/event_types.go
deleted file mode 100644 (file)
index fe6991f..0000000
+++ /dev/null
@@ -1,947 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// These event types are shared between the Events API and used as Webhook payloads.
-
-package github
-
-import "encoding/json"
-
-// RequestedAction is included in a CheckRunEvent when a user has invoked an action,
-// i.e. when the CheckRunEvent's Action field is "requested_action".
-type RequestedAction struct {
-       Identifier string `json:"identifier"` // The integrator reference of the action requested by the user.
-}
-
-// CheckRunEvent is triggered when a check run is "created", "updated", or "rerequested".
-// The Webhook event name is "check_run".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#checkrunevent
-type CheckRunEvent struct {
-       CheckRun *CheckRun `json:"check_run,omitempty"`
-       // The action performed. Possible values are: "created", "updated", "rerequested" or "requested_action".
-       Action *string `json:"action,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Org          *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-
-       // The action requested by the user. Populated when the Action is "requested_action".
-       RequestedAction *RequestedAction `json:"requested_action,omitempty"` //
-}
-
-// CheckSuiteEvent is triggered when a check suite is "completed", "requested", or "rerequested".
-// The Webhook event name is "check_suite".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#checksuiteevent
-type CheckSuiteEvent struct {
-       CheckSuite *CheckSuite `json:"check_suite,omitempty"`
-       // The action performed. Possible values are: "completed", "requested" or "rerequested".
-       Action *string `json:"action,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Org          *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// CommitCommentEvent is triggered when a commit comment is created.
-// The Webhook event name is "commit_comment".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#commitcommentevent
-type CommitCommentEvent struct {
-       Comment *RepositoryComment `json:"comment,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Action       *string       `json:"action,omitempty"`
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// CreateEvent represents a created repository, branch, or tag.
-// The Webhook event name is "create".
-//
-// Note: webhooks will not receive this event for created repositories.
-// Additionally, webhooks will not receive this event for tags if more
-// than three tags are pushed at once.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#createevent
-type CreateEvent struct {
-       Ref *string `json:"ref,omitempty"`
-       // RefType is the object that was created. Possible values are: "repository", "branch", "tag".
-       RefType      *string `json:"ref_type,omitempty"`
-       MasterBranch *string `json:"master_branch,omitempty"`
-       Description  *string `json:"description,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       PusherType   *string       `json:"pusher_type,omitempty"`
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// DeleteEvent represents a deleted branch or tag.
-// The Webhook event name is "delete".
-//
-// Note: webhooks will not receive this event for tags if more than three tags
-// are deleted at once.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#deleteevent
-type DeleteEvent struct {
-       Ref *string `json:"ref,omitempty"`
-       // RefType is the object that was deleted. Possible values are: "branch", "tag".
-       RefType *string `json:"ref_type,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       PusherType   *string       `json:"pusher_type,omitempty"`
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// DeployKeyEvent is triggered when a deploy key is added or removed from a repository.
-// The Webhook event name is "deploy_key".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#deploykeyevent
-type DeployKeyEvent struct {
-       // Action is the action that was performed. Possible values are:
-       // "created" or "deleted".
-       Action *string `json:"action,omitempty"`
-
-       // The deploy key resource.
-       Key *Key `json:"key,omitempty"`
-}
-
-// DeploymentEvent represents a deployment.
-// The Webhook event name is "deployment".
-//
-// Events of this type are not visible in timelines, they are only used to trigger hooks.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#deploymentevent
-type DeploymentEvent struct {
-       Deployment *Deployment `json:"deployment,omitempty"`
-       Repo       *Repository `json:"repository,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// DeploymentStatusEvent represents a deployment status.
-// The Webhook event name is "deployment_status".
-//
-// Events of this type are not visible in timelines, they are only used to trigger hooks.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#deploymentstatusevent
-type DeploymentStatusEvent struct {
-       Deployment       *Deployment       `json:"deployment,omitempty"`
-       DeploymentStatus *DeploymentStatus `json:"deployment_status,omitempty"`
-       Repo             *Repository       `json:"repository,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// ForkEvent is triggered when a user forks a repository.
-// The Webhook event name is "fork".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#forkevent
-type ForkEvent struct {
-       // Forkee is the created repository.
-       Forkee *Repository `json:"forkee,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// GitHubAppAuthorizationEvent is triggered when a user's authorization for a
-// GitHub Application is revoked.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#githubappauthorizationevent
-type GitHubAppAuthorizationEvent struct {
-       // The action performed. Possible value is: "revoked".
-       Action *string `json:"action,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Sender *User `json:"sender,omitempty"`
-}
-
-// Page represents a single Wiki page.
-type Page struct {
-       PageName *string `json:"page_name,omitempty"`
-       Title    *string `json:"title,omitempty"`
-       Summary  *string `json:"summary,omitempty"`
-       Action   *string `json:"action,omitempty"`
-       SHA      *string `json:"sha,omitempty"`
-       HTMLURL  *string `json:"html_url,omitempty"`
-}
-
-// GollumEvent is triggered when a Wiki page is created or updated.
-// The Webhook event name is "gollum".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#gollumevent
-type GollumEvent struct {
-       Pages []*Page `json:"pages,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// EditChange represents the changes when an issue, pull request, or comment has
-// been edited.
-type EditChange struct {
-       Title *struct {
-               From *string `json:"from,omitempty"`
-       } `json:"title,omitempty"`
-       Body *struct {
-               From *string `json:"from,omitempty"`
-       } `json:"body,omitempty"`
-}
-
-// ProjectChange represents the changes when a project has been edited.
-type ProjectChange struct {
-       Name *struct {
-               From *string `json:"from,omitempty"`
-       } `json:"name,omitempty"`
-       Body *struct {
-               From *string `json:"from,omitempty"`
-       } `json:"body,omitempty"`
-}
-
-// ProjectCardChange represents the changes when a project card has been edited.
-type ProjectCardChange struct {
-       Note *struct {
-               From *string `json:"from,omitempty"`
-       } `json:"note,omitempty"`
-}
-
-// ProjectColumnChange represents the changes when a project column has been edited.
-type ProjectColumnChange struct {
-       Name *struct {
-               From *string `json:"from,omitempty"`
-       } `json:"name,omitempty"`
-}
-
-// TeamChange represents the changes when a team has been edited.
-type TeamChange struct {
-       Description *struct {
-               From *string `json:"from,omitempty"`
-       } `json:"description,omitempty"`
-       Name *struct {
-               From *string `json:"from,omitempty"`
-       } `json:"name,omitempty"`
-       Privacy *struct {
-               From *string `json:"from,omitempty"`
-       } `json:"privacy,omitempty"`
-       Repository *struct {
-               Permissions *struct {
-                       From *struct {
-                               Admin *bool `json:"admin,omitempty"`
-                               Pull  *bool `json:"pull,omitempty"`
-                               Push  *bool `json:"push,omitempty"`
-                       } `json:"from,omitempty"`
-               } `json:"permissions,omitempty"`
-       } `json:"repository,omitempty"`
-}
-
-// InstallationEvent is triggered when a GitHub App has been installed or uninstalled.
-// The Webhook event name is "installation".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#installationevent
-type InstallationEvent struct {
-       // The action that was performed. Can be either "created" or "deleted".
-       Action       *string       `json:"action,omitempty"`
-       Repositories []*Repository `json:"repositories,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// InstallationRepositoriesEvent is triggered when a repository is added or
-// removed from an installation. The Webhook event name is "installation_repositories".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#installationrepositoriesevent
-type InstallationRepositoriesEvent struct {
-       // The action that was performed. Can be either "added" or "removed".
-       Action              *string       `json:"action,omitempty"`
-       RepositoriesAdded   []*Repository `json:"repositories_added,omitempty"`
-       RepositoriesRemoved []*Repository `json:"repositories_removed,omitempty"`
-       RepositorySelection *string       `json:"repository_selection,omitempty"`
-       Sender              *User         `json:"sender,omitempty"`
-       Installation        *Installation `json:"installation,omitempty"`
-}
-
-// IssueCommentEvent is triggered when an issue comment is created on an issue
-// or pull request.
-// The Webhook event name is "issue_comment".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#issuecommentevent
-type IssueCommentEvent struct {
-       // Action is the action that was performed on the comment.
-       // Possible values are: "created", "edited", "deleted".
-       Action  *string       `json:"action,omitempty"`
-       Issue   *Issue        `json:"issue,omitempty"`
-       Comment *IssueComment `json:"comment,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Changes      *EditChange   `json:"changes,omitempty"`
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// IssuesEvent is triggered when an issue is opened, edited, deleted, transferred,
-// pinned, unpinned, closed, reopened, assigned, unassigned, labeled, unlabeled,
-// locked, unlocked, milestoned, or demilestoned.
-// The Webhook event name is "issues".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#issuesevent
-type IssuesEvent struct {
-       // Action is the action that was performed. Possible values are: "opened",
-       // "edited", "deleted", "transferred", "pinned", "unpinned", "closed", "reopened",
-       // "assigned", "unassigned", "labeled", "unlabeled", "locked", "unlocked",
-       // "milestoned", or "demilestoned".
-       Action   *string `json:"action,omitempty"`
-       Issue    *Issue  `json:"issue,omitempty"`
-       Assignee *User   `json:"assignee,omitempty"`
-       Label    *Label  `json:"label,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Changes      *EditChange   `json:"changes,omitempty"`
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// LabelEvent is triggered when a repository's label is created, edited, or deleted.
-// The Webhook event name is "label"
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#labelevent
-type LabelEvent struct {
-       // Action is the action that was performed. Possible values are:
-       // "created", "edited", "deleted"
-       Action *string `json:"action,omitempty"`
-       Label  *Label  `json:"label,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Changes      *EditChange   `json:"changes,omitempty"`
-       Repo         *Repository   `json:"repository,omitempty"`
-       Org          *Organization `json:"organization,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// MarketplacePurchaseEvent is triggered when a user purchases, cancels, or changes
-// their GitHub Marketplace plan.
-// Webhook event name "marketplace_purchase".
-//
-// Github API docs: https://developer.github.com/v3/activity/events/types/#marketplacepurchaseevent
-type MarketplacePurchaseEvent struct {
-       // Action is the action that was performed. Possible values are:
-       // "purchased", "cancelled", "pending_change", "pending_change_cancelled", "changed".
-       Action *string `json:"action,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       EffectiveDate               *Timestamp           `json:"effective_date,omitempty"`
-       MarketplacePurchase         *MarketplacePurchase `json:"marketplace_purchase,omitempty"`
-       PreviousMarketplacePurchase *MarketplacePurchase `json:"previous_marketplace_purchase,omitempty"`
-       Sender                      *User                `json:"sender,omitempty"`
-       Installation                *Installation        `json:"installation,omitempty"`
-}
-
-// MemberEvent is triggered when a user is added as a collaborator to a repository.
-// The Webhook event name is "member".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#memberevent
-type MemberEvent struct {
-       // Action is the action that was performed. Possible value is: "added".
-       Action *string `json:"action,omitempty"`
-       Member *User   `json:"member,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// MembershipEvent is triggered when a user is added or removed from a team.
-// The Webhook event name is "membership".
-//
-// Events of this type are not visible in timelines, they are only used to
-// trigger organization webhooks.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#membershipevent
-type MembershipEvent struct {
-       // Action is the action that was performed. Possible values are: "added", "removed".
-       Action *string `json:"action,omitempty"`
-       // Scope is the scope of the membership. Possible value is: "team".
-       Scope  *string `json:"scope,omitempty"`
-       Member *User   `json:"member,omitempty"`
-       Team   *Team   `json:"team,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Org          *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// MetaEvent is triggered when the webhook that this event is configured on is deleted.
-// This event will only listen for changes to the particular hook the event is installed on.
-// Therefore, it must be selected for each hook that you'd like to receive meta events for.
-// The Webhook event name is "meta".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#metaevent
-type MetaEvent struct {
-       // Action is the action that was performed. Possible value is: "deleted".
-       Action *string `json:"action,omitempty"`
-       // The ID of the modified webhook.
-       HookID *int64 `json:"hook_id,omitempty"`
-       // The modified webhook.
-       // This will contain different keys based on the type of webhook it is: repository,
-       // organization, business, app, or GitHub Marketplace.
-       Hook *Hook `json:"hook,omitempty"`
-}
-
-// MilestoneEvent is triggered when a milestone is created, closed, opened, edited, or deleted.
-// The Webhook event name is "milestone".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#milestoneevent
-type MilestoneEvent struct {
-       // Action is the action that was performed. Possible values are:
-       // "created", "closed", "opened", "edited", "deleted"
-       Action    *string    `json:"action,omitempty"`
-       Milestone *Milestone `json:"milestone,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Changes      *EditChange   `json:"changes,omitempty"`
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Org          *Organization `json:"organization,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// OrganizationEvent is triggered when an organization is deleted and renamed, and when a user is added,
-// removed, or invited to an organization.
-// Events of this type are not visible in timelines. These events are only used to trigger organization hooks.
-// Webhook event name is "organization".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#organizationevent
-type OrganizationEvent struct {
-       // Action is the action that was performed.
-       // Possible values are: "deleted", "renamed", "member_added", "member_removed", or "member_invited".
-       Action *string `json:"action,omitempty"`
-
-       // Invitation is the invitation for the user or email if the action is "member_invited".
-       Invitation *Invitation `json:"invitation,omitempty"`
-
-       // Membership is the membership between the user and the organization.
-       // Not present when the action is "member_invited".
-       Membership *Membership `json:"membership,omitempty"`
-
-       Organization *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// OrgBlockEvent is triggered when an organization blocks or unblocks a user.
-// The Webhook event name is "org_block".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#orgblockevent
-type OrgBlockEvent struct {
-       // Action is the action that was performed.
-       // Can be "blocked" or "unblocked".
-       Action       *string       `json:"action,omitempty"`
-       BlockedUser  *User         `json:"blocked_user,omitempty"`
-       Organization *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// PackageEvent represents activity related to GitHub Packages.
-// The Webhook event name is "package".
-//
-// This event is triggered when a GitHub Package is published or updated.
-//
-// GitHub API docs: https://developer.github.com/webhooks/event-payloads/#package
-type PackageEvent struct {
-       // Action is the action that was performed.
-       // Can be "published" or "updated".
-       Action  *string       `json:"action,omitempty"`
-       Package *Package      `json:"package,omitempty"`
-       Repo    *Repository   `json:"repository,omitempty"`
-       Org     *Organization `json:"organization,omitempty"`
-       Sender  *User         `json:"sender,omitempty"`
-}
-
-// PageBuildEvent represents an attempted build of a GitHub Pages site, whether
-// successful or not.
-// The Webhook event name is "page_build".
-//
-// This event is triggered on push to a GitHub Pages enabled branch (gh-pages
-// for project pages, master for user and organization pages).
-//
-// Events of this type are not visible in timelines, they are only used to trigger hooks.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pagebuildevent
-type PageBuildEvent struct {
-       Build *PagesBuild `json:"build,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       ID           *int64        `json:"id,omitempty"`
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// PingEvent is triggered when a Webhook is added to GitHub.
-//
-// GitHub API docs: https://developer.github.com/webhooks/#ping-event
-type PingEvent struct {
-       // Random string of GitHub zen.
-       Zen *string `json:"zen,omitempty"`
-       // The ID of the webhook that triggered the ping.
-       HookID *int64 `json:"hook_id,omitempty"`
-       // The webhook configuration.
-       Hook         *Hook         `json:"hook,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// ProjectEvent is triggered when project is created, modified or deleted.
-// The webhook event name is "project".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#projectevent
-type ProjectEvent struct {
-       Action  *string        `json:"action,omitempty"`
-       Changes *ProjectChange `json:"changes,omitempty"`
-       Project *Project       `json:"project,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Org          *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// ProjectCardEvent is triggered when a project card is created, updated, moved, converted to an issue, or deleted.
-// The webhook event name is "project_card".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#projectcardevent
-type ProjectCardEvent struct {
-       Action      *string            `json:"action,omitempty"`
-       Changes     *ProjectCardChange `json:"changes,omitempty"`
-       AfterID     *int64             `json:"after_id,omitempty"`
-       ProjectCard *ProjectCard       `json:"project_card,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Org          *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// ProjectColumnEvent is triggered when a project column is created, updated, moved, or deleted.
-// The webhook event name is "project_column".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#projectcolumnevent
-type ProjectColumnEvent struct {
-       Action        *string              `json:"action,omitempty"`
-       Changes       *ProjectColumnChange `json:"changes,omitempty"`
-       AfterID       *int64               `json:"after_id,omitempty"`
-       ProjectColumn *ProjectColumn       `json:"project_column,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Org          *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// PublicEvent is triggered when a private repository is open sourced.
-// According to GitHub: "Without a doubt: the best GitHub event."
-// The Webhook event name is "public".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#publicevent
-type PublicEvent struct {
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// PullRequestEvent is triggered when a pull request is assigned, unassigned, labeled,
-// unlabeled, opened, edited, closed, reopened, synchronize, ready_for_review,
-// locked, unlocked, a pull request review is requested, or a review request is removed.
-// The Webhook event name is "pull_request".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pullrequestevent
-type PullRequestEvent struct {
-       // Action is the action that was performed. Possible values are:
-       // "assigned", "unassigned", "review_requested", "review_request_removed", "labeled", "unlabeled",
-       // "opened", "edited", "closed", "ready_for_review", "locked", "unlocked", or "reopened".
-       // If the action is "closed" and the "merged" key is "false", the pull request was closed with unmerged commits.
-       // If the action is "closed" and the "merged" key is "true", the pull request was merged.
-       // While webhooks are also triggered when a pull request is synchronized, Events API timelines
-       // don't include pull request events with the "synchronize" action.
-       Action      *string      `json:"action,omitempty"`
-       Assignee    *User        `json:"assignee,omitempty"`
-       Number      *int         `json:"number,omitempty"`
-       PullRequest *PullRequest `json:"pull_request,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Changes *EditChange `json:"changes,omitempty"`
-       // RequestedReviewer is populated in "review_requested", "review_request_removed" event deliveries.
-       // A request affecting multiple reviewers at once is split into multiple
-       // such event deliveries, each with a single, different RequestedReviewer.
-       RequestedReviewer *User `json:"requested_reviewer,omitempty"`
-       // In the event that a team is requested instead of a user, "requested_team" gets sent in place of
-       // "requested_user" with the same delivery behavior.
-       RequestedTeam *Team         `json:"requested_team,omitempty"`
-       Repo          *Repository   `json:"repository,omitempty"`
-       Sender        *User         `json:"sender,omitempty"`
-       Installation  *Installation `json:"installation,omitempty"`
-       Label         *Label        `json:"label,omitempty"` // Populated in "labeled" event deliveries.
-
-       // The following field is only present when the webhook is triggered on
-       // a repository belonging to an organization.
-       Organization *Organization `json:"organization,omitempty"`
-
-       // The following fields are only populated when the Action is "synchronize".
-       Before *string `json:"before,omitempty"`
-       After  *string `json:"after,omitempty"`
-}
-
-// PullRequestReviewEvent is triggered when a review is submitted on a pull
-// request.
-// The Webhook event name is "pull_request_review".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pullrequestreviewevent
-type PullRequestReviewEvent struct {
-       // Action is always "submitted".
-       Action      *string            `json:"action,omitempty"`
-       Review      *PullRequestReview `json:"review,omitempty"`
-       PullRequest *PullRequest       `json:"pull_request,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-
-       // The following field is only present when the webhook is triggered on
-       // a repository belonging to an organization.
-       Organization *Organization `json:"organization,omitempty"`
-}
-
-// PullRequestReviewCommentEvent is triggered when a comment is created on a
-// portion of the unified diff of a pull request.
-// The Webhook event name is "pull_request_review_comment".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pullrequestreviewcommentevent
-type PullRequestReviewCommentEvent struct {
-       // Action is the action that was performed on the comment.
-       // Possible values are: "created", "edited", "deleted".
-       Action      *string             `json:"action,omitempty"`
-       PullRequest *PullRequest        `json:"pull_request,omitempty"`
-       Comment     *PullRequestComment `json:"comment,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Changes      *EditChange   `json:"changes,omitempty"`
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// PushEvent represents a git push to a GitHub repository.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pushevent
-type PushEvent struct {
-       PushID       *int64        `json:"push_id,omitempty"`
-       Head         *string       `json:"head,omitempty"`
-       Ref          *string       `json:"ref,omitempty"`
-       Size         *int          `json:"size,omitempty"`
-       Commits      []*HeadCommit `json:"commits,omitempty"`
-       Before       *string       `json:"before,omitempty"`
-       DistinctSize *int          `json:"distinct_size,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       After        *string              `json:"after,omitempty"`
-       Created      *bool                `json:"created,omitempty"`
-       Deleted      *bool                `json:"deleted,omitempty"`
-       Forced       *bool                `json:"forced,omitempty"`
-       BaseRef      *string              `json:"base_ref,omitempty"`
-       Compare      *string              `json:"compare,omitempty"`
-       Repo         *PushEventRepository `json:"repository,omitempty"`
-       HeadCommit   *HeadCommit          `json:"head_commit,omitempty"`
-       Pusher       *User                `json:"pusher,omitempty"`
-       Sender       *User                `json:"sender,omitempty"`
-       Installation *Installation        `json:"installation,omitempty"`
-}
-
-func (p PushEvent) String() string {
-       return Stringify(p)
-}
-
-// HeadCommit represents a git commit in a GitHub PushEvent.
-type HeadCommit struct {
-       Message  *string       `json:"message,omitempty"`
-       Author   *CommitAuthor `json:"author,omitempty"`
-       URL      *string       `json:"url,omitempty"`
-       Distinct *bool         `json:"distinct,omitempty"`
-
-       // The following fields are only populated by Events API.
-       SHA *string `json:"sha,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       ID        *string       `json:"id,omitempty"`
-       TreeID    *string       `json:"tree_id,omitempty"`
-       Timestamp *Timestamp    `json:"timestamp,omitempty"`
-       Committer *CommitAuthor `json:"committer,omitempty"`
-       Added     []string      `json:"added,omitempty"`
-       Removed   []string      `json:"removed,omitempty"`
-       Modified  []string      `json:"modified,omitempty"`
-}
-
-func (p HeadCommit) String() string {
-       return Stringify(p)
-}
-
-// PushEventRepository represents the repo object in a PushEvent payload.
-type PushEventRepository struct {
-       ID              *int64     `json:"id,omitempty"`
-       NodeID          *string    `json:"node_id,omitempty"`
-       Name            *string    `json:"name,omitempty"`
-       FullName        *string    `json:"full_name,omitempty"`
-       Owner           *User      `json:"owner,omitempty"`
-       Private         *bool      `json:"private,omitempty"`
-       Description     *string    `json:"description,omitempty"`
-       Fork            *bool      `json:"fork,omitempty"`
-       CreatedAt       *Timestamp `json:"created_at,omitempty"`
-       PushedAt        *Timestamp `json:"pushed_at,omitempty"`
-       UpdatedAt       *Timestamp `json:"updated_at,omitempty"`
-       Homepage        *string    `json:"homepage,omitempty"`
-       PullsURL        *string    `json:"pulls_url,omitempty"`
-       Size            *int       `json:"size,omitempty"`
-       StargazersCount *int       `json:"stargazers_count,omitempty"`
-       WatchersCount   *int       `json:"watchers_count,omitempty"`
-       Language        *string    `json:"language,omitempty"`
-       HasIssues       *bool      `json:"has_issues,omitempty"`
-       HasDownloads    *bool      `json:"has_downloads,omitempty"`
-       HasWiki         *bool      `json:"has_wiki,omitempty"`
-       HasPages        *bool      `json:"has_pages,omitempty"`
-       ForksCount      *int       `json:"forks_count,omitempty"`
-       Archived        *bool      `json:"archived,omitempty"`
-       Disabled        *bool      `json:"disabled,omitempty"`
-       OpenIssuesCount *int       `json:"open_issues_count,omitempty"`
-       DefaultBranch   *string    `json:"default_branch,omitempty"`
-       MasterBranch    *string    `json:"master_branch,omitempty"`
-       Organization    *string    `json:"organization,omitempty"`
-       URL             *string    `json:"url,omitempty"`
-       ArchiveURL      *string    `json:"archive_url,omitempty"`
-       HTMLURL         *string    `json:"html_url,omitempty"`
-       StatusesURL     *string    `json:"statuses_url,omitempty"`
-       GitURL          *string    `json:"git_url,omitempty"`
-       SSHURL          *string    `json:"ssh_url,omitempty"`
-       CloneURL        *string    `json:"clone_url,omitempty"`
-       SVNURL          *string    `json:"svn_url,omitempty"`
-}
-
-// PushEventRepoOwner is a basic representation of user/org in a PushEvent payload.
-type PushEventRepoOwner struct {
-       Name  *string `json:"name,omitempty"`
-       Email *string `json:"email,omitempty"`
-}
-
-// ReleaseEvent is triggered when a release is published, unpublished, created,
-// edited, deleted, or prereleased.
-// The Webhook event name is "release".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#releaseevent
-type ReleaseEvent struct {
-       // Action is the action that was performed. Possible values are: "published", "unpublished",
-       // "created", "edited", "deleted", or "prereleased".
-       Action  *string            `json:"action,omitempty"`
-       Release *RepositoryRelease `json:"release,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// RepositoryEvent is triggered when a repository is created, archived, unarchived,
-// renamed, edited, transferred, made public, or made private. Organization hooks are
-// also trigerred when a repository is deleted.
-// The Webhook event name is "repository".
-//
-// Events of this type are not visible in timelines, they are only used to
-// trigger organization webhooks.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#repositoryevent
-type RepositoryEvent struct {
-       // Action is the action that was performed. Possible values are: "created",
-       // "deleted" (organization hooks only), "archived", "unarchived", "edited", "renamed",
-       // "transferred", "publicized", or "privatized".
-       Action *string     `json:"action,omitempty"`
-       Repo   *Repository `json:"repository,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Org          *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// RepositoryDispatchEvent is triggered when a client sends a POST request to the repository dispatch event endpoint.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#repositorydispatchevent
-type RepositoryDispatchEvent struct {
-       // Action is the event_type that submitted with the repository dispatch payload. Value can be any string.
-       Action        *string         `json:"action,omitempty"`
-       Branch        *string         `json:"branch,omitempty"`
-       ClientPayload json.RawMessage `json:"client_payload,omitempty"`
-       Repo          *Repository     `json:"repository,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Org          *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// RepositoryVulnerabilityAlertEvent is triggered when a security alert is created, dismissed, or resolved.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#repositoryvulnerabilityalertevent
-type RepositoryVulnerabilityAlertEvent struct {
-       // Action is the action that was performed. Possible values are: "create", "dismiss", "resolve".
-       Action *string `json:"action,omitempty"`
-
-       //The security alert of the vulnerable dependency.
-       Alert *struct {
-               ID                  *int64     `json:"id,omitempty"`
-               AffectedRange       *string    `json:"affected_range,omitempty"`
-               AffectedPackageName *string    `json:"affected_package_name,omitempty"`
-               ExternalReference   *string    `json:"external_reference,omitempty"`
-               ExternalIdentifier  *string    `json:"external_identifier,omitempty"`
-               FixedIn             *string    `json:"fixed_in,omitempty"`
-               Dismisser           *User      `json:"dismisser,omitempty"`
-               DismissReason       *string    `json:"dismiss_reason,omitempty"`
-               DismissedAt         *Timestamp `json:"dismissed_at,omitempty"`
-       } `json:"alert,omitempty"`
-
-       //The repository of the vulnerable dependency.
-       Repository *Repository `json:"repository,omitempty"`
-}
-
-// StarEvent is triggered when a star is added or removed from a repository.
-// The Webhook event name is "star".
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#starevent
-type StarEvent struct {
-       // Action is the action that was performed. Possible values are: "created" or "deleted".
-       Action *string `json:"action,omitempty"`
-
-       // StarredAt is the time the star was created. It will be null for the "deleted" action.
-       StarredAt *Timestamp `json:"starred_at,omitempty"`
-}
-
-// StatusEvent is triggered when the status of a Git commit changes.
-// The Webhook event name is "status".
-//
-// Events of this type are not visible in timelines, they are only used to
-// trigger hooks.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#statusevent
-type StatusEvent struct {
-       SHA *string `json:"sha,omitempty"`
-       // State is the new state. Possible values are: "pending", "success", "failure", "error".
-       State       *string   `json:"state,omitempty"`
-       Description *string   `json:"description,omitempty"`
-       TargetURL   *string   `json:"target_url,omitempty"`
-       Branches    []*Branch `json:"branches,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       ID           *int64            `json:"id,omitempty"`
-       Name         *string           `json:"name,omitempty"`
-       Context      *string           `json:"context,omitempty"`
-       Commit       *RepositoryCommit `json:"commit,omitempty"`
-       CreatedAt    *Timestamp        `json:"created_at,omitempty"`
-       UpdatedAt    *Timestamp        `json:"updated_at,omitempty"`
-       Repo         *Repository       `json:"repository,omitempty"`
-       Sender       *User             `json:"sender,omitempty"`
-       Installation *Installation     `json:"installation,omitempty"`
-}
-
-// TeamEvent is triggered when an organization's team is created, modified or deleted.
-// The Webhook event name is "team".
-//
-// Events of this type are not visible in timelines. These events are only used
-// to trigger hooks.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#teamevent
-type TeamEvent struct {
-       Action  *string     `json:"action,omitempty"`
-       Team    *Team       `json:"team,omitempty"`
-       Changes *TeamChange `json:"changes,omitempty"`
-       Repo    *Repository `json:"repository,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Org          *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// TeamAddEvent is triggered when a repository is added to a team.
-// The Webhook event name is "team_add".
-//
-// Events of this type are not visible in timelines. These events are only used
-// to trigger hooks.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#teamaddevent
-type TeamAddEvent struct {
-       Team *Team       `json:"team,omitempty"`
-       Repo *Repository `json:"repository,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Org          *Organization `json:"organization,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
-
-// UserEvent is triggered when a user is created or deleted.
-// The Webhook event name is "user".
-//
-// Only global webhooks can subscribe to this event type.
-//
-// GitHub API docs: https://developer.github.com/enterprise/v3/activity/events/types/#userevent-enterprise
-type UserEvent struct {
-       User *User `json:"user,omitempty"`
-       // The action performed. Possible values are: "created" or "deleted".
-       Action     *string     `json:"action,omitempty"`
-       Enterprise *Enterprise `json:"enterprise,omitempty"`
-       Sender     *User       `json:"sender,omitempty"`
-}
-
-// WatchEvent is related to starring a repository, not watching. See this API
-// blog post for an explanation: https://developer.github.com/changes/2012-09-05-watcher-api/
-//
-// The event’s actor is the user who starred a repository, and the event’s
-// repository is the repository that was starred.
-//
-// GitHub API docs: https://developer.github.com/v3/activity/events/types/#watchevent
-type WatchEvent struct {
-       // Action is the action that was performed. Possible value is: "started".
-       Action *string `json:"action,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Repo         *Repository   `json:"repository,omitempty"`
-       Sender       *User         `json:"sender,omitempty"`
-       Installation *Installation `json:"installation,omitempty"`
-}
diff --git a/vendor/github.com/google/go-github/v32/github/gists.go b/vendor/github.com/google/go-github/v32/github/gists.go
deleted file mode 100644 (file)
index af6084f..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// GistsService handles communication with the Gist related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/
-type GistsService service
-
-// Gist represents a GitHub's gist.
-type Gist struct {
-       ID          *string                   `json:"id,omitempty"`
-       Description *string                   `json:"description,omitempty"`
-       Public      *bool                     `json:"public,omitempty"`
-       Owner       *User                     `json:"owner,omitempty"`
-       Files       map[GistFilename]GistFile `json:"files,omitempty"`
-       Comments    *int                      `json:"comments,omitempty"`
-       HTMLURL     *string                   `json:"html_url,omitempty"`
-       GitPullURL  *string                   `json:"git_pull_url,omitempty"`
-       GitPushURL  *string                   `json:"git_push_url,omitempty"`
-       CreatedAt   *time.Time                `json:"created_at,omitempty"`
-       UpdatedAt   *time.Time                `json:"updated_at,omitempty"`
-       NodeID      *string                   `json:"node_id,omitempty"`
-}
-
-func (g Gist) String() string {
-       return Stringify(g)
-}
-
-// GistFilename represents filename on a gist.
-type GistFilename string
-
-// GistFile represents a file on a gist.
-type GistFile struct {
-       Size     *int    `json:"size,omitempty"`
-       Filename *string `json:"filename,omitempty"`
-       Language *string `json:"language,omitempty"`
-       Type     *string `json:"type,omitempty"`
-       RawURL   *string `json:"raw_url,omitempty"`
-       Content  *string `json:"content,omitempty"`
-}
-
-func (g GistFile) String() string {
-       return Stringify(g)
-}
-
-// GistCommit represents a commit on a gist.
-type GistCommit struct {
-       URL          *string      `json:"url,omitempty"`
-       Version      *string      `json:"version,omitempty"`
-       User         *User        `json:"user,omitempty"`
-       ChangeStatus *CommitStats `json:"change_status,omitempty"`
-       CommittedAt  *Timestamp   `json:"committed_at,omitempty"`
-       NodeID       *string      `json:"node_id,omitempty"`
-}
-
-func (gc GistCommit) String() string {
-       return Stringify(gc)
-}
-
-// GistFork represents a fork of a gist.
-type GistFork struct {
-       URL       *string    `json:"url,omitempty"`
-       User      *User      `json:"user,omitempty"`
-       ID        *string    `json:"id,omitempty"`
-       CreatedAt *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt *Timestamp `json:"updated_at,omitempty"`
-       NodeID    *string    `json:"node_id,omitempty"`
-}
-
-func (gf GistFork) String() string {
-       return Stringify(gf)
-}
-
-// GistListOptions specifies the optional parameters to the
-// GistsService.List, GistsService.ListAll, and GistsService.ListStarred methods.
-type GistListOptions struct {
-       // Since filters Gists by time.
-       Since time.Time `url:"since,omitempty"`
-
-       ListOptions
-}
-
-// List gists for a user. Passing the empty string will list
-// all public gists if called anonymously. However, if the call
-// is authenticated, it will returns all gists for the authenticated
-// user.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#list-gists-for-a-user
-// GitHub API docs: https://developer.github.com/v3/gists/#list-gists-for-the-authenticated-user
-func (s *GistsService) List(ctx context.Context, user string, opts *GistListOptions) ([]*Gist, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v/gists", user)
-       } else {
-               u = "gists"
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var gists []*Gist
-       resp, err := s.client.Do(ctx, req, &gists)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return gists, resp, nil
-}
-
-// ListAll lists all public gists.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#list-public-gists
-func (s *GistsService) ListAll(ctx context.Context, opts *GistListOptions) ([]*Gist, *Response, error) {
-       u, err := addOptions("gists/public", opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var gists []*Gist
-       resp, err := s.client.Do(ctx, req, &gists)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return gists, resp, nil
-}
-
-// ListStarred lists starred gists of authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#list-starred-gists
-func (s *GistsService) ListStarred(ctx context.Context, opts *GistListOptions) ([]*Gist, *Response, error) {
-       u, err := addOptions("gists/starred", opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var gists []*Gist
-       resp, err := s.client.Do(ctx, req, &gists)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return gists, resp, nil
-}
-
-// Get a single gist.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#get-a-gist
-func (s *GistsService) Get(ctx context.Context, id string) (*Gist, *Response, error) {
-       u := fmt.Sprintf("gists/%v", id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       gist := new(Gist)
-       resp, err := s.client.Do(ctx, req, gist)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return gist, resp, nil
-}
-
-// GetRevision gets a specific revision of a gist.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#get-a-gist-revision
-func (s *GistsService) GetRevision(ctx context.Context, id, sha string) (*Gist, *Response, error) {
-       u := fmt.Sprintf("gists/%v/%v", id, sha)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       gist := new(Gist)
-       resp, err := s.client.Do(ctx, req, gist)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return gist, resp, nil
-}
-
-// Create a gist for authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#create-a-gist
-func (s *GistsService) Create(ctx context.Context, gist *Gist) (*Gist, *Response, error) {
-       u := "gists"
-       req, err := s.client.NewRequest("POST", u, gist)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       g := new(Gist)
-       resp, err := s.client.Do(ctx, req, g)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return g, resp, nil
-}
-
-// Edit a gist.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#update-a-gist
-func (s *GistsService) Edit(ctx context.Context, id string, gist *Gist) (*Gist, *Response, error) {
-       u := fmt.Sprintf("gists/%v", id)
-       req, err := s.client.NewRequest("PATCH", u, gist)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       g := new(Gist)
-       resp, err := s.client.Do(ctx, req, g)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return g, resp, nil
-}
-
-// ListCommits lists commits of a gist.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#list-gist-commits
-func (s *GistsService) ListCommits(ctx context.Context, id string, opts *ListOptions) ([]*GistCommit, *Response, error) {
-       u := fmt.Sprintf("gists/%v/commits", id)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var gistCommits []*GistCommit
-       resp, err := s.client.Do(ctx, req, &gistCommits)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return gistCommits, resp, nil
-}
-
-// Delete a gist.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#delete-a-gist
-func (s *GistsService) Delete(ctx context.Context, id string) (*Response, error) {
-       u := fmt.Sprintf("gists/%v", id)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// Star a gist on behalf of authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#star-a-gist
-func (s *GistsService) Star(ctx context.Context, id string) (*Response, error) {
-       u := fmt.Sprintf("gists/%v/star", id)
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// Unstar a gist on a behalf of authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#unstar-a-gist
-func (s *GistsService) Unstar(ctx context.Context, id string) (*Response, error) {
-       u := fmt.Sprintf("gists/%v/star", id)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// IsStarred checks if a gist is starred by authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#check-if-a-gist-is-starred
-func (s *GistsService) IsStarred(ctx context.Context, id string) (bool, *Response, error) {
-       u := fmt.Sprintf("gists/%v/star", id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-       resp, err := s.client.Do(ctx, req, nil)
-       starred, err := parseBoolResponse(err)
-       return starred, resp, err
-}
-
-// Fork a gist.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#fork-a-gist
-func (s *GistsService) Fork(ctx context.Context, id string) (*Gist, *Response, error) {
-       u := fmt.Sprintf("gists/%v/forks", id)
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       g := new(Gist)
-       resp, err := s.client.Do(ctx, req, g)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return g, resp, nil
-}
-
-// ListForks lists forks of a gist.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/#list-gist-forks
-func (s *GistsService) ListForks(ctx context.Context, id string, opts *ListOptions) ([]*GistFork, *Response, error) {
-       u := fmt.Sprintf("gists/%v/forks", id)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var gistForks []*GistFork
-       resp, err := s.client.Do(ctx, req, &gistForks)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return gistForks, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/gists_comments.go b/vendor/github.com/google/go-github/v32/github/gists_comments.go
deleted file mode 100644 (file)
index 35406a9..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// GistComment represents a Gist comment.
-type GistComment struct {
-       ID        *int64     `json:"id,omitempty"`
-       URL       *string    `json:"url,omitempty"`
-       Body      *string    `json:"body,omitempty"`
-       User      *User      `json:"user,omitempty"`
-       CreatedAt *time.Time `json:"created_at,omitempty"`
-}
-
-func (g GistComment) String() string {
-       return Stringify(g)
-}
-
-// ListComments lists all comments for a gist.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/comments/#list-gist-comments
-func (s *GistsService) ListComments(ctx context.Context, gistID string, opts *ListOptions) ([]*GistComment, *Response, error) {
-       u := fmt.Sprintf("gists/%v/comments", gistID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var comments []*GistComment
-       resp, err := s.client.Do(ctx, req, &comments)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comments, resp, nil
-}
-
-// GetComment retrieves a single comment from a gist.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/comments/#get-a-gist-comment
-func (s *GistsService) GetComment(ctx context.Context, gistID string, commentID int64) (*GistComment, *Response, error) {
-       u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       c := new(GistComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// CreateComment creates a comment for a gist.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/comments/#create-a-gist-comment
-func (s *GistsService) CreateComment(ctx context.Context, gistID string, comment *GistComment) (*GistComment, *Response, error) {
-       u := fmt.Sprintf("gists/%v/comments", gistID)
-       req, err := s.client.NewRequest("POST", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       c := new(GistComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// EditComment edits an existing gist comment.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/comments/#update-a-gist-comment
-func (s *GistsService) EditComment(ctx context.Context, gistID string, commentID int64, comment *GistComment) (*GistComment, *Response, error) {
-       u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID)
-       req, err := s.client.NewRequest("PATCH", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       c := new(GistComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// DeleteComment deletes a gist comment.
-//
-// GitHub API docs: https://developer.github.com/v3/gists/comments/#delete-a-gist-comment
-func (s *GistsService) DeleteComment(ctx context.Context, gistID string, commentID int64) (*Response, error) {
-       u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/git.go b/vendor/github.com/google/go-github/v32/github/git.go
deleted file mode 100644 (file)
index 1ce4743..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-// GitService handles communication with the git data related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/git/
-type GitService service
diff --git a/vendor/github.com/google/go-github/v32/github/git_blobs.go b/vendor/github.com/google/go-github/v32/github/git_blobs.go
deleted file mode 100644 (file)
index 70aee14..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "bytes"
-       "context"
-       "fmt"
-)
-
-// Blob represents a blob object.
-type Blob struct {
-       Content  *string `json:"content,omitempty"`
-       Encoding *string `json:"encoding,omitempty"`
-       SHA      *string `json:"sha,omitempty"`
-       Size     *int    `json:"size,omitempty"`
-       URL      *string `json:"url,omitempty"`
-       NodeID   *string `json:"node_id,omitempty"`
-}
-
-// GetBlob fetches a blob from a repo given a SHA.
-//
-// GitHub API docs: https://developer.github.com/v3/git/blobs/#get-a-blob
-func (s *GitService) GetBlob(ctx context.Context, owner string, repo string, sha string) (*Blob, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/git/blobs/%v", owner, repo, sha)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       blob := new(Blob)
-       resp, err := s.client.Do(ctx, req, blob)
-       return blob, resp, err
-}
-
-// GetBlobRaw fetches a blob's contents from a repo.
-// Unlike GetBlob, it returns the raw bytes rather than the base64-encoded data.
-//
-// GitHub API docs: https://developer.github.com/v3/git/blobs/#get-a-blob
-func (s *GitService) GetBlobRaw(ctx context.Context, owner, repo, sha string) ([]byte, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/git/blobs/%v", owner, repo, sha)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-       req.Header.Set("Accept", "application/vnd.github.v3.raw")
-
-       var buf bytes.Buffer
-       resp, err := s.client.Do(ctx, req, &buf)
-       return buf.Bytes(), resp, err
-}
-
-// CreateBlob creates a blob object.
-//
-// GitHub API docs: https://developer.github.com/v3/git/blobs/#create-a-blob
-func (s *GitService) CreateBlob(ctx context.Context, owner string, repo string, blob *Blob) (*Blob, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/git/blobs", owner, repo)
-       req, err := s.client.NewRequest("POST", u, blob)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Blob)
-       resp, err := s.client.Do(ctx, req, t)
-       return t, resp, err
-}
diff --git a/vendor/github.com/google/go-github/v32/github/git_commits.go b/vendor/github.com/google/go-github/v32/github/git_commits.go
deleted file mode 100644 (file)
index e1dba1c..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "bytes"
-       "context"
-       "errors"
-       "fmt"
-       "strings"
-       "time"
-
-       "golang.org/x/crypto/openpgp"
-)
-
-// SignatureVerification represents GPG signature verification.
-type SignatureVerification struct {
-       Verified  *bool   `json:"verified,omitempty"`
-       Reason    *string `json:"reason,omitempty"`
-       Signature *string `json:"signature,omitempty"`
-       Payload   *string `json:"payload,omitempty"`
-}
-
-// Commit represents a GitHub commit.
-type Commit struct {
-       SHA          *string                `json:"sha,omitempty"`
-       Author       *CommitAuthor          `json:"author,omitempty"`
-       Committer    *CommitAuthor          `json:"committer,omitempty"`
-       Message      *string                `json:"message,omitempty"`
-       Tree         *Tree                  `json:"tree,omitempty"`
-       Parents      []*Commit              `json:"parents,omitempty"`
-       Stats        *CommitStats           `json:"stats,omitempty"`
-       HTMLURL      *string                `json:"html_url,omitempty"`
-       URL          *string                `json:"url,omitempty"`
-       Verification *SignatureVerification `json:"verification,omitempty"`
-       NodeID       *string                `json:"node_id,omitempty"`
-
-       // CommentCount is the number of GitHub comments on the commit. This
-       // is only populated for requests that fetch GitHub data like
-       // Pulls.ListCommits, Repositories.ListCommits, etc.
-       CommentCount *int `json:"comment_count,omitempty"`
-
-       // SigningKey denotes a key to sign the commit with. If not nil this key will
-       // be used to sign the commit. The private key must be present and already
-       // decrypted. Ignored if Verification.Signature is defined.
-       SigningKey *openpgp.Entity `json:"-"`
-}
-
-func (c Commit) String() string {
-       return Stringify(c)
-}
-
-// CommitAuthor represents the author or committer of a commit. The commit
-// author may not correspond to a GitHub User.
-type CommitAuthor struct {
-       Date  *time.Time `json:"date,omitempty"`
-       Name  *string    `json:"name,omitempty"`
-       Email *string    `json:"email,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       Login *string `json:"username,omitempty"` // Renamed for go-github consistency.
-}
-
-func (c CommitAuthor) String() string {
-       return Stringify(c)
-}
-
-// GetCommit fetches the Commit object for a given SHA.
-//
-// GitHub API docs: https://developer.github.com/v3/git/commits/#get-a-commit
-func (s *GitService) GetCommit(ctx context.Context, owner string, repo string, sha string) (*Commit, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/git/commits/%v", owner, repo, sha)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       c := new(Commit)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// createCommit represents the body of a CreateCommit request.
-type createCommit struct {
-       Author    *CommitAuthor `json:"author,omitempty"`
-       Committer *CommitAuthor `json:"committer,omitempty"`
-       Message   *string       `json:"message,omitempty"`
-       Tree      *string       `json:"tree,omitempty"`
-       Parents   []string      `json:"parents,omitempty"`
-       Signature *string       `json:"signature,omitempty"`
-}
-
-// CreateCommit creates a new commit in a repository.
-// commit must not be nil.
-//
-// The commit.Committer is optional and will be filled with the commit.Author
-// data if omitted. If the commit.Author is omitted, it will be filled in with
-// the authenticated user’s information and the current date.
-//
-// GitHub API docs: https://developer.github.com/v3/git/commits/#create-a-commit
-func (s *GitService) CreateCommit(ctx context.Context, owner string, repo string, commit *Commit) (*Commit, *Response, error) {
-       if commit == nil {
-               return nil, nil, fmt.Errorf("commit must be provided")
-       }
-
-       u := fmt.Sprintf("repos/%v/%v/git/commits", owner, repo)
-
-       parents := make([]string, len(commit.Parents))
-       for i, parent := range commit.Parents {
-               parents[i] = *parent.SHA
-       }
-
-       body := &createCommit{
-               Author:    commit.Author,
-               Committer: commit.Committer,
-               Message:   commit.Message,
-               Parents:   parents,
-       }
-       if commit.Tree != nil {
-               body.Tree = commit.Tree.SHA
-       }
-       if commit.SigningKey != nil {
-               signature, err := createSignature(commit.SigningKey, body)
-               if err != nil {
-                       return nil, nil, err
-               }
-               body.Signature = &signature
-       }
-       if commit.Verification != nil {
-               body.Signature = commit.Verification.Signature
-       }
-
-       req, err := s.client.NewRequest("POST", u, body)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       c := new(Commit)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-func createSignature(signingKey *openpgp.Entity, commit *createCommit) (string, error) {
-       if signingKey == nil || commit == nil {
-               return "", errors.New("createSignature: invalid parameters")
-       }
-
-       message, err := createSignatureMessage(commit)
-       if err != nil {
-               return "", err
-       }
-
-       writer := new(bytes.Buffer)
-       reader := bytes.NewReader([]byte(message))
-       if err := openpgp.ArmoredDetachSign(writer, signingKey, reader, nil); err != nil {
-               return "", err
-       }
-
-       return writer.String(), nil
-}
-
-func createSignatureMessage(commit *createCommit) (string, error) {
-       if commit == nil || commit.Message == nil || *commit.Message == "" || commit.Author == nil {
-               return "", errors.New("createSignatureMessage: invalid parameters")
-       }
-
-       var message []string
-
-       if commit.Tree != nil {
-               message = append(message, fmt.Sprintf("tree %s", *commit.Tree))
-       }
-
-       for _, parent := range commit.Parents {
-               message = append(message, fmt.Sprintf("parent %s", parent))
-       }
-
-       message = append(message, fmt.Sprintf("author %s <%s> %d %s", commit.Author.GetName(), commit.Author.GetEmail(), commit.Author.GetDate().Unix(), commit.Author.GetDate().Format("-0700")))
-
-       committer := commit.Committer
-       if committer == nil {
-               committer = commit.Author
-       }
-
-       // There needs to be a double newline after committer
-       message = append(message, fmt.Sprintf("committer %s <%s> %d %s\n", committer.GetName(), committer.GetEmail(), committer.GetDate().Unix(), committer.GetDate().Format("-0700")))
-       message = append(message, *commit.Message)
-
-       return strings.Join(message, "\n"), nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/git_refs.go b/vendor/github.com/google/go-github/v32/github/git_refs.go
deleted file mode 100644 (file)
index ef1d026..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "net/url"
-       "strings"
-)
-
-// Reference represents a GitHub reference.
-type Reference struct {
-       Ref    *string    `json:"ref"`
-       URL    *string    `json:"url"`
-       Object *GitObject `json:"object"`
-       NodeID *string    `json:"node_id,omitempty"`
-}
-
-func (r Reference) String() string {
-       return Stringify(r)
-}
-
-// GitObject represents a Git object.
-type GitObject struct {
-       Type *string `json:"type"`
-       SHA  *string `json:"sha"`
-       URL  *string `json:"url"`
-}
-
-func (o GitObject) String() string {
-       return Stringify(o)
-}
-
-// createRefRequest represents the payload for creating a reference.
-type createRefRequest struct {
-       Ref *string `json:"ref"`
-       SHA *string `json:"sha"`
-}
-
-// updateRefRequest represents the payload for updating a reference.
-type updateRefRequest struct {
-       SHA   *string `json:"sha"`
-       Force *bool   `json:"force"`
-}
-
-// GetRef fetches a single reference in a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/git/refs/#get-a-reference
-func (s *GitService) GetRef(ctx context.Context, owner string, repo string, ref string) (*Reference, *Response, error) {
-       ref = strings.TrimPrefix(ref, "refs/")
-       u := fmt.Sprintf("repos/%v/%v/git/ref/%v", owner, repo, refURLEscape(ref))
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := new(Reference)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// refURLEscape escapes every path segment of the given ref. Those must
-// not contain escaped "/" - as "%2F" - or github will not recognize it.
-func refURLEscape(ref string) string {
-       parts := strings.Split(ref, "/")
-       for i, s := range parts {
-               parts[i] = url.PathEscape(s)
-       }
-       return strings.Join(parts, "/")
-}
-
-// ReferenceListOptions specifies optional parameters to the
-// GitService.ListMatchingRefs method.
-type ReferenceListOptions struct {
-       Ref string `url:"-"`
-
-       ListOptions
-}
-
-// ListMatchingRefs lists references in a repository that match a supplied ref.
-// Use an empty ref to list all references.
-//
-// GitHub API docs: https://developer.github.com/v3/git/refs/#list-matching-references
-func (s *GitService) ListMatchingRefs(ctx context.Context, owner, repo string, opts *ReferenceListOptions) ([]*Reference, *Response, error) {
-       var ref string
-       if opts != nil {
-               ref = strings.TrimPrefix(opts.Ref, "refs/")
-       }
-       u := fmt.Sprintf("repos/%v/%v/git/matching-refs/%v", owner, repo, refURLEscape(ref))
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var rs []*Reference
-       resp, err := s.client.Do(ctx, req, &rs)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return rs, resp, nil
-}
-
-// CreateRef creates a new ref in a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/git/refs/#create-a-reference
-func (s *GitService) CreateRef(ctx context.Context, owner string, repo string, ref *Reference) (*Reference, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/git/refs", owner, repo)
-       req, err := s.client.NewRequest("POST", u, &createRefRequest{
-               // back-compat with previous behavior that didn't require 'refs/' prefix
-               Ref: String("refs/" + strings.TrimPrefix(*ref.Ref, "refs/")),
-               SHA: ref.Object.SHA,
-       })
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := new(Reference)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// UpdateRef updates an existing ref in a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/git/refs/#update-a-reference
-func (s *GitService) UpdateRef(ctx context.Context, owner string, repo string, ref *Reference, force bool) (*Reference, *Response, error) {
-       refPath := strings.TrimPrefix(*ref.Ref, "refs/")
-       u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, refPath)
-       req, err := s.client.NewRequest("PATCH", u, &updateRefRequest{
-               SHA:   ref.Object.SHA,
-               Force: &force,
-       })
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := new(Reference)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// DeleteRef deletes a ref from a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/git/refs/#delete-a-reference
-func (s *GitService) DeleteRef(ctx context.Context, owner string, repo string, ref string) (*Response, error) {
-       ref = strings.TrimPrefix(ref, "refs/")
-       u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, refURLEscape(ref))
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/git_tags.go b/vendor/github.com/google/go-github/v32/github/git_tags.go
deleted file mode 100644 (file)
index abdbde6..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// Tag represents a tag object.
-type Tag struct {
-       Tag          *string                `json:"tag,omitempty"`
-       SHA          *string                `json:"sha,omitempty"`
-       URL          *string                `json:"url,omitempty"`
-       Message      *string                `json:"message,omitempty"`
-       Tagger       *CommitAuthor          `json:"tagger,omitempty"`
-       Object       *GitObject             `json:"object,omitempty"`
-       Verification *SignatureVerification `json:"verification,omitempty"`
-       NodeID       *string                `json:"node_id,omitempty"`
-}
-
-// createTagRequest represents the body of a CreateTag request. This is mostly
-// identical to Tag with the exception that the object SHA and Type are
-// top-level fields, rather than being nested inside a JSON object.
-type createTagRequest struct {
-       Tag     *string       `json:"tag,omitempty"`
-       Message *string       `json:"message,omitempty"`
-       Object  *string       `json:"object,omitempty"`
-       Type    *string       `json:"type,omitempty"`
-       Tagger  *CommitAuthor `json:"tagger,omitempty"`
-}
-
-// GetTag fetches a tag from a repo given a SHA.
-//
-// GitHub API docs: https://developer.github.com/v3/git/tags/#get-a-tag
-func (s *GitService) GetTag(ctx context.Context, owner string, repo string, sha string) (*Tag, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/git/tags/%v", owner, repo, sha)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       tag := new(Tag)
-       resp, err := s.client.Do(ctx, req, tag)
-       return tag, resp, err
-}
-
-// CreateTag creates a tag object.
-//
-// GitHub API docs: https://developer.github.com/v3/git/tags/#create-a-tag-object
-func (s *GitService) CreateTag(ctx context.Context, owner string, repo string, tag *Tag) (*Tag, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/git/tags", owner, repo)
-
-       // convert Tag into a createTagRequest
-       tagRequest := &createTagRequest{
-               Tag:     tag.Tag,
-               Message: tag.Message,
-               Tagger:  tag.Tagger,
-       }
-       if tag.Object != nil {
-               tagRequest.Object = tag.Object.SHA
-               tagRequest.Type = tag.Object.Type
-       }
-
-       req, err := s.client.NewRequest("POST", u, tagRequest)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Tag)
-       resp, err := s.client.Do(ctx, req, t)
-       return t, resp, err
-}
diff --git a/vendor/github.com/google/go-github/v32/github/git_trees.go b/vendor/github.com/google/go-github/v32/github/git_trees.go
deleted file mode 100644 (file)
index 7430876..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "encoding/json"
-       "fmt"
-)
-
-// Tree represents a GitHub tree.
-type Tree struct {
-       SHA     *string      `json:"sha,omitempty"`
-       Entries []*TreeEntry `json:"tree,omitempty"`
-
-       // Truncated is true if the number of items in the tree
-       // exceeded GitHub's maximum limit and the Entries were truncated
-       // in the response. Only populated for requests that fetch
-       // trees like Git.GetTree.
-       Truncated *bool `json:"truncated,omitempty"`
-}
-
-func (t Tree) String() string {
-       return Stringify(t)
-}
-
-// TreeEntry represents the contents of a tree structure. TreeEntry can
-// represent either a blob, a commit (in the case of a submodule), or another
-// tree.
-type TreeEntry struct {
-       SHA     *string `json:"sha,omitempty"`
-       Path    *string `json:"path,omitempty"`
-       Mode    *string `json:"mode,omitempty"`
-       Type    *string `json:"type,omitempty"`
-       Size    *int    `json:"size,omitempty"`
-       Content *string `json:"content,omitempty"`
-       URL     *string `json:"url,omitempty"`
-}
-
-func (t TreeEntry) String() string {
-       return Stringify(t)
-}
-
-// treeEntryWithFileDelete is used internally to delete a file whose
-// Content and SHA fields are empty. It does this by removing the "omitempty"
-// tag modifier on the SHA field which causes the GitHub API to receive
-// {"sha":null} and thereby delete the file.
-type treeEntryWithFileDelete struct {
-       SHA     *string `json:"sha"`
-       Path    *string `json:"path,omitempty"`
-       Mode    *string `json:"mode,omitempty"`
-       Type    *string `json:"type,omitempty"`
-       Size    *int    `json:"size,omitempty"`
-       Content *string `json:"content,omitempty"`
-       URL     *string `json:"url,omitempty"`
-}
-
-func (t *TreeEntry) MarshalJSON() ([]byte, error) {
-       if t.SHA == nil && t.Content == nil {
-               return json.Marshal(struct {
-                       SHA  *string `json:"sha"`
-                       Path *string `json:"path,omitempty"`
-                       Mode *string `json:"mode,omitempty"`
-                       Type *string `json:"type,omitempty"`
-               }{
-                       nil,
-                       t.Path,
-                       t.Mode,
-                       t.Type,
-               })
-       }
-       return json.Marshal(struct {
-               SHA     *string `json:"sha,omitempty"`
-               Path    *string `json:"path,omitempty"`
-               Mode    *string `json:"mode,omitempty"`
-               Type    *string `json:"type,omitempty"`
-               Size    *int    `json:"size,omitempty"`
-               Content *string `json:"content,omitempty"`
-               URL     *string `json:"url,omitempty"`
-       }{
-               SHA:     t.SHA,
-               Path:    t.Path,
-               Mode:    t.Mode,
-               Type:    t.Type,
-               Size:    t.Size,
-               Content: t.Content,
-               URL:     t.URL,
-       })
-}
-
-// GetTree fetches the Tree object for a given sha hash from a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/git/trees/#get-a-tree
-func (s *GitService) GetTree(ctx context.Context, owner string, repo string, sha string, recursive bool) (*Tree, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/git/trees/%v", owner, repo, sha)
-       if recursive {
-               u += "?recursive=1"
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Tree)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// createTree represents the body of a CreateTree request.
-type createTree struct {
-       BaseTree string        `json:"base_tree,omitempty"`
-       Entries  []interface{} `json:"tree"`
-}
-
-// CreateTree creates a new tree in a repository. If both a tree and a nested
-// path modifying that tree are specified, it will overwrite the contents of
-// that tree with the new path contents and write a new tree out.
-//
-// GitHub API docs: https://developer.github.com/v3/git/trees/#create-a-tree
-func (s *GitService) CreateTree(ctx context.Context, owner string, repo string, baseTree string, entries []*TreeEntry) (*Tree, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/git/trees", owner, repo)
-
-       newEntries := make([]interface{}, 0, len(entries))
-       for _, entry := range entries {
-               if entry.Content == nil && entry.SHA == nil {
-                       newEntries = append(newEntries, treeEntryWithFileDelete{
-                               Path: entry.Path,
-                               Mode: entry.Mode,
-                               Type: entry.Type,
-                               Size: entry.Size,
-                               URL:  entry.URL,
-                       })
-                       continue
-               }
-               newEntries = append(newEntries, entry)
-       }
-
-       body := &createTree{
-               BaseTree: baseTree,
-               Entries:  newEntries,
-       }
-       req, err := s.client.NewRequest("POST", u, body)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Tree)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/github-accessors.go b/vendor/github.com/google/go-github/v32/github/github-accessors.go
deleted file mode 100644 (file)
index 8c591ce..0000000
+++ /dev/null
@@ -1,15277 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by gen-accessors; DO NOT EDIT.
-
-package github
-
-import (
-       "encoding/json"
-       "time"
-)
-
-// GetRetryAfter returns the RetryAfter field if it's non-nil, zero value otherwise.
-func (a *AbuseRateLimitError) GetRetryAfter() time.Duration {
-       if a == nil || a.RetryAfter == nil {
-               return 0
-       }
-       return *a.RetryAfter
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (a *AdminEnforcement) GetURL() string {
-       if a == nil || a.URL == nil {
-               return ""
-       }
-       return *a.URL
-}
-
-// GetComments returns the Comments field.
-func (a *AdminStats) GetComments() *CommentStats {
-       if a == nil {
-               return nil
-       }
-       return a.Comments
-}
-
-// GetGists returns the Gists field.
-func (a *AdminStats) GetGists() *GistStats {
-       if a == nil {
-               return nil
-       }
-       return a.Gists
-}
-
-// GetHooks returns the Hooks field.
-func (a *AdminStats) GetHooks() *HookStats {
-       if a == nil {
-               return nil
-       }
-       return a.Hooks
-}
-
-// GetIssues returns the Issues field.
-func (a *AdminStats) GetIssues() *IssueStats {
-       if a == nil {
-               return nil
-       }
-       return a.Issues
-}
-
-// GetMilestones returns the Milestones field.
-func (a *AdminStats) GetMilestones() *MilestoneStats {
-       if a == nil {
-               return nil
-       }
-       return a.Milestones
-}
-
-// GetOrgs returns the Orgs field.
-func (a *AdminStats) GetOrgs() *OrgStats {
-       if a == nil {
-               return nil
-       }
-       return a.Orgs
-}
-
-// GetPages returns the Pages field.
-func (a *AdminStats) GetPages() *PageStats {
-       if a == nil {
-               return nil
-       }
-       return a.Pages
-}
-
-// GetPulls returns the Pulls field.
-func (a *AdminStats) GetPulls() *PullStats {
-       if a == nil {
-               return nil
-       }
-       return a.Pulls
-}
-
-// GetRepos returns the Repos field.
-func (a *AdminStats) GetRepos() *RepoStats {
-       if a == nil {
-               return nil
-       }
-       return a.Repos
-}
-
-// GetUsers returns the Users field.
-func (a *AdminStats) GetUsers() *UserStats {
-       if a == nil {
-               return nil
-       }
-       return a.Users
-}
-
-// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise.
-func (a *Alert) GetClosedAt() Timestamp {
-       if a == nil || a.ClosedAt == nil {
-               return Timestamp{}
-       }
-       return *a.ClosedAt
-}
-
-// GetClosedBy returns the ClosedBy field.
-func (a *Alert) GetClosedBy() *User {
-       if a == nil {
-               return nil
-       }
-       return a.ClosedBy
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (a *Alert) GetCreatedAt() Timestamp {
-       if a == nil || a.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *a.CreatedAt
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (a *Alert) GetHTMLURL() string {
-       if a == nil || a.HTMLURL == nil {
-               return ""
-       }
-       return *a.HTMLURL
-}
-
-// GetOpen returns the Open field if it's non-nil, zero value otherwise.
-func (a *Alert) GetOpen() bool {
-       if a == nil || a.Open == nil {
-               return false
-       }
-       return *a.Open
-}
-
-// GetRuleDescription returns the RuleDescription field if it's non-nil, zero value otherwise.
-func (a *Alert) GetRuleDescription() string {
-       if a == nil || a.RuleDescription == nil {
-               return ""
-       }
-       return *a.RuleDescription
-}
-
-// GetRuleID returns the RuleID field if it's non-nil, zero value otherwise.
-func (a *Alert) GetRuleID() string {
-       if a == nil || a.RuleID == nil {
-               return ""
-       }
-       return *a.RuleID
-}
-
-// GetRuleSeverity returns the RuleSeverity field if it's non-nil, zero value otherwise.
-func (a *Alert) GetRuleSeverity() string {
-       if a == nil || a.RuleSeverity == nil {
-               return ""
-       }
-       return *a.RuleSeverity
-}
-
-// GetTool returns the Tool field if it's non-nil, zero value otherwise.
-func (a *Alert) GetTool() string {
-       if a == nil || a.Tool == nil {
-               return ""
-       }
-       return *a.Tool
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (a *Alert) GetURL() string {
-       if a == nil || a.URL == nil {
-               return ""
-       }
-       return *a.URL
-}
-
-// GetVerifiablePasswordAuthentication returns the VerifiablePasswordAuthentication field if it's non-nil, zero value otherwise.
-func (a *APIMeta) GetVerifiablePasswordAuthentication() bool {
-       if a == nil || a.VerifiablePasswordAuthentication == nil {
-               return false
-       }
-       return *a.VerifiablePasswordAuthentication
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (a *App) GetCreatedAt() Timestamp {
-       if a == nil || a.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *a.CreatedAt
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (a *App) GetDescription() string {
-       if a == nil || a.Description == nil {
-               return ""
-       }
-       return *a.Description
-}
-
-// GetExternalURL returns the ExternalURL field if it's non-nil, zero value otherwise.
-func (a *App) GetExternalURL() string {
-       if a == nil || a.ExternalURL == nil {
-               return ""
-       }
-       return *a.ExternalURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (a *App) GetHTMLURL() string {
-       if a == nil || a.HTMLURL == nil {
-               return ""
-       }
-       return *a.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (a *App) GetID() int64 {
-       if a == nil || a.ID == nil {
-               return 0
-       }
-       return *a.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (a *App) GetName() string {
-       if a == nil || a.Name == nil {
-               return ""
-       }
-       return *a.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (a *App) GetNodeID() string {
-       if a == nil || a.NodeID == nil {
-               return ""
-       }
-       return *a.NodeID
-}
-
-// GetOwner returns the Owner field.
-func (a *App) GetOwner() *User {
-       if a == nil {
-               return nil
-       }
-       return a.Owner
-}
-
-// GetPermissions returns the Permissions field.
-func (a *App) GetPermissions() *InstallationPermissions {
-       if a == nil {
-               return nil
-       }
-       return a.Permissions
-}
-
-// GetSlug returns the Slug field if it's non-nil, zero value otherwise.
-func (a *App) GetSlug() string {
-       if a == nil || a.Slug == nil {
-               return ""
-       }
-       return *a.Slug
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (a *App) GetUpdatedAt() Timestamp {
-       if a == nil || a.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *a.UpdatedAt
-}
-
-// GetClientID returns the ClientID field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetClientID() string {
-       if a == nil || a.ClientID == nil {
-               return ""
-       }
-       return *a.ClientID
-}
-
-// GetClientSecret returns the ClientSecret field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetClientSecret() string {
-       if a == nil || a.ClientSecret == nil {
-               return ""
-       }
-       return *a.ClientSecret
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetCreatedAt() Timestamp {
-       if a == nil || a.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *a.CreatedAt
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetDescription() string {
-       if a == nil || a.Description == nil {
-               return ""
-       }
-       return *a.Description
-}
-
-// GetExternalURL returns the ExternalURL field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetExternalURL() string {
-       if a == nil || a.ExternalURL == nil {
-               return ""
-       }
-       return *a.ExternalURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetHTMLURL() string {
-       if a == nil || a.HTMLURL == nil {
-               return ""
-       }
-       return *a.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetID() int64 {
-       if a == nil || a.ID == nil {
-               return 0
-       }
-       return *a.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetName() string {
-       if a == nil || a.Name == nil {
-               return ""
-       }
-       return *a.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetNodeID() string {
-       if a == nil || a.NodeID == nil {
-               return ""
-       }
-       return *a.NodeID
-}
-
-// GetOwner returns the Owner field.
-func (a *AppConfig) GetOwner() *User {
-       if a == nil {
-               return nil
-       }
-       return a.Owner
-}
-
-// GetPEM returns the PEM field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetPEM() string {
-       if a == nil || a.PEM == nil {
-               return ""
-       }
-       return *a.PEM
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetUpdatedAt() Timestamp {
-       if a == nil || a.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *a.UpdatedAt
-}
-
-// GetWebhookSecret returns the WebhookSecret field if it's non-nil, zero value otherwise.
-func (a *AppConfig) GetWebhookSecret() string {
-       if a == nil || a.WebhookSecret == nil {
-               return ""
-       }
-       return *a.WebhookSecret
-}
-
-// GetArchiveDownloadURL returns the ArchiveDownloadURL field if it's non-nil, zero value otherwise.
-func (a *Artifact) GetArchiveDownloadURL() string {
-       if a == nil || a.ArchiveDownloadURL == nil {
-               return ""
-       }
-       return *a.ArchiveDownloadURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (a *Artifact) GetCreatedAt() Timestamp {
-       if a == nil || a.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *a.CreatedAt
-}
-
-// GetExpired returns the Expired field if it's non-nil, zero value otherwise.
-func (a *Artifact) GetExpired() bool {
-       if a == nil || a.Expired == nil {
-               return false
-       }
-       return *a.Expired
-}
-
-// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
-func (a *Artifact) GetExpiresAt() Timestamp {
-       if a == nil || a.ExpiresAt == nil {
-               return Timestamp{}
-       }
-       return *a.ExpiresAt
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (a *Artifact) GetID() int64 {
-       if a == nil || a.ID == nil {
-               return 0
-       }
-       return *a.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (a *Artifact) GetName() string {
-       if a == nil || a.Name == nil {
-               return ""
-       }
-       return *a.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (a *Artifact) GetNodeID() string {
-       if a == nil || a.NodeID == nil {
-               return ""
-       }
-       return *a.NodeID
-}
-
-// GetSizeInBytes returns the SizeInBytes field if it's non-nil, zero value otherwise.
-func (a *Artifact) GetSizeInBytes() int64 {
-       if a == nil || a.SizeInBytes == nil {
-               return 0
-       }
-       return *a.SizeInBytes
-}
-
-// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
-func (a *ArtifactList) GetTotalCount() int64 {
-       if a == nil || a.TotalCount == nil {
-               return 0
-       }
-       return *a.TotalCount
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (a *Attachment) GetBody() string {
-       if a == nil || a.Body == nil {
-               return ""
-       }
-       return *a.Body
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (a *Attachment) GetID() int64 {
-       if a == nil || a.ID == nil {
-               return 0
-       }
-       return *a.ID
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (a *Attachment) GetTitle() string {
-       if a == nil || a.Title == nil {
-               return ""
-       }
-       return *a.Title
-}
-
-// GetApp returns the App field.
-func (a *Authorization) GetApp() *AuthorizationApp {
-       if a == nil {
-               return nil
-       }
-       return a.App
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (a *Authorization) GetCreatedAt() Timestamp {
-       if a == nil || a.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *a.CreatedAt
-}
-
-// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise.
-func (a *Authorization) GetFingerprint() string {
-       if a == nil || a.Fingerprint == nil {
-               return ""
-       }
-       return *a.Fingerprint
-}
-
-// GetHashedToken returns the HashedToken field if it's non-nil, zero value otherwise.
-func (a *Authorization) GetHashedToken() string {
-       if a == nil || a.HashedToken == nil {
-               return ""
-       }
-       return *a.HashedToken
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (a *Authorization) GetID() int64 {
-       if a == nil || a.ID == nil {
-               return 0
-       }
-       return *a.ID
-}
-
-// GetNote returns the Note field if it's non-nil, zero value otherwise.
-func (a *Authorization) GetNote() string {
-       if a == nil || a.Note == nil {
-               return ""
-       }
-       return *a.Note
-}
-
-// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise.
-func (a *Authorization) GetNoteURL() string {
-       if a == nil || a.NoteURL == nil {
-               return ""
-       }
-       return *a.NoteURL
-}
-
-// GetToken returns the Token field if it's non-nil, zero value otherwise.
-func (a *Authorization) GetToken() string {
-       if a == nil || a.Token == nil {
-               return ""
-       }
-       return *a.Token
-}
-
-// GetTokenLastEight returns the TokenLastEight field if it's non-nil, zero value otherwise.
-func (a *Authorization) GetTokenLastEight() string {
-       if a == nil || a.TokenLastEight == nil {
-               return ""
-       }
-       return *a.TokenLastEight
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (a *Authorization) GetUpdatedAt() Timestamp {
-       if a == nil || a.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *a.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (a *Authorization) GetURL() string {
-       if a == nil || a.URL == nil {
-               return ""
-       }
-       return *a.URL
-}
-
-// GetUser returns the User field.
-func (a *Authorization) GetUser() *User {
-       if a == nil {
-               return nil
-       }
-       return a.User
-}
-
-// GetClientID returns the ClientID field if it's non-nil, zero value otherwise.
-func (a *AuthorizationApp) GetClientID() string {
-       if a == nil || a.ClientID == nil {
-               return ""
-       }
-       return *a.ClientID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (a *AuthorizationApp) GetName() string {
-       if a == nil || a.Name == nil {
-               return ""
-       }
-       return *a.Name
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (a *AuthorizationApp) GetURL() string {
-       if a == nil || a.URL == nil {
-               return ""
-       }
-       return *a.URL
-}
-
-// GetClientID returns the ClientID field if it's non-nil, zero value otherwise.
-func (a *AuthorizationRequest) GetClientID() string {
-       if a == nil || a.ClientID == nil {
-               return ""
-       }
-       return *a.ClientID
-}
-
-// GetClientSecret returns the ClientSecret field if it's non-nil, zero value otherwise.
-func (a *AuthorizationRequest) GetClientSecret() string {
-       if a == nil || a.ClientSecret == nil {
-               return ""
-       }
-       return *a.ClientSecret
-}
-
-// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise.
-func (a *AuthorizationRequest) GetFingerprint() string {
-       if a == nil || a.Fingerprint == nil {
-               return ""
-       }
-       return *a.Fingerprint
-}
-
-// GetNote returns the Note field if it's non-nil, zero value otherwise.
-func (a *AuthorizationRequest) GetNote() string {
-       if a == nil || a.Note == nil {
-               return ""
-       }
-       return *a.Note
-}
-
-// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise.
-func (a *AuthorizationRequest) GetNoteURL() string {
-       if a == nil || a.NoteURL == nil {
-               return ""
-       }
-       return *a.NoteURL
-}
-
-// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise.
-func (a *AuthorizationUpdateRequest) GetFingerprint() string {
-       if a == nil || a.Fingerprint == nil {
-               return ""
-       }
-       return *a.Fingerprint
-}
-
-// GetNote returns the Note field if it's non-nil, zero value otherwise.
-func (a *AuthorizationUpdateRequest) GetNote() string {
-       if a == nil || a.Note == nil {
-               return ""
-       }
-       return *a.Note
-}
-
-// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise.
-func (a *AuthorizationUpdateRequest) GetNoteURL() string {
-       if a == nil || a.NoteURL == nil {
-               return ""
-       }
-       return *a.NoteURL
-}
-
-// GetAppID returns the AppID field if it's non-nil, zero value otherwise.
-func (a *AutoTriggerCheck) GetAppID() int64 {
-       if a == nil || a.AppID == nil {
-               return 0
-       }
-       return *a.AppID
-}
-
-// GetSetting returns the Setting field if it's non-nil, zero value otherwise.
-func (a *AutoTriggerCheck) GetSetting() bool {
-       if a == nil || a.Setting == nil {
-               return false
-       }
-       return *a.Setting
-}
-
-// GetContent returns the Content field if it's non-nil, zero value otherwise.
-func (b *Blob) GetContent() string {
-       if b == nil || b.Content == nil {
-               return ""
-       }
-       return *b.Content
-}
-
-// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise.
-func (b *Blob) GetEncoding() string {
-       if b == nil || b.Encoding == nil {
-               return ""
-       }
-       return *b.Encoding
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (b *Blob) GetNodeID() string {
-       if b == nil || b.NodeID == nil {
-               return ""
-       }
-       return *b.NodeID
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (b *Blob) GetSHA() string {
-       if b == nil || b.SHA == nil {
-               return ""
-       }
-       return *b.SHA
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (b *Blob) GetSize() int {
-       if b == nil || b.Size == nil {
-               return 0
-       }
-       return *b.Size
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (b *Blob) GetURL() string {
-       if b == nil || b.URL == nil {
-               return ""
-       }
-       return *b.URL
-}
-
-// GetCommit returns the Commit field.
-func (b *Branch) GetCommit() *RepositoryCommit {
-       if b == nil {
-               return nil
-       }
-       return b.Commit
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (b *Branch) GetName() string {
-       if b == nil || b.Name == nil {
-               return ""
-       }
-       return *b.Name
-}
-
-// GetProtected returns the Protected field if it's non-nil, zero value otherwise.
-func (b *Branch) GetProtected() bool {
-       if b == nil || b.Protected == nil {
-               return false
-       }
-       return *b.Protected
-}
-
-// GetCommit returns the Commit field.
-func (b *BranchCommit) GetCommit() *Commit {
-       if b == nil {
-               return nil
-       }
-       return b.Commit
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (b *BranchCommit) GetName() string {
-       if b == nil || b.Name == nil {
-               return ""
-       }
-       return *b.Name
-}
-
-// GetProtected returns the Protected field if it's non-nil, zero value otherwise.
-func (b *BranchCommit) GetProtected() bool {
-       if b == nil || b.Protected == nil {
-               return false
-       }
-       return *b.Protected
-}
-
-// GetProtected returns the Protected field if it's non-nil, zero value otherwise.
-func (b *BranchListOptions) GetProtected() bool {
-       if b == nil || b.Protected == nil {
-               return false
-       }
-       return *b.Protected
-}
-
-// GetApp returns the App field.
-func (c *CheckRun) GetApp() *App {
-       if c == nil {
-               return nil
-       }
-       return c.App
-}
-
-// GetCheckSuite returns the CheckSuite field.
-func (c *CheckRun) GetCheckSuite() *CheckSuite {
-       if c == nil {
-               return nil
-       }
-       return c.CheckSuite
-}
-
-// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetCompletedAt() Timestamp {
-       if c == nil || c.CompletedAt == nil {
-               return Timestamp{}
-       }
-       return *c.CompletedAt
-}
-
-// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetConclusion() string {
-       if c == nil || c.Conclusion == nil {
-               return ""
-       }
-       return *c.Conclusion
-}
-
-// GetDetailsURL returns the DetailsURL field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetDetailsURL() string {
-       if c == nil || c.DetailsURL == nil {
-               return ""
-       }
-       return *c.DetailsURL
-}
-
-// GetExternalID returns the ExternalID field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetExternalID() string {
-       if c == nil || c.ExternalID == nil {
-               return ""
-       }
-       return *c.ExternalID
-}
-
-// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetHeadSHA() string {
-       if c == nil || c.HeadSHA == nil {
-               return ""
-       }
-       return *c.HeadSHA
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetHTMLURL() string {
-       if c == nil || c.HTMLURL == nil {
-               return ""
-       }
-       return *c.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetID() int64 {
-       if c == nil || c.ID == nil {
-               return 0
-       }
-       return *c.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetName() string {
-       if c == nil || c.Name == nil {
-               return ""
-       }
-       return *c.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetNodeID() string {
-       if c == nil || c.NodeID == nil {
-               return ""
-       }
-       return *c.NodeID
-}
-
-// GetOutput returns the Output field.
-func (c *CheckRun) GetOutput() *CheckRunOutput {
-       if c == nil {
-               return nil
-       }
-       return c.Output
-}
-
-// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetStartedAt() Timestamp {
-       if c == nil || c.StartedAt == nil {
-               return Timestamp{}
-       }
-       return *c.StartedAt
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetStatus() string {
-       if c == nil || c.Status == nil {
-               return ""
-       }
-       return *c.Status
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (c *CheckRun) GetURL() string {
-       if c == nil || c.URL == nil {
-               return ""
-       }
-       return *c.URL
-}
-
-// GetAnnotationLevel returns the AnnotationLevel field if it's non-nil, zero value otherwise.
-func (c *CheckRunAnnotation) GetAnnotationLevel() string {
-       if c == nil || c.AnnotationLevel == nil {
-               return ""
-       }
-       return *c.AnnotationLevel
-}
-
-// GetEndColumn returns the EndColumn field if it's non-nil, zero value otherwise.
-func (c *CheckRunAnnotation) GetEndColumn() int {
-       if c == nil || c.EndColumn == nil {
-               return 0
-       }
-       return *c.EndColumn
-}
-
-// GetEndLine returns the EndLine field if it's non-nil, zero value otherwise.
-func (c *CheckRunAnnotation) GetEndLine() int {
-       if c == nil || c.EndLine == nil {
-               return 0
-       }
-       return *c.EndLine
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (c *CheckRunAnnotation) GetMessage() string {
-       if c == nil || c.Message == nil {
-               return ""
-       }
-       return *c.Message
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (c *CheckRunAnnotation) GetPath() string {
-       if c == nil || c.Path == nil {
-               return ""
-       }
-       return *c.Path
-}
-
-// GetRawDetails returns the RawDetails field if it's non-nil, zero value otherwise.
-func (c *CheckRunAnnotation) GetRawDetails() string {
-       if c == nil || c.RawDetails == nil {
-               return ""
-       }
-       return *c.RawDetails
-}
-
-// GetStartColumn returns the StartColumn field if it's non-nil, zero value otherwise.
-func (c *CheckRunAnnotation) GetStartColumn() int {
-       if c == nil || c.StartColumn == nil {
-               return 0
-       }
-       return *c.StartColumn
-}
-
-// GetStartLine returns the StartLine field if it's non-nil, zero value otherwise.
-func (c *CheckRunAnnotation) GetStartLine() int {
-       if c == nil || c.StartLine == nil {
-               return 0
-       }
-       return *c.StartLine
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (c *CheckRunAnnotation) GetTitle() string {
-       if c == nil || c.Title == nil {
-               return ""
-       }
-       return *c.Title
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (c *CheckRunEvent) GetAction() string {
-       if c == nil || c.Action == nil {
-               return ""
-       }
-       return *c.Action
-}
-
-// GetCheckRun returns the CheckRun field.
-func (c *CheckRunEvent) GetCheckRun() *CheckRun {
-       if c == nil {
-               return nil
-       }
-       return c.CheckRun
-}
-
-// GetInstallation returns the Installation field.
-func (c *CheckRunEvent) GetInstallation() *Installation {
-       if c == nil {
-               return nil
-       }
-       return c.Installation
-}
-
-// GetOrg returns the Org field.
-func (c *CheckRunEvent) GetOrg() *Organization {
-       if c == nil {
-               return nil
-       }
-       return c.Org
-}
-
-// GetRepo returns the Repo field.
-func (c *CheckRunEvent) GetRepo() *Repository {
-       if c == nil {
-               return nil
-       }
-       return c.Repo
-}
-
-// GetRequestedAction returns the RequestedAction field.
-func (c *CheckRunEvent) GetRequestedAction() *RequestedAction {
-       if c == nil {
-               return nil
-       }
-       return c.RequestedAction
-}
-
-// GetSender returns the Sender field.
-func (c *CheckRunEvent) GetSender() *User {
-       if c == nil {
-               return nil
-       }
-       return c.Sender
-}
-
-// GetAlt returns the Alt field if it's non-nil, zero value otherwise.
-func (c *CheckRunImage) GetAlt() string {
-       if c == nil || c.Alt == nil {
-               return ""
-       }
-       return *c.Alt
-}
-
-// GetCaption returns the Caption field if it's non-nil, zero value otherwise.
-func (c *CheckRunImage) GetCaption() string {
-       if c == nil || c.Caption == nil {
-               return ""
-       }
-       return *c.Caption
-}
-
-// GetImageURL returns the ImageURL field if it's non-nil, zero value otherwise.
-func (c *CheckRunImage) GetImageURL() string {
-       if c == nil || c.ImageURL == nil {
-               return ""
-       }
-       return *c.ImageURL
-}
-
-// GetAnnotationsCount returns the AnnotationsCount field if it's non-nil, zero value otherwise.
-func (c *CheckRunOutput) GetAnnotationsCount() int {
-       if c == nil || c.AnnotationsCount == nil {
-               return 0
-       }
-       return *c.AnnotationsCount
-}
-
-// GetAnnotationsURL returns the AnnotationsURL field if it's non-nil, zero value otherwise.
-func (c *CheckRunOutput) GetAnnotationsURL() string {
-       if c == nil || c.AnnotationsURL == nil {
-               return ""
-       }
-       return *c.AnnotationsURL
-}
-
-// GetSummary returns the Summary field if it's non-nil, zero value otherwise.
-func (c *CheckRunOutput) GetSummary() string {
-       if c == nil || c.Summary == nil {
-               return ""
-       }
-       return *c.Summary
-}
-
-// GetText returns the Text field if it's non-nil, zero value otherwise.
-func (c *CheckRunOutput) GetText() string {
-       if c == nil || c.Text == nil {
-               return ""
-       }
-       return *c.Text
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (c *CheckRunOutput) GetTitle() string {
-       if c == nil || c.Title == nil {
-               return ""
-       }
-       return *c.Title
-}
-
-// GetAfterSHA returns the AfterSHA field if it's non-nil, zero value otherwise.
-func (c *CheckSuite) GetAfterSHA() string {
-       if c == nil || c.AfterSHA == nil {
-               return ""
-       }
-       return *c.AfterSHA
-}
-
-// GetApp returns the App field.
-func (c *CheckSuite) GetApp() *App {
-       if c == nil {
-               return nil
-       }
-       return c.App
-}
-
-// GetBeforeSHA returns the BeforeSHA field if it's non-nil, zero value otherwise.
-func (c *CheckSuite) GetBeforeSHA() string {
-       if c == nil || c.BeforeSHA == nil {
-               return ""
-       }
-       return *c.BeforeSHA
-}
-
-// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
-func (c *CheckSuite) GetConclusion() string {
-       if c == nil || c.Conclusion == nil {
-               return ""
-       }
-       return *c.Conclusion
-}
-
-// GetHeadBranch returns the HeadBranch field if it's non-nil, zero value otherwise.
-func (c *CheckSuite) GetHeadBranch() string {
-       if c == nil || c.HeadBranch == nil {
-               return ""
-       }
-       return *c.HeadBranch
-}
-
-// GetHeadCommit returns the HeadCommit field.
-func (c *CheckSuite) GetHeadCommit() *Commit {
-       if c == nil {
-               return nil
-       }
-       return c.HeadCommit
-}
-
-// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
-func (c *CheckSuite) GetHeadSHA() string {
-       if c == nil || c.HeadSHA == nil {
-               return ""
-       }
-       return *c.HeadSHA
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (c *CheckSuite) GetID() int64 {
-       if c == nil || c.ID == nil {
-               return 0
-       }
-       return *c.ID
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (c *CheckSuite) GetNodeID() string {
-       if c == nil || c.NodeID == nil {
-               return ""
-       }
-       return *c.NodeID
-}
-
-// GetRepository returns the Repository field.
-func (c *CheckSuite) GetRepository() *Repository {
-       if c == nil {
-               return nil
-       }
-       return c.Repository
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (c *CheckSuite) GetStatus() string {
-       if c == nil || c.Status == nil {
-               return ""
-       }
-       return *c.Status
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (c *CheckSuite) GetURL() string {
-       if c == nil || c.URL == nil {
-               return ""
-       }
-       return *c.URL
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (c *CheckSuiteEvent) GetAction() string {
-       if c == nil || c.Action == nil {
-               return ""
-       }
-       return *c.Action
-}
-
-// GetCheckSuite returns the CheckSuite field.
-func (c *CheckSuiteEvent) GetCheckSuite() *CheckSuite {
-       if c == nil {
-               return nil
-       }
-       return c.CheckSuite
-}
-
-// GetInstallation returns the Installation field.
-func (c *CheckSuiteEvent) GetInstallation() *Installation {
-       if c == nil {
-               return nil
-       }
-       return c.Installation
-}
-
-// GetOrg returns the Org field.
-func (c *CheckSuiteEvent) GetOrg() *Organization {
-       if c == nil {
-               return nil
-       }
-       return c.Org
-}
-
-// GetRepo returns the Repo field.
-func (c *CheckSuiteEvent) GetRepo() *Repository {
-       if c == nil {
-               return nil
-       }
-       return c.Repo
-}
-
-// GetSender returns the Sender field.
-func (c *CheckSuiteEvent) GetSender() *User {
-       if c == nil {
-               return nil
-       }
-       return c.Sender
-}
-
-// GetPreferences returns the Preferences field.
-func (c *CheckSuitePreferenceResults) GetPreferences() *PreferenceList {
-       if c == nil {
-               return nil
-       }
-       return c.Preferences
-}
-
-// GetRepository returns the Repository field.
-func (c *CheckSuitePreferenceResults) GetRepository() *Repository {
-       if c == nil {
-               return nil
-       }
-       return c.Repository
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (c *CodeOfConduct) GetBody() string {
-       if c == nil || c.Body == nil {
-               return ""
-       }
-       return *c.Body
-}
-
-// GetKey returns the Key field if it's non-nil, zero value otherwise.
-func (c *CodeOfConduct) GetKey() string {
-       if c == nil || c.Key == nil {
-               return ""
-       }
-       return *c.Key
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (c *CodeOfConduct) GetName() string {
-       if c == nil || c.Name == nil {
-               return ""
-       }
-       return *c.Name
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (c *CodeOfConduct) GetURL() string {
-       if c == nil || c.URL == nil {
-               return ""
-       }
-       return *c.URL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (c *CodeResult) GetHTMLURL() string {
-       if c == nil || c.HTMLURL == nil {
-               return ""
-       }
-       return *c.HTMLURL
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (c *CodeResult) GetName() string {
-       if c == nil || c.Name == nil {
-               return ""
-       }
-       return *c.Name
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (c *CodeResult) GetPath() string {
-       if c == nil || c.Path == nil {
-               return ""
-       }
-       return *c.Path
-}
-
-// GetRepository returns the Repository field.
-func (c *CodeResult) GetRepository() *Repository {
-       if c == nil {
-               return nil
-       }
-       return c.Repository
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (c *CodeResult) GetSHA() string {
-       if c == nil || c.SHA == nil {
-               return ""
-       }
-       return *c.SHA
-}
-
-// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
-func (c *CodeSearchResult) GetIncompleteResults() bool {
-       if c == nil || c.IncompleteResults == nil {
-               return false
-       }
-       return *c.IncompleteResults
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (c *CodeSearchResult) GetTotal() int {
-       if c == nil || c.Total == nil {
-               return 0
-       }
-       return *c.Total
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (c *CollaboratorInvitation) GetCreatedAt() Timestamp {
-       if c == nil || c.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *c.CreatedAt
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (c *CollaboratorInvitation) GetHTMLURL() string {
-       if c == nil || c.HTMLURL == nil {
-               return ""
-       }
-       return *c.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (c *CollaboratorInvitation) GetID() int64 {
-       if c == nil || c.ID == nil {
-               return 0
-       }
-       return *c.ID
-}
-
-// GetInvitee returns the Invitee field.
-func (c *CollaboratorInvitation) GetInvitee() *User {
-       if c == nil {
-               return nil
-       }
-       return c.Invitee
-}
-
-// GetInviter returns the Inviter field.
-func (c *CollaboratorInvitation) GetInviter() *User {
-       if c == nil {
-               return nil
-       }
-       return c.Inviter
-}
-
-// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise.
-func (c *CollaboratorInvitation) GetPermissions() string {
-       if c == nil || c.Permissions == nil {
-               return ""
-       }
-       return *c.Permissions
-}
-
-// GetRepo returns the Repo field.
-func (c *CollaboratorInvitation) GetRepo() *Repository {
-       if c == nil {
-               return nil
-       }
-       return c.Repo
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (c *CollaboratorInvitation) GetURL() string {
-       if c == nil || c.URL == nil {
-               return ""
-       }
-       return *c.URL
-}
-
-// GetCommitURL returns the CommitURL field if it's non-nil, zero value otherwise.
-func (c *CombinedStatus) GetCommitURL() string {
-       if c == nil || c.CommitURL == nil {
-               return ""
-       }
-       return *c.CommitURL
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (c *CombinedStatus) GetName() string {
-       if c == nil || c.Name == nil {
-               return ""
-       }
-       return *c.Name
-}
-
-// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
-func (c *CombinedStatus) GetRepositoryURL() string {
-       if c == nil || c.RepositoryURL == nil {
-               return ""
-       }
-       return *c.RepositoryURL
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (c *CombinedStatus) GetSHA() string {
-       if c == nil || c.SHA == nil {
-               return ""
-       }
-       return *c.SHA
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (c *CombinedStatus) GetState() string {
-       if c == nil || c.State == nil {
-               return ""
-       }
-       return *c.State
-}
-
-// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
-func (c *CombinedStatus) GetTotalCount() int {
-       if c == nil || c.TotalCount == nil {
-               return 0
-       }
-       return *c.TotalCount
-}
-
-// GetTotalCommitComments returns the TotalCommitComments field if it's non-nil, zero value otherwise.
-func (c *CommentStats) GetTotalCommitComments() int {
-       if c == nil || c.TotalCommitComments == nil {
-               return 0
-       }
-       return *c.TotalCommitComments
-}
-
-// GetTotalGistComments returns the TotalGistComments field if it's non-nil, zero value otherwise.
-func (c *CommentStats) GetTotalGistComments() int {
-       if c == nil || c.TotalGistComments == nil {
-               return 0
-       }
-       return *c.TotalGistComments
-}
-
-// GetTotalIssueComments returns the TotalIssueComments field if it's non-nil, zero value otherwise.
-func (c *CommentStats) GetTotalIssueComments() int {
-       if c == nil || c.TotalIssueComments == nil {
-               return 0
-       }
-       return *c.TotalIssueComments
-}
-
-// GetTotalPullRequestComments returns the TotalPullRequestComments field if it's non-nil, zero value otherwise.
-func (c *CommentStats) GetTotalPullRequestComments() int {
-       if c == nil || c.TotalPullRequestComments == nil {
-               return 0
-       }
-       return *c.TotalPullRequestComments
-}
-
-// GetAuthor returns the Author field.
-func (c *Commit) GetAuthor() *CommitAuthor {
-       if c == nil {
-               return nil
-       }
-       return c.Author
-}
-
-// GetCommentCount returns the CommentCount field if it's non-nil, zero value otherwise.
-func (c *Commit) GetCommentCount() int {
-       if c == nil || c.CommentCount == nil {
-               return 0
-       }
-       return *c.CommentCount
-}
-
-// GetCommitter returns the Committer field.
-func (c *Commit) GetCommitter() *CommitAuthor {
-       if c == nil {
-               return nil
-       }
-       return c.Committer
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (c *Commit) GetHTMLURL() string {
-       if c == nil || c.HTMLURL == nil {
-               return ""
-       }
-       return *c.HTMLURL
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (c *Commit) GetMessage() string {
-       if c == nil || c.Message == nil {
-               return ""
-       }
-       return *c.Message
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (c *Commit) GetNodeID() string {
-       if c == nil || c.NodeID == nil {
-               return ""
-       }
-       return *c.NodeID
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (c *Commit) GetSHA() string {
-       if c == nil || c.SHA == nil {
-               return ""
-       }
-       return *c.SHA
-}
-
-// GetStats returns the Stats field.
-func (c *Commit) GetStats() *CommitStats {
-       if c == nil {
-               return nil
-       }
-       return c.Stats
-}
-
-// GetTree returns the Tree field.
-func (c *Commit) GetTree() *Tree {
-       if c == nil {
-               return nil
-       }
-       return c.Tree
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (c *Commit) GetURL() string {
-       if c == nil || c.URL == nil {
-               return ""
-       }
-       return *c.URL
-}
-
-// GetVerification returns the Verification field.
-func (c *Commit) GetVerification() *SignatureVerification {
-       if c == nil {
-               return nil
-       }
-       return c.Verification
-}
-
-// GetDate returns the Date field if it's non-nil, zero value otherwise.
-func (c *CommitAuthor) GetDate() time.Time {
-       if c == nil || c.Date == nil {
-               return time.Time{}
-       }
-       return *c.Date
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (c *CommitAuthor) GetEmail() string {
-       if c == nil || c.Email == nil {
-               return ""
-       }
-       return *c.Email
-}
-
-// GetLogin returns the Login field if it's non-nil, zero value otherwise.
-func (c *CommitAuthor) GetLogin() string {
-       if c == nil || c.Login == nil {
-               return ""
-       }
-       return *c.Login
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (c *CommitAuthor) GetName() string {
-       if c == nil || c.Name == nil {
-               return ""
-       }
-       return *c.Name
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (c *CommitCommentEvent) GetAction() string {
-       if c == nil || c.Action == nil {
-               return ""
-       }
-       return *c.Action
-}
-
-// GetComment returns the Comment field.
-func (c *CommitCommentEvent) GetComment() *RepositoryComment {
-       if c == nil {
-               return nil
-       }
-       return c.Comment
-}
-
-// GetInstallation returns the Installation field.
-func (c *CommitCommentEvent) GetInstallation() *Installation {
-       if c == nil {
-               return nil
-       }
-       return c.Installation
-}
-
-// GetRepo returns the Repo field.
-func (c *CommitCommentEvent) GetRepo() *Repository {
-       if c == nil {
-               return nil
-       }
-       return c.Repo
-}
-
-// GetSender returns the Sender field.
-func (c *CommitCommentEvent) GetSender() *User {
-       if c == nil {
-               return nil
-       }
-       return c.Sender
-}
-
-// GetAdditions returns the Additions field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetAdditions() int {
-       if c == nil || c.Additions == nil {
-               return 0
-       }
-       return *c.Additions
-}
-
-// GetBlobURL returns the BlobURL field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetBlobURL() string {
-       if c == nil || c.BlobURL == nil {
-               return ""
-       }
-       return *c.BlobURL
-}
-
-// GetChanges returns the Changes field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetChanges() int {
-       if c == nil || c.Changes == nil {
-               return 0
-       }
-       return *c.Changes
-}
-
-// GetContentsURL returns the ContentsURL field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetContentsURL() string {
-       if c == nil || c.ContentsURL == nil {
-               return ""
-       }
-       return *c.ContentsURL
-}
-
-// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetDeletions() int {
-       if c == nil || c.Deletions == nil {
-               return 0
-       }
-       return *c.Deletions
-}
-
-// GetFilename returns the Filename field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetFilename() string {
-       if c == nil || c.Filename == nil {
-               return ""
-       }
-       return *c.Filename
-}
-
-// GetPatch returns the Patch field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetPatch() string {
-       if c == nil || c.Patch == nil {
-               return ""
-       }
-       return *c.Patch
-}
-
-// GetPreviousFilename returns the PreviousFilename field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetPreviousFilename() string {
-       if c == nil || c.PreviousFilename == nil {
-               return ""
-       }
-       return *c.PreviousFilename
-}
-
-// GetRawURL returns the RawURL field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetRawURL() string {
-       if c == nil || c.RawURL == nil {
-               return ""
-       }
-       return *c.RawURL
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetSHA() string {
-       if c == nil || c.SHA == nil {
-               return ""
-       }
-       return *c.SHA
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (c *CommitFile) GetStatus() string {
-       if c == nil || c.Status == nil {
-               return ""
-       }
-       return *c.Status
-}
-
-// GetAuthor returns the Author field.
-func (c *CommitResult) GetAuthor() *User {
-       if c == nil {
-               return nil
-       }
-       return c.Author
-}
-
-// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
-func (c *CommitResult) GetCommentsURL() string {
-       if c == nil || c.CommentsURL == nil {
-               return ""
-       }
-       return *c.CommentsURL
-}
-
-// GetCommit returns the Commit field.
-func (c *CommitResult) GetCommit() *Commit {
-       if c == nil {
-               return nil
-       }
-       return c.Commit
-}
-
-// GetCommitter returns the Committer field.
-func (c *CommitResult) GetCommitter() *User {
-       if c == nil {
-               return nil
-       }
-       return c.Committer
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (c *CommitResult) GetHTMLURL() string {
-       if c == nil || c.HTMLURL == nil {
-               return ""
-       }
-       return *c.HTMLURL
-}
-
-// GetRepository returns the Repository field.
-func (c *CommitResult) GetRepository() *Repository {
-       if c == nil {
-               return nil
-       }
-       return c.Repository
-}
-
-// GetScore returns the Score field.
-func (c *CommitResult) GetScore() *float64 {
-       if c == nil {
-               return nil
-       }
-       return c.Score
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (c *CommitResult) GetSHA() string {
-       if c == nil || c.SHA == nil {
-               return ""
-       }
-       return *c.SHA
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (c *CommitResult) GetURL() string {
-       if c == nil || c.URL == nil {
-               return ""
-       }
-       return *c.URL
-}
-
-// GetAheadBy returns the AheadBy field if it's non-nil, zero value otherwise.
-func (c *CommitsComparison) GetAheadBy() int {
-       if c == nil || c.AheadBy == nil {
-               return 0
-       }
-       return *c.AheadBy
-}
-
-// GetBaseCommit returns the BaseCommit field.
-func (c *CommitsComparison) GetBaseCommit() *RepositoryCommit {
-       if c == nil {
-               return nil
-       }
-       return c.BaseCommit
-}
-
-// GetBehindBy returns the BehindBy field if it's non-nil, zero value otherwise.
-func (c *CommitsComparison) GetBehindBy() int {
-       if c == nil || c.BehindBy == nil {
-               return 0
-       }
-       return *c.BehindBy
-}
-
-// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise.
-func (c *CommitsComparison) GetDiffURL() string {
-       if c == nil || c.DiffURL == nil {
-               return ""
-       }
-       return *c.DiffURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (c *CommitsComparison) GetHTMLURL() string {
-       if c == nil || c.HTMLURL == nil {
-               return ""
-       }
-       return *c.HTMLURL
-}
-
-// GetMergeBaseCommit returns the MergeBaseCommit field.
-func (c *CommitsComparison) GetMergeBaseCommit() *RepositoryCommit {
-       if c == nil {
-               return nil
-       }
-       return c.MergeBaseCommit
-}
-
-// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise.
-func (c *CommitsComparison) GetPatchURL() string {
-       if c == nil || c.PatchURL == nil {
-               return ""
-       }
-       return *c.PatchURL
-}
-
-// GetPermalinkURL returns the PermalinkURL field if it's non-nil, zero value otherwise.
-func (c *CommitsComparison) GetPermalinkURL() string {
-       if c == nil || c.PermalinkURL == nil {
-               return ""
-       }
-       return *c.PermalinkURL
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (c *CommitsComparison) GetStatus() string {
-       if c == nil || c.Status == nil {
-               return ""
-       }
-       return *c.Status
-}
-
-// GetTotalCommits returns the TotalCommits field if it's non-nil, zero value otherwise.
-func (c *CommitsComparison) GetTotalCommits() int {
-       if c == nil || c.TotalCommits == nil {
-               return 0
-       }
-       return *c.TotalCommits
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (c *CommitsComparison) GetURL() string {
-       if c == nil || c.URL == nil {
-               return ""
-       }
-       return *c.URL
-}
-
-// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
-func (c *CommitsSearchResult) GetIncompleteResults() bool {
-       if c == nil || c.IncompleteResults == nil {
-               return false
-       }
-       return *c.IncompleteResults
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (c *CommitsSearchResult) GetTotal() int {
-       if c == nil || c.Total == nil {
-               return 0
-       }
-       return *c.Total
-}
-
-// GetAdditions returns the Additions field if it's non-nil, zero value otherwise.
-func (c *CommitStats) GetAdditions() int {
-       if c == nil || c.Additions == nil {
-               return 0
-       }
-       return *c.Additions
-}
-
-// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise.
-func (c *CommitStats) GetDeletions() int {
-       if c == nil || c.Deletions == nil {
-               return 0
-       }
-       return *c.Deletions
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (c *CommitStats) GetTotal() int {
-       if c == nil || c.Total == nil {
-               return 0
-       }
-       return *c.Total
-}
-
-// GetCodeOfConduct returns the CodeOfConduct field.
-func (c *CommunityHealthFiles) GetCodeOfConduct() *Metric {
-       if c == nil {
-               return nil
-       }
-       return c.CodeOfConduct
-}
-
-// GetContributing returns the Contributing field.
-func (c *CommunityHealthFiles) GetContributing() *Metric {
-       if c == nil {
-               return nil
-       }
-       return c.Contributing
-}
-
-// GetIssueTemplate returns the IssueTemplate field.
-func (c *CommunityHealthFiles) GetIssueTemplate() *Metric {
-       if c == nil {
-               return nil
-       }
-       return c.IssueTemplate
-}
-
-// GetLicense returns the License field.
-func (c *CommunityHealthFiles) GetLicense() *Metric {
-       if c == nil {
-               return nil
-       }
-       return c.License
-}
-
-// GetPullRequestTemplate returns the PullRequestTemplate field.
-func (c *CommunityHealthFiles) GetPullRequestTemplate() *Metric {
-       if c == nil {
-               return nil
-       }
-       return c.PullRequestTemplate
-}
-
-// GetReadme returns the Readme field.
-func (c *CommunityHealthFiles) GetReadme() *Metric {
-       if c == nil {
-               return nil
-       }
-       return c.Readme
-}
-
-// GetFiles returns the Files field.
-func (c *CommunityHealthMetrics) GetFiles() *CommunityHealthFiles {
-       if c == nil {
-               return nil
-       }
-       return c.Files
-}
-
-// GetHealthPercentage returns the HealthPercentage field if it's non-nil, zero value otherwise.
-func (c *CommunityHealthMetrics) GetHealthPercentage() int {
-       if c == nil || c.HealthPercentage == nil {
-               return 0
-       }
-       return *c.HealthPercentage
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (c *CommunityHealthMetrics) GetUpdatedAt() time.Time {
-       if c == nil || c.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *c.UpdatedAt
-}
-
-// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetAvatarURL() string {
-       if c == nil || c.AvatarURL == nil {
-               return ""
-       }
-       return *c.AvatarURL
-}
-
-// GetContributions returns the Contributions field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetContributions() int {
-       if c == nil || c.Contributions == nil {
-               return 0
-       }
-       return *c.Contributions
-}
-
-// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetEventsURL() string {
-       if c == nil || c.EventsURL == nil {
-               return ""
-       }
-       return *c.EventsURL
-}
-
-// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetFollowersURL() string {
-       if c == nil || c.FollowersURL == nil {
-               return ""
-       }
-       return *c.FollowersURL
-}
-
-// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetFollowingURL() string {
-       if c == nil || c.FollowingURL == nil {
-               return ""
-       }
-       return *c.FollowingURL
-}
-
-// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetGistsURL() string {
-       if c == nil || c.GistsURL == nil {
-               return ""
-       }
-       return *c.GistsURL
-}
-
-// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetGravatarID() string {
-       if c == nil || c.GravatarID == nil {
-               return ""
-       }
-       return *c.GravatarID
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetHTMLURL() string {
-       if c == nil || c.HTMLURL == nil {
-               return ""
-       }
-       return *c.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetID() int64 {
-       if c == nil || c.ID == nil {
-               return 0
-       }
-       return *c.ID
-}
-
-// GetLogin returns the Login field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetLogin() string {
-       if c == nil || c.Login == nil {
-               return ""
-       }
-       return *c.Login
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetNodeID() string {
-       if c == nil || c.NodeID == nil {
-               return ""
-       }
-       return *c.NodeID
-}
-
-// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetOrganizationsURL() string {
-       if c == nil || c.OrganizationsURL == nil {
-               return ""
-       }
-       return *c.OrganizationsURL
-}
-
-// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetReceivedEventsURL() string {
-       if c == nil || c.ReceivedEventsURL == nil {
-               return ""
-       }
-       return *c.ReceivedEventsURL
-}
-
-// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetReposURL() string {
-       if c == nil || c.ReposURL == nil {
-               return ""
-       }
-       return *c.ReposURL
-}
-
-// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetSiteAdmin() bool {
-       if c == nil || c.SiteAdmin == nil {
-               return false
-       }
-       return *c.SiteAdmin
-}
-
-// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetStarredURL() string {
-       if c == nil || c.StarredURL == nil {
-               return ""
-       }
-       return *c.StarredURL
-}
-
-// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetSubscriptionsURL() string {
-       if c == nil || c.SubscriptionsURL == nil {
-               return ""
-       }
-       return *c.SubscriptionsURL
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetType() string {
-       if c == nil || c.Type == nil {
-               return ""
-       }
-       return *c.Type
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (c *Contributor) GetURL() string {
-       if c == nil || c.URL == nil {
-               return ""
-       }
-       return *c.URL
-}
-
-// GetAuthor returns the Author field.
-func (c *ContributorStats) GetAuthor() *Contributor {
-       if c == nil {
-               return nil
-       }
-       return c.Author
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (c *ContributorStats) GetTotal() int {
-       if c == nil || c.Total == nil {
-               return 0
-       }
-       return *c.Total
-}
-
-// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
-func (c *CreateCheckRunOptions) GetCompletedAt() Timestamp {
-       if c == nil || c.CompletedAt == nil {
-               return Timestamp{}
-       }
-       return *c.CompletedAt
-}
-
-// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
-func (c *CreateCheckRunOptions) GetConclusion() string {
-       if c == nil || c.Conclusion == nil {
-               return ""
-       }
-       return *c.Conclusion
-}
-
-// GetDetailsURL returns the DetailsURL field if it's non-nil, zero value otherwise.
-func (c *CreateCheckRunOptions) GetDetailsURL() string {
-       if c == nil || c.DetailsURL == nil {
-               return ""
-       }
-       return *c.DetailsURL
-}
-
-// GetExternalID returns the ExternalID field if it's non-nil, zero value otherwise.
-func (c *CreateCheckRunOptions) GetExternalID() string {
-       if c == nil || c.ExternalID == nil {
-               return ""
-       }
-       return *c.ExternalID
-}
-
-// GetOutput returns the Output field.
-func (c *CreateCheckRunOptions) GetOutput() *CheckRunOutput {
-       if c == nil {
-               return nil
-       }
-       return c.Output
-}
-
-// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
-func (c *CreateCheckRunOptions) GetStartedAt() Timestamp {
-       if c == nil || c.StartedAt == nil {
-               return Timestamp{}
-       }
-       return *c.StartedAt
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (c *CreateCheckRunOptions) GetStatus() string {
-       if c == nil || c.Status == nil {
-               return ""
-       }
-       return *c.Status
-}
-
-// GetHeadBranch returns the HeadBranch field if it's non-nil, zero value otherwise.
-func (c *CreateCheckSuiteOptions) GetHeadBranch() string {
-       if c == nil || c.HeadBranch == nil {
-               return ""
-       }
-       return *c.HeadBranch
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (c *CreateEvent) GetDescription() string {
-       if c == nil || c.Description == nil {
-               return ""
-       }
-       return *c.Description
-}
-
-// GetInstallation returns the Installation field.
-func (c *CreateEvent) GetInstallation() *Installation {
-       if c == nil {
-               return nil
-       }
-       return c.Installation
-}
-
-// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise.
-func (c *CreateEvent) GetMasterBranch() string {
-       if c == nil || c.MasterBranch == nil {
-               return ""
-       }
-       return *c.MasterBranch
-}
-
-// GetPusherType returns the PusherType field if it's non-nil, zero value otherwise.
-func (c *CreateEvent) GetPusherType() string {
-       if c == nil || c.PusherType == nil {
-               return ""
-       }
-       return *c.PusherType
-}
-
-// GetRef returns the Ref field if it's non-nil, zero value otherwise.
-func (c *CreateEvent) GetRef() string {
-       if c == nil || c.Ref == nil {
-               return ""
-       }
-       return *c.Ref
-}
-
-// GetRefType returns the RefType field if it's non-nil, zero value otherwise.
-func (c *CreateEvent) GetRefType() string {
-       if c == nil || c.RefType == nil {
-               return ""
-       }
-       return *c.RefType
-}
-
-// GetRepo returns the Repo field.
-func (c *CreateEvent) GetRepo() *Repository {
-       if c == nil {
-               return nil
-       }
-       return c.Repo
-}
-
-// GetSender returns the Sender field.
-func (c *CreateEvent) GetSender() *User {
-       if c == nil {
-               return nil
-       }
-       return c.Sender
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (c *CreateOrgInvitationOptions) GetEmail() string {
-       if c == nil || c.Email == nil {
-               return ""
-       }
-       return *c.Email
-}
-
-// GetInviteeID returns the InviteeID field if it's non-nil, zero value otherwise.
-func (c *CreateOrgInvitationOptions) GetInviteeID() int64 {
-       if c == nil || c.InviteeID == nil {
-               return 0
-       }
-       return *c.InviteeID
-}
-
-// GetRole returns the Role field if it's non-nil, zero value otherwise.
-func (c *CreateOrgInvitationOptions) GetRole() string {
-       if c == nil || c.Role == nil {
-               return ""
-       }
-       return *c.Role
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (c *CreateUserProjectOptions) GetBody() string {
-       if c == nil || c.Body == nil {
-               return ""
-       }
-       return *c.Body
-}
-
-// GetInstallation returns the Installation field.
-func (d *DeleteEvent) GetInstallation() *Installation {
-       if d == nil {
-               return nil
-       }
-       return d.Installation
-}
-
-// GetPusherType returns the PusherType field if it's non-nil, zero value otherwise.
-func (d *DeleteEvent) GetPusherType() string {
-       if d == nil || d.PusherType == nil {
-               return ""
-       }
-       return *d.PusherType
-}
-
-// GetRef returns the Ref field if it's non-nil, zero value otherwise.
-func (d *DeleteEvent) GetRef() string {
-       if d == nil || d.Ref == nil {
-               return ""
-       }
-       return *d.Ref
-}
-
-// GetRefType returns the RefType field if it's non-nil, zero value otherwise.
-func (d *DeleteEvent) GetRefType() string {
-       if d == nil || d.RefType == nil {
-               return ""
-       }
-       return *d.RefType
-}
-
-// GetRepo returns the Repo field.
-func (d *DeleteEvent) GetRepo() *Repository {
-       if d == nil {
-               return nil
-       }
-       return d.Repo
-}
-
-// GetSender returns the Sender field.
-func (d *DeleteEvent) GetSender() *User {
-       if d == nil {
-               return nil
-       }
-       return d.Sender
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (d *DeployKeyEvent) GetAction() string {
-       if d == nil || d.Action == nil {
-               return ""
-       }
-       return *d.Action
-}
-
-// GetKey returns the Key field.
-func (d *DeployKeyEvent) GetKey() *Key {
-       if d == nil {
-               return nil
-       }
-       return d.Key
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetCreatedAt() Timestamp {
-       if d == nil || d.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *d.CreatedAt
-}
-
-// GetCreator returns the Creator field.
-func (d *Deployment) GetCreator() *User {
-       if d == nil {
-               return nil
-       }
-       return d.Creator
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetDescription() string {
-       if d == nil || d.Description == nil {
-               return ""
-       }
-       return *d.Description
-}
-
-// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetEnvironment() string {
-       if d == nil || d.Environment == nil {
-               return ""
-       }
-       return *d.Environment
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetID() int64 {
-       if d == nil || d.ID == nil {
-               return 0
-       }
-       return *d.ID
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetNodeID() string {
-       if d == nil || d.NodeID == nil {
-               return ""
-       }
-       return *d.NodeID
-}
-
-// GetRef returns the Ref field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetRef() string {
-       if d == nil || d.Ref == nil {
-               return ""
-       }
-       return *d.Ref
-}
-
-// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetRepositoryURL() string {
-       if d == nil || d.RepositoryURL == nil {
-               return ""
-       }
-       return *d.RepositoryURL
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetSHA() string {
-       if d == nil || d.SHA == nil {
-               return ""
-       }
-       return *d.SHA
-}
-
-// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetStatusesURL() string {
-       if d == nil || d.StatusesURL == nil {
-               return ""
-       }
-       return *d.StatusesURL
-}
-
-// GetTask returns the Task field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetTask() string {
-       if d == nil || d.Task == nil {
-               return ""
-       }
-       return *d.Task
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetUpdatedAt() Timestamp {
-       if d == nil || d.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *d.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (d *Deployment) GetURL() string {
-       if d == nil || d.URL == nil {
-               return ""
-       }
-       return *d.URL
-}
-
-// GetDeployment returns the Deployment field.
-func (d *DeploymentEvent) GetDeployment() *Deployment {
-       if d == nil {
-               return nil
-       }
-       return d.Deployment
-}
-
-// GetInstallation returns the Installation field.
-func (d *DeploymentEvent) GetInstallation() *Installation {
-       if d == nil {
-               return nil
-       }
-       return d.Installation
-}
-
-// GetRepo returns the Repo field.
-func (d *DeploymentEvent) GetRepo() *Repository {
-       if d == nil {
-               return nil
-       }
-       return d.Repo
-}
-
-// GetSender returns the Sender field.
-func (d *DeploymentEvent) GetSender() *User {
-       if d == nil {
-               return nil
-       }
-       return d.Sender
-}
-
-// GetAutoMerge returns the AutoMerge field if it's non-nil, zero value otherwise.
-func (d *DeploymentRequest) GetAutoMerge() bool {
-       if d == nil || d.AutoMerge == nil {
-               return false
-       }
-       return *d.AutoMerge
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (d *DeploymentRequest) GetDescription() string {
-       if d == nil || d.Description == nil {
-               return ""
-       }
-       return *d.Description
-}
-
-// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise.
-func (d *DeploymentRequest) GetEnvironment() string {
-       if d == nil || d.Environment == nil {
-               return ""
-       }
-       return *d.Environment
-}
-
-// GetProductionEnvironment returns the ProductionEnvironment field if it's non-nil, zero value otherwise.
-func (d *DeploymentRequest) GetProductionEnvironment() bool {
-       if d == nil || d.ProductionEnvironment == nil {
-               return false
-       }
-       return *d.ProductionEnvironment
-}
-
-// GetRef returns the Ref field if it's non-nil, zero value otherwise.
-func (d *DeploymentRequest) GetRef() string {
-       if d == nil || d.Ref == nil {
-               return ""
-       }
-       return *d.Ref
-}
-
-// GetRequiredContexts returns the RequiredContexts field if it's non-nil, zero value otherwise.
-func (d *DeploymentRequest) GetRequiredContexts() []string {
-       if d == nil || d.RequiredContexts == nil {
-               return nil
-       }
-       return *d.RequiredContexts
-}
-
-// GetTask returns the Task field if it's non-nil, zero value otherwise.
-func (d *DeploymentRequest) GetTask() string {
-       if d == nil || d.Task == nil {
-               return ""
-       }
-       return *d.Task
-}
-
-// GetTransientEnvironment returns the TransientEnvironment field if it's non-nil, zero value otherwise.
-func (d *DeploymentRequest) GetTransientEnvironment() bool {
-       if d == nil || d.TransientEnvironment == nil {
-               return false
-       }
-       return *d.TransientEnvironment
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetCreatedAt() Timestamp {
-       if d == nil || d.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *d.CreatedAt
-}
-
-// GetCreator returns the Creator field.
-func (d *DeploymentStatus) GetCreator() *User {
-       if d == nil {
-               return nil
-       }
-       return d.Creator
-}
-
-// GetDeploymentURL returns the DeploymentURL field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetDeploymentURL() string {
-       if d == nil || d.DeploymentURL == nil {
-               return ""
-       }
-       return *d.DeploymentURL
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetDescription() string {
-       if d == nil || d.Description == nil {
-               return ""
-       }
-       return *d.Description
-}
-
-// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetEnvironment() string {
-       if d == nil || d.Environment == nil {
-               return ""
-       }
-       return *d.Environment
-}
-
-// GetEnvironmentURL returns the EnvironmentURL field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetEnvironmentURL() string {
-       if d == nil || d.EnvironmentURL == nil {
-               return ""
-       }
-       return *d.EnvironmentURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetID() int64 {
-       if d == nil || d.ID == nil {
-               return 0
-       }
-       return *d.ID
-}
-
-// GetLogURL returns the LogURL field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetLogURL() string {
-       if d == nil || d.LogURL == nil {
-               return ""
-       }
-       return *d.LogURL
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetNodeID() string {
-       if d == nil || d.NodeID == nil {
-               return ""
-       }
-       return *d.NodeID
-}
-
-// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetRepositoryURL() string {
-       if d == nil || d.RepositoryURL == nil {
-               return ""
-       }
-       return *d.RepositoryURL
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetState() string {
-       if d == nil || d.State == nil {
-               return ""
-       }
-       return *d.State
-}
-
-// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetTargetURL() string {
-       if d == nil || d.TargetURL == nil {
-               return ""
-       }
-       return *d.TargetURL
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetUpdatedAt() Timestamp {
-       if d == nil || d.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *d.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatus) GetURL() string {
-       if d == nil || d.URL == nil {
-               return ""
-       }
-       return *d.URL
-}
-
-// GetDeployment returns the Deployment field.
-func (d *DeploymentStatusEvent) GetDeployment() *Deployment {
-       if d == nil {
-               return nil
-       }
-       return d.Deployment
-}
-
-// GetDeploymentStatus returns the DeploymentStatus field.
-func (d *DeploymentStatusEvent) GetDeploymentStatus() *DeploymentStatus {
-       if d == nil {
-               return nil
-       }
-       return d.DeploymentStatus
-}
-
-// GetInstallation returns the Installation field.
-func (d *DeploymentStatusEvent) GetInstallation() *Installation {
-       if d == nil {
-               return nil
-       }
-       return d.Installation
-}
-
-// GetRepo returns the Repo field.
-func (d *DeploymentStatusEvent) GetRepo() *Repository {
-       if d == nil {
-               return nil
-       }
-       return d.Repo
-}
-
-// GetSender returns the Sender field.
-func (d *DeploymentStatusEvent) GetSender() *User {
-       if d == nil {
-               return nil
-       }
-       return d.Sender
-}
-
-// GetAutoInactive returns the AutoInactive field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatusRequest) GetAutoInactive() bool {
-       if d == nil || d.AutoInactive == nil {
-               return false
-       }
-       return *d.AutoInactive
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatusRequest) GetDescription() string {
-       if d == nil || d.Description == nil {
-               return ""
-       }
-       return *d.Description
-}
-
-// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatusRequest) GetEnvironment() string {
-       if d == nil || d.Environment == nil {
-               return ""
-       }
-       return *d.Environment
-}
-
-// GetEnvironmentURL returns the EnvironmentURL field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatusRequest) GetEnvironmentURL() string {
-       if d == nil || d.EnvironmentURL == nil {
-               return ""
-       }
-       return *d.EnvironmentURL
-}
-
-// GetLogURL returns the LogURL field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatusRequest) GetLogURL() string {
-       if d == nil || d.LogURL == nil {
-               return ""
-       }
-       return *d.LogURL
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (d *DeploymentStatusRequest) GetState() string {
-       if d == nil || d.State == nil {
-               return ""
-       }
-       return *d.State
-}
-
-// GetAuthor returns the Author field.
-func (d *DiscussionComment) GetAuthor() *User {
-       if d == nil {
-               return nil
-       }
-       return d.Author
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetBody() string {
-       if d == nil || d.Body == nil {
-               return ""
-       }
-       return *d.Body
-}
-
-// GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetBodyHTML() string {
-       if d == nil || d.BodyHTML == nil {
-               return ""
-       }
-       return *d.BodyHTML
-}
-
-// GetBodyVersion returns the BodyVersion field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetBodyVersion() string {
-       if d == nil || d.BodyVersion == nil {
-               return ""
-       }
-       return *d.BodyVersion
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetCreatedAt() Timestamp {
-       if d == nil || d.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *d.CreatedAt
-}
-
-// GetDiscussionURL returns the DiscussionURL field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetDiscussionURL() string {
-       if d == nil || d.DiscussionURL == nil {
-               return ""
-       }
-       return *d.DiscussionURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetHTMLURL() string {
-       if d == nil || d.HTMLURL == nil {
-               return ""
-       }
-       return *d.HTMLURL
-}
-
-// GetLastEditedAt returns the LastEditedAt field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetLastEditedAt() Timestamp {
-       if d == nil || d.LastEditedAt == nil {
-               return Timestamp{}
-       }
-       return *d.LastEditedAt
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetNodeID() string {
-       if d == nil || d.NodeID == nil {
-               return ""
-       }
-       return *d.NodeID
-}
-
-// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetNumber() int {
-       if d == nil || d.Number == nil {
-               return 0
-       }
-       return *d.Number
-}
-
-// GetReactions returns the Reactions field.
-func (d *DiscussionComment) GetReactions() *Reactions {
-       if d == nil {
-               return nil
-       }
-       return d.Reactions
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetUpdatedAt() Timestamp {
-       if d == nil || d.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *d.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (d *DiscussionComment) GetURL() string {
-       if d == nil || d.URL == nil {
-               return ""
-       }
-       return *d.URL
-}
-
-// GetTeams returns the Teams field if it's non-nil, zero value otherwise.
-func (d *DismissalRestrictionsRequest) GetTeams() []string {
-       if d == nil || d.Teams == nil {
-               return nil
-       }
-       return *d.Teams
-}
-
-// GetUsers returns the Users field if it's non-nil, zero value otherwise.
-func (d *DismissalRestrictionsRequest) GetUsers() []string {
-       if d == nil || d.Users == nil {
-               return nil
-       }
-       return *d.Users
-}
-
-// GetDismissalCommitID returns the DismissalCommitID field if it's non-nil, zero value otherwise.
-func (d *DismissedReview) GetDismissalCommitID() string {
-       if d == nil || d.DismissalCommitID == nil {
-               return ""
-       }
-       return *d.DismissalCommitID
-}
-
-// GetDismissalMessage returns the DismissalMessage field if it's non-nil, zero value otherwise.
-func (d *DismissedReview) GetDismissalMessage() string {
-       if d == nil || d.DismissalMessage == nil {
-               return ""
-       }
-       return *d.DismissalMessage
-}
-
-// GetReviewID returns the ReviewID field if it's non-nil, zero value otherwise.
-func (d *DismissedReview) GetReviewID() int64 {
-       if d == nil || d.ReviewID == nil {
-               return 0
-       }
-       return *d.ReviewID
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (d *DismissedReview) GetState() string {
-       if d == nil || d.State == nil {
-               return ""
-       }
-       return *d.State
-}
-
-// GetClientPayload returns the ClientPayload field if it's non-nil, zero value otherwise.
-func (d *DispatchRequestOptions) GetClientPayload() json.RawMessage {
-       if d == nil || d.ClientPayload == nil {
-               return json.RawMessage{}
-       }
-       return *d.ClientPayload
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (d *DraftReviewComment) GetBody() string {
-       if d == nil || d.Body == nil {
-               return ""
-       }
-       return *d.Body
-}
-
-// GetLine returns the Line field if it's non-nil, zero value otherwise.
-func (d *DraftReviewComment) GetLine() int {
-       if d == nil || d.Line == nil {
-               return 0
-       }
-       return *d.Line
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (d *DraftReviewComment) GetPath() string {
-       if d == nil || d.Path == nil {
-               return ""
-       }
-       return *d.Path
-}
-
-// GetPosition returns the Position field if it's non-nil, zero value otherwise.
-func (d *DraftReviewComment) GetPosition() int {
-       if d == nil || d.Position == nil {
-               return 0
-       }
-       return *d.Position
-}
-
-// GetSide returns the Side field if it's non-nil, zero value otherwise.
-func (d *DraftReviewComment) GetSide() string {
-       if d == nil || d.Side == nil {
-               return ""
-       }
-       return *d.Side
-}
-
-// GetStartLine returns the StartLine field if it's non-nil, zero value otherwise.
-func (d *DraftReviewComment) GetStartLine() int {
-       if d == nil || d.StartLine == nil {
-               return 0
-       }
-       return *d.StartLine
-}
-
-// GetStartSide returns the StartSide field if it's non-nil, zero value otherwise.
-func (d *DraftReviewComment) GetStartSide() string {
-       if d == nil || d.StartSide == nil {
-               return ""
-       }
-       return *d.StartSide
-}
-
-// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
-func (e *Enterprise) GetAvatarURL() string {
-       if e == nil || e.AvatarURL == nil {
-               return ""
-       }
-       return *e.AvatarURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (e *Enterprise) GetCreatedAt() Timestamp {
-       if e == nil || e.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *e.CreatedAt
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (e *Enterprise) GetDescription() string {
-       if e == nil || e.Description == nil {
-               return ""
-       }
-       return *e.Description
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (e *Enterprise) GetHTMLURL() string {
-       if e == nil || e.HTMLURL == nil {
-               return ""
-       }
-       return *e.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (e *Enterprise) GetID() int {
-       if e == nil || e.ID == nil {
-               return 0
-       }
-       return *e.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (e *Enterprise) GetName() string {
-       if e == nil || e.Name == nil {
-               return ""
-       }
-       return *e.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (e *Enterprise) GetNodeID() string {
-       if e == nil || e.NodeID == nil {
-               return ""
-       }
-       return *e.NodeID
-}
-
-// GetSlug returns the Slug field if it's non-nil, zero value otherwise.
-func (e *Enterprise) GetSlug() string {
-       if e == nil || e.Slug == nil {
-               return ""
-       }
-       return *e.Slug
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (e *Enterprise) GetUpdatedAt() Timestamp {
-       if e == nil || e.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *e.UpdatedAt
-}
-
-// GetWebsiteURL returns the WebsiteURL field if it's non-nil, zero value otherwise.
-func (e *Enterprise) GetWebsiteURL() string {
-       if e == nil || e.WebsiteURL == nil {
-               return ""
-       }
-       return *e.WebsiteURL
-}
-
-// GetActor returns the Actor field.
-func (e *Event) GetActor() *User {
-       if e == nil {
-               return nil
-       }
-       return e.Actor
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (e *Event) GetCreatedAt() time.Time {
-       if e == nil || e.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *e.CreatedAt
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (e *Event) GetID() string {
-       if e == nil || e.ID == nil {
-               return ""
-       }
-       return *e.ID
-}
-
-// GetOrg returns the Org field.
-func (e *Event) GetOrg() *Organization {
-       if e == nil {
-               return nil
-       }
-       return e.Org
-}
-
-// GetPublic returns the Public field if it's non-nil, zero value otherwise.
-func (e *Event) GetPublic() bool {
-       if e == nil || e.Public == nil {
-               return false
-       }
-       return *e.Public
-}
-
-// GetRawPayload returns the RawPayload field if it's non-nil, zero value otherwise.
-func (e *Event) GetRawPayload() json.RawMessage {
-       if e == nil || e.RawPayload == nil {
-               return json.RawMessage{}
-       }
-       return *e.RawPayload
-}
-
-// GetRepo returns the Repo field.
-func (e *Event) GetRepo() *Repository {
-       if e == nil {
-               return nil
-       }
-       return e.Repo
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (e *Event) GetType() string {
-       if e == nil || e.Type == nil {
-               return ""
-       }
-       return *e.Type
-}
-
-// GetHRef returns the HRef field if it's non-nil, zero value otherwise.
-func (f *FeedLink) GetHRef() string {
-       if f == nil || f.HRef == nil {
-               return ""
-       }
-       return *f.HRef
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (f *FeedLink) GetType() string {
-       if f == nil || f.Type == nil {
-               return ""
-       }
-       return *f.Type
-}
-
-// GetCurrentUserActorURL returns the CurrentUserActorURL field if it's non-nil, zero value otherwise.
-func (f *Feeds) GetCurrentUserActorURL() string {
-       if f == nil || f.CurrentUserActorURL == nil {
-               return ""
-       }
-       return *f.CurrentUserActorURL
-}
-
-// GetCurrentUserOrganizationURL returns the CurrentUserOrganizationURL field if it's non-nil, zero value otherwise.
-func (f *Feeds) GetCurrentUserOrganizationURL() string {
-       if f == nil || f.CurrentUserOrganizationURL == nil {
-               return ""
-       }
-       return *f.CurrentUserOrganizationURL
-}
-
-// GetCurrentUserPublicURL returns the CurrentUserPublicURL field if it's non-nil, zero value otherwise.
-func (f *Feeds) GetCurrentUserPublicURL() string {
-       if f == nil || f.CurrentUserPublicURL == nil {
-               return ""
-       }
-       return *f.CurrentUserPublicURL
-}
-
-// GetCurrentUserURL returns the CurrentUserURL field if it's non-nil, zero value otherwise.
-func (f *Feeds) GetCurrentUserURL() string {
-       if f == nil || f.CurrentUserURL == nil {
-               return ""
-       }
-       return *f.CurrentUserURL
-}
-
-// GetTimelineURL returns the TimelineURL field if it's non-nil, zero value otherwise.
-func (f *Feeds) GetTimelineURL() string {
-       if f == nil || f.TimelineURL == nil {
-               return ""
-       }
-       return *f.TimelineURL
-}
-
-// GetUserURL returns the UserURL field if it's non-nil, zero value otherwise.
-func (f *Feeds) GetUserURL() string {
-       if f == nil || f.UserURL == nil {
-               return ""
-       }
-       return *f.UserURL
-}
-
-// GetForkee returns the Forkee field.
-func (f *ForkEvent) GetForkee() *Repository {
-       if f == nil {
-               return nil
-       }
-       return f.Forkee
-}
-
-// GetInstallation returns the Installation field.
-func (f *ForkEvent) GetInstallation() *Installation {
-       if f == nil {
-               return nil
-       }
-       return f.Installation
-}
-
-// GetRepo returns the Repo field.
-func (f *ForkEvent) GetRepo() *Repository {
-       if f == nil {
-               return nil
-       }
-       return f.Repo
-}
-
-// GetSender returns the Sender field.
-func (f *ForkEvent) GetSender() *User {
-       if f == nil {
-               return nil
-       }
-       return f.Sender
-}
-
-// GetComments returns the Comments field if it's non-nil, zero value otherwise.
-func (g *Gist) GetComments() int {
-       if g == nil || g.Comments == nil {
-               return 0
-       }
-       return *g.Comments
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (g *Gist) GetCreatedAt() time.Time {
-       if g == nil || g.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *g.CreatedAt
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (g *Gist) GetDescription() string {
-       if g == nil || g.Description == nil {
-               return ""
-       }
-       return *g.Description
-}
-
-// GetGitPullURL returns the GitPullURL field if it's non-nil, zero value otherwise.
-func (g *Gist) GetGitPullURL() string {
-       if g == nil || g.GitPullURL == nil {
-               return ""
-       }
-       return *g.GitPullURL
-}
-
-// GetGitPushURL returns the GitPushURL field if it's non-nil, zero value otherwise.
-func (g *Gist) GetGitPushURL() string {
-       if g == nil || g.GitPushURL == nil {
-               return ""
-       }
-       return *g.GitPushURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (g *Gist) GetHTMLURL() string {
-       if g == nil || g.HTMLURL == nil {
-               return ""
-       }
-       return *g.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (g *Gist) GetID() string {
-       if g == nil || g.ID == nil {
-               return ""
-       }
-       return *g.ID
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (g *Gist) GetNodeID() string {
-       if g == nil || g.NodeID == nil {
-               return ""
-       }
-       return *g.NodeID
-}
-
-// GetOwner returns the Owner field.
-func (g *Gist) GetOwner() *User {
-       if g == nil {
-               return nil
-       }
-       return g.Owner
-}
-
-// GetPublic returns the Public field if it's non-nil, zero value otherwise.
-func (g *Gist) GetPublic() bool {
-       if g == nil || g.Public == nil {
-               return false
-       }
-       return *g.Public
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (g *Gist) GetUpdatedAt() time.Time {
-       if g == nil || g.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *g.UpdatedAt
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (g *GistComment) GetBody() string {
-       if g == nil || g.Body == nil {
-               return ""
-       }
-       return *g.Body
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (g *GistComment) GetCreatedAt() time.Time {
-       if g == nil || g.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *g.CreatedAt
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (g *GistComment) GetID() int64 {
-       if g == nil || g.ID == nil {
-               return 0
-       }
-       return *g.ID
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (g *GistComment) GetURL() string {
-       if g == nil || g.URL == nil {
-               return ""
-       }
-       return *g.URL
-}
-
-// GetUser returns the User field.
-func (g *GistComment) GetUser() *User {
-       if g == nil {
-               return nil
-       }
-       return g.User
-}
-
-// GetChangeStatus returns the ChangeStatus field.
-func (g *GistCommit) GetChangeStatus() *CommitStats {
-       if g == nil {
-               return nil
-       }
-       return g.ChangeStatus
-}
-
-// GetCommittedAt returns the CommittedAt field if it's non-nil, zero value otherwise.
-func (g *GistCommit) GetCommittedAt() Timestamp {
-       if g == nil || g.CommittedAt == nil {
-               return Timestamp{}
-       }
-       return *g.CommittedAt
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (g *GistCommit) GetNodeID() string {
-       if g == nil || g.NodeID == nil {
-               return ""
-       }
-       return *g.NodeID
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (g *GistCommit) GetURL() string {
-       if g == nil || g.URL == nil {
-               return ""
-       }
-       return *g.URL
-}
-
-// GetUser returns the User field.
-func (g *GistCommit) GetUser() *User {
-       if g == nil {
-               return nil
-       }
-       return g.User
-}
-
-// GetVersion returns the Version field if it's non-nil, zero value otherwise.
-func (g *GistCommit) GetVersion() string {
-       if g == nil || g.Version == nil {
-               return ""
-       }
-       return *g.Version
-}
-
-// GetContent returns the Content field if it's non-nil, zero value otherwise.
-func (g *GistFile) GetContent() string {
-       if g == nil || g.Content == nil {
-               return ""
-       }
-       return *g.Content
-}
-
-// GetFilename returns the Filename field if it's non-nil, zero value otherwise.
-func (g *GistFile) GetFilename() string {
-       if g == nil || g.Filename == nil {
-               return ""
-       }
-       return *g.Filename
-}
-
-// GetLanguage returns the Language field if it's non-nil, zero value otherwise.
-func (g *GistFile) GetLanguage() string {
-       if g == nil || g.Language == nil {
-               return ""
-       }
-       return *g.Language
-}
-
-// GetRawURL returns the RawURL field if it's non-nil, zero value otherwise.
-func (g *GistFile) GetRawURL() string {
-       if g == nil || g.RawURL == nil {
-               return ""
-       }
-       return *g.RawURL
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (g *GistFile) GetSize() int {
-       if g == nil || g.Size == nil {
-               return 0
-       }
-       return *g.Size
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (g *GistFile) GetType() string {
-       if g == nil || g.Type == nil {
-               return ""
-       }
-       return *g.Type
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (g *GistFork) GetCreatedAt() Timestamp {
-       if g == nil || g.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *g.CreatedAt
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (g *GistFork) GetID() string {
-       if g == nil || g.ID == nil {
-               return ""
-       }
-       return *g.ID
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (g *GistFork) GetNodeID() string {
-       if g == nil || g.NodeID == nil {
-               return ""
-       }
-       return *g.NodeID
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (g *GistFork) GetUpdatedAt() Timestamp {
-       if g == nil || g.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *g.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (g *GistFork) GetURL() string {
-       if g == nil || g.URL == nil {
-               return ""
-       }
-       return *g.URL
-}
-
-// GetUser returns the User field.
-func (g *GistFork) GetUser() *User {
-       if g == nil {
-               return nil
-       }
-       return g.User
-}
-
-// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise.
-func (g *GistStats) GetPrivateGists() int {
-       if g == nil || g.PrivateGists == nil {
-               return 0
-       }
-       return *g.PrivateGists
-}
-
-// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise.
-func (g *GistStats) GetPublicGists() int {
-       if g == nil || g.PublicGists == nil {
-               return 0
-       }
-       return *g.PublicGists
-}
-
-// GetTotalGists returns the TotalGists field if it's non-nil, zero value otherwise.
-func (g *GistStats) GetTotalGists() int {
-       if g == nil || g.TotalGists == nil {
-               return 0
-       }
-       return *g.TotalGists
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (g *GitHubAppAuthorizationEvent) GetAction() string {
-       if g == nil || g.Action == nil {
-               return ""
-       }
-       return *g.Action
-}
-
-// GetSender returns the Sender field.
-func (g *GitHubAppAuthorizationEvent) GetSender() *User {
-       if g == nil {
-               return nil
-       }
-       return g.Sender
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (g *Gitignore) GetName() string {
-       if g == nil || g.Name == nil {
-               return ""
-       }
-       return *g.Name
-}
-
-// GetSource returns the Source field if it's non-nil, zero value otherwise.
-func (g *Gitignore) GetSource() string {
-       if g == nil || g.Source == nil {
-               return ""
-       }
-       return *g.Source
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (g *GitObject) GetSHA() string {
-       if g == nil || g.SHA == nil {
-               return ""
-       }
-       return *g.SHA
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (g *GitObject) GetType() string {
-       if g == nil || g.Type == nil {
-               return ""
-       }
-       return *g.Type
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (g *GitObject) GetURL() string {
-       if g == nil || g.URL == nil {
-               return ""
-       }
-       return *g.URL
-}
-
-// GetInstallation returns the Installation field.
-func (g *GollumEvent) GetInstallation() *Installation {
-       if g == nil {
-               return nil
-       }
-       return g.Installation
-}
-
-// GetRepo returns the Repo field.
-func (g *GollumEvent) GetRepo() *Repository {
-       if g == nil {
-               return nil
-       }
-       return g.Repo
-}
-
-// GetSender returns the Sender field.
-func (g *GollumEvent) GetSender() *User {
-       if g == nil {
-               return nil
-       }
-       return g.Sender
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (g *GPGEmail) GetEmail() string {
-       if g == nil || g.Email == nil {
-               return ""
-       }
-       return *g.Email
-}
-
-// GetVerified returns the Verified field if it's non-nil, zero value otherwise.
-func (g *GPGEmail) GetVerified() bool {
-       if g == nil || g.Verified == nil {
-               return false
-       }
-       return *g.Verified
-}
-
-// GetCanCertify returns the CanCertify field if it's non-nil, zero value otherwise.
-func (g *GPGKey) GetCanCertify() bool {
-       if g == nil || g.CanCertify == nil {
-               return false
-       }
-       return *g.CanCertify
-}
-
-// GetCanEncryptComms returns the CanEncryptComms field if it's non-nil, zero value otherwise.
-func (g *GPGKey) GetCanEncryptComms() bool {
-       if g == nil || g.CanEncryptComms == nil {
-               return false
-       }
-       return *g.CanEncryptComms
-}
-
-// GetCanEncryptStorage returns the CanEncryptStorage field if it's non-nil, zero value otherwise.
-func (g *GPGKey) GetCanEncryptStorage() bool {
-       if g == nil || g.CanEncryptStorage == nil {
-               return false
-       }
-       return *g.CanEncryptStorage
-}
-
-// GetCanSign returns the CanSign field if it's non-nil, zero value otherwise.
-func (g *GPGKey) GetCanSign() bool {
-       if g == nil || g.CanSign == nil {
-               return false
-       }
-       return *g.CanSign
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (g *GPGKey) GetCreatedAt() time.Time {
-       if g == nil || g.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *g.CreatedAt
-}
-
-// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
-func (g *GPGKey) GetExpiresAt() time.Time {
-       if g == nil || g.ExpiresAt == nil {
-               return time.Time{}
-       }
-       return *g.ExpiresAt
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (g *GPGKey) GetID() int64 {
-       if g == nil || g.ID == nil {
-               return 0
-       }
-       return *g.ID
-}
-
-// GetKeyID returns the KeyID field if it's non-nil, zero value otherwise.
-func (g *GPGKey) GetKeyID() string {
-       if g == nil || g.KeyID == nil {
-               return ""
-       }
-       return *g.KeyID
-}
-
-// GetPrimaryKeyID returns the PrimaryKeyID field if it's non-nil, zero value otherwise.
-func (g *GPGKey) GetPrimaryKeyID() int64 {
-       if g == nil || g.PrimaryKeyID == nil {
-               return 0
-       }
-       return *g.PrimaryKeyID
-}
-
-// GetPublicKey returns the PublicKey field if it's non-nil, zero value otherwise.
-func (g *GPGKey) GetPublicKey() string {
-       if g == nil || g.PublicKey == nil {
-               return ""
-       }
-       return *g.PublicKey
-}
-
-// GetApp returns the App field.
-func (g *Grant) GetApp() *AuthorizationApp {
-       if g == nil {
-               return nil
-       }
-       return g.App
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (g *Grant) GetCreatedAt() Timestamp {
-       if g == nil || g.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *g.CreatedAt
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (g *Grant) GetID() int64 {
-       if g == nil || g.ID == nil {
-               return 0
-       }
-       return *g.ID
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (g *Grant) GetUpdatedAt() Timestamp {
-       if g == nil || g.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *g.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (g *Grant) GetURL() string {
-       if g == nil || g.URL == nil {
-               return ""
-       }
-       return *g.URL
-}
-
-// GetAuthor returns the Author field.
-func (h *HeadCommit) GetAuthor() *CommitAuthor {
-       if h == nil {
-               return nil
-       }
-       return h.Author
-}
-
-// GetCommitter returns the Committer field.
-func (h *HeadCommit) GetCommitter() *CommitAuthor {
-       if h == nil {
-               return nil
-       }
-       return h.Committer
-}
-
-// GetDistinct returns the Distinct field if it's non-nil, zero value otherwise.
-func (h *HeadCommit) GetDistinct() bool {
-       if h == nil || h.Distinct == nil {
-               return false
-       }
-       return *h.Distinct
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (h *HeadCommit) GetID() string {
-       if h == nil || h.ID == nil {
-               return ""
-       }
-       return *h.ID
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (h *HeadCommit) GetMessage() string {
-       if h == nil || h.Message == nil {
-               return ""
-       }
-       return *h.Message
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (h *HeadCommit) GetSHA() string {
-       if h == nil || h.SHA == nil {
-               return ""
-       }
-       return *h.SHA
-}
-
-// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise.
-func (h *HeadCommit) GetTimestamp() Timestamp {
-       if h == nil || h.Timestamp == nil {
-               return Timestamp{}
-       }
-       return *h.Timestamp
-}
-
-// GetTreeID returns the TreeID field if it's non-nil, zero value otherwise.
-func (h *HeadCommit) GetTreeID() string {
-       if h == nil || h.TreeID == nil {
-               return ""
-       }
-       return *h.TreeID
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (h *HeadCommit) GetURL() string {
-       if h == nil || h.URL == nil {
-               return ""
-       }
-       return *h.URL
-}
-
-// GetActive returns the Active field if it's non-nil, zero value otherwise.
-func (h *Hook) GetActive() bool {
-       if h == nil || h.Active == nil {
-               return false
-       }
-       return *h.Active
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (h *Hook) GetCreatedAt() time.Time {
-       if h == nil || h.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *h.CreatedAt
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (h *Hook) GetID() int64 {
-       if h == nil || h.ID == nil {
-               return 0
-       }
-       return *h.ID
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (h *Hook) GetUpdatedAt() time.Time {
-       if h == nil || h.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *h.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (h *Hook) GetURL() string {
-       if h == nil || h.URL == nil {
-               return ""
-       }
-       return *h.URL
-}
-
-// GetActiveHooks returns the ActiveHooks field if it's non-nil, zero value otherwise.
-func (h *HookStats) GetActiveHooks() int {
-       if h == nil || h.ActiveHooks == nil {
-               return 0
-       }
-       return *h.ActiveHooks
-}
-
-// GetInactiveHooks returns the InactiveHooks field if it's non-nil, zero value otherwise.
-func (h *HookStats) GetInactiveHooks() int {
-       if h == nil || h.InactiveHooks == nil {
-               return 0
-       }
-       return *h.InactiveHooks
-}
-
-// GetTotalHooks returns the TotalHooks field if it's non-nil, zero value otherwise.
-func (h *HookStats) GetTotalHooks() int {
-       if h == nil || h.TotalHooks == nil {
-               return 0
-       }
-       return *h.TotalHooks
-}
-
-// GetGroupDescription returns the GroupDescription field if it's non-nil, zero value otherwise.
-func (i *IDPGroup) GetGroupDescription() string {
-       if i == nil || i.GroupDescription == nil {
-               return ""
-       }
-       return *i.GroupDescription
-}
-
-// GetGroupID returns the GroupID field if it's non-nil, zero value otherwise.
-func (i *IDPGroup) GetGroupID() string {
-       if i == nil || i.GroupID == nil {
-               return ""
-       }
-       return *i.GroupID
-}
-
-// GetGroupName returns the GroupName field if it's non-nil, zero value otherwise.
-func (i *IDPGroup) GetGroupName() string {
-       if i == nil || i.GroupName == nil {
-               return ""
-       }
-       return *i.GroupName
-}
-
-// GetAuthorsCount returns the AuthorsCount field if it's non-nil, zero value otherwise.
-func (i *Import) GetAuthorsCount() int {
-       if i == nil || i.AuthorsCount == nil {
-               return 0
-       }
-       return *i.AuthorsCount
-}
-
-// GetAuthorsURL returns the AuthorsURL field if it's non-nil, zero value otherwise.
-func (i *Import) GetAuthorsURL() string {
-       if i == nil || i.AuthorsURL == nil {
-               return ""
-       }
-       return *i.AuthorsURL
-}
-
-// GetCommitCount returns the CommitCount field if it's non-nil, zero value otherwise.
-func (i *Import) GetCommitCount() int {
-       if i == nil || i.CommitCount == nil {
-               return 0
-       }
-       return *i.CommitCount
-}
-
-// GetFailedStep returns the FailedStep field if it's non-nil, zero value otherwise.
-func (i *Import) GetFailedStep() string {
-       if i == nil || i.FailedStep == nil {
-               return ""
-       }
-       return *i.FailedStep
-}
-
-// GetHasLargeFiles returns the HasLargeFiles field if it's non-nil, zero value otherwise.
-func (i *Import) GetHasLargeFiles() bool {
-       if i == nil || i.HasLargeFiles == nil {
-               return false
-       }
-       return *i.HasLargeFiles
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (i *Import) GetHTMLURL() string {
-       if i == nil || i.HTMLURL == nil {
-               return ""
-       }
-       return *i.HTMLURL
-}
-
-// GetHumanName returns the HumanName field if it's non-nil, zero value otherwise.
-func (i *Import) GetHumanName() string {
-       if i == nil || i.HumanName == nil {
-               return ""
-       }
-       return *i.HumanName
-}
-
-// GetLargeFilesCount returns the LargeFilesCount field if it's non-nil, zero value otherwise.
-func (i *Import) GetLargeFilesCount() int {
-       if i == nil || i.LargeFilesCount == nil {
-               return 0
-       }
-       return *i.LargeFilesCount
-}
-
-// GetLargeFilesSize returns the LargeFilesSize field if it's non-nil, zero value otherwise.
-func (i *Import) GetLargeFilesSize() int {
-       if i == nil || i.LargeFilesSize == nil {
-               return 0
-       }
-       return *i.LargeFilesSize
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (i *Import) GetMessage() string {
-       if i == nil || i.Message == nil {
-               return ""
-       }
-       return *i.Message
-}
-
-// GetPercent returns the Percent field if it's non-nil, zero value otherwise.
-func (i *Import) GetPercent() int {
-       if i == nil || i.Percent == nil {
-               return 0
-       }
-       return *i.Percent
-}
-
-// GetPushPercent returns the PushPercent field if it's non-nil, zero value otherwise.
-func (i *Import) GetPushPercent() int {
-       if i == nil || i.PushPercent == nil {
-               return 0
-       }
-       return *i.PushPercent
-}
-
-// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
-func (i *Import) GetRepositoryURL() string {
-       if i == nil || i.RepositoryURL == nil {
-               return ""
-       }
-       return *i.RepositoryURL
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (i *Import) GetStatus() string {
-       if i == nil || i.Status == nil {
-               return ""
-       }
-       return *i.Status
-}
-
-// GetStatusText returns the StatusText field if it's non-nil, zero value otherwise.
-func (i *Import) GetStatusText() string {
-       if i == nil || i.StatusText == nil {
-               return ""
-       }
-       return *i.StatusText
-}
-
-// GetTFVCProject returns the TFVCProject field if it's non-nil, zero value otherwise.
-func (i *Import) GetTFVCProject() string {
-       if i == nil || i.TFVCProject == nil {
-               return ""
-       }
-       return *i.TFVCProject
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (i *Import) GetURL() string {
-       if i == nil || i.URL == nil {
-               return ""
-       }
-       return *i.URL
-}
-
-// GetUseLFS returns the UseLFS field if it's non-nil, zero value otherwise.
-func (i *Import) GetUseLFS() string {
-       if i == nil || i.UseLFS == nil {
-               return ""
-       }
-       return *i.UseLFS
-}
-
-// GetVCS returns the VCS field if it's non-nil, zero value otherwise.
-func (i *Import) GetVCS() string {
-       if i == nil || i.VCS == nil {
-               return ""
-       }
-       return *i.VCS
-}
-
-// GetVCSPassword returns the VCSPassword field if it's non-nil, zero value otherwise.
-func (i *Import) GetVCSPassword() string {
-       if i == nil || i.VCSPassword == nil {
-               return ""
-       }
-       return *i.VCSPassword
-}
-
-// GetVCSURL returns the VCSURL field if it's non-nil, zero value otherwise.
-func (i *Import) GetVCSURL() string {
-       if i == nil || i.VCSURL == nil {
-               return ""
-       }
-       return *i.VCSURL
-}
-
-// GetVCSUsername returns the VCSUsername field if it's non-nil, zero value otherwise.
-func (i *Import) GetVCSUsername() string {
-       if i == nil || i.VCSUsername == nil {
-               return ""
-       }
-       return *i.VCSUsername
-}
-
-// GetAccessTokensURL returns the AccessTokensURL field if it's non-nil, zero value otherwise.
-func (i *Installation) GetAccessTokensURL() string {
-       if i == nil || i.AccessTokensURL == nil {
-               return ""
-       }
-       return *i.AccessTokensURL
-}
-
-// GetAccount returns the Account field.
-func (i *Installation) GetAccount() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Account
-}
-
-// GetAppID returns the AppID field if it's non-nil, zero value otherwise.
-func (i *Installation) GetAppID() int64 {
-       if i == nil || i.AppID == nil {
-               return 0
-       }
-       return *i.AppID
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (i *Installation) GetCreatedAt() Timestamp {
-       if i == nil || i.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *i.CreatedAt
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (i *Installation) GetHTMLURL() string {
-       if i == nil || i.HTMLURL == nil {
-               return ""
-       }
-       return *i.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (i *Installation) GetID() int64 {
-       if i == nil || i.ID == nil {
-               return 0
-       }
-       return *i.ID
-}
-
-// GetPermissions returns the Permissions field.
-func (i *Installation) GetPermissions() *InstallationPermissions {
-       if i == nil {
-               return nil
-       }
-       return i.Permissions
-}
-
-// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise.
-func (i *Installation) GetRepositoriesURL() string {
-       if i == nil || i.RepositoriesURL == nil {
-               return ""
-       }
-       return *i.RepositoriesURL
-}
-
-// GetRepositorySelection returns the RepositorySelection field if it's non-nil, zero value otherwise.
-func (i *Installation) GetRepositorySelection() string {
-       if i == nil || i.RepositorySelection == nil {
-               return ""
-       }
-       return *i.RepositorySelection
-}
-
-// GetSingleFileName returns the SingleFileName field if it's non-nil, zero value otherwise.
-func (i *Installation) GetSingleFileName() string {
-       if i == nil || i.SingleFileName == nil {
-               return ""
-       }
-       return *i.SingleFileName
-}
-
-// GetTargetID returns the TargetID field if it's non-nil, zero value otherwise.
-func (i *Installation) GetTargetID() int64 {
-       if i == nil || i.TargetID == nil {
-               return 0
-       }
-       return *i.TargetID
-}
-
-// GetTargetType returns the TargetType field if it's non-nil, zero value otherwise.
-func (i *Installation) GetTargetType() string {
-       if i == nil || i.TargetType == nil {
-               return ""
-       }
-       return *i.TargetType
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (i *Installation) GetUpdatedAt() Timestamp {
-       if i == nil || i.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *i.UpdatedAt
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (i *InstallationEvent) GetAction() string {
-       if i == nil || i.Action == nil {
-               return ""
-       }
-       return *i.Action
-}
-
-// GetInstallation returns the Installation field.
-func (i *InstallationEvent) GetInstallation() *Installation {
-       if i == nil {
-               return nil
-       }
-       return i.Installation
-}
-
-// GetSender returns the Sender field.
-func (i *InstallationEvent) GetSender() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Sender
-}
-
-// GetAdministration returns the Administration field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetAdministration() string {
-       if i == nil || i.Administration == nil {
-               return ""
-       }
-       return *i.Administration
-}
-
-// GetBlocking returns the Blocking field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetBlocking() string {
-       if i == nil || i.Blocking == nil {
-               return ""
-       }
-       return *i.Blocking
-}
-
-// GetChecks returns the Checks field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetChecks() string {
-       if i == nil || i.Checks == nil {
-               return ""
-       }
-       return *i.Checks
-}
-
-// GetContentReferences returns the ContentReferences field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetContentReferences() string {
-       if i == nil || i.ContentReferences == nil {
-               return ""
-       }
-       return *i.ContentReferences
-}
-
-// GetContents returns the Contents field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetContents() string {
-       if i == nil || i.Contents == nil {
-               return ""
-       }
-       return *i.Contents
-}
-
-// GetDeployments returns the Deployments field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetDeployments() string {
-       if i == nil || i.Deployments == nil {
-               return ""
-       }
-       return *i.Deployments
-}
-
-// GetEmails returns the Emails field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetEmails() string {
-       if i == nil || i.Emails == nil {
-               return ""
-       }
-       return *i.Emails
-}
-
-// GetFollowers returns the Followers field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetFollowers() string {
-       if i == nil || i.Followers == nil {
-               return ""
-       }
-       return *i.Followers
-}
-
-// GetIssues returns the Issues field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetIssues() string {
-       if i == nil || i.Issues == nil {
-               return ""
-       }
-       return *i.Issues
-}
-
-// GetMembers returns the Members field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetMembers() string {
-       if i == nil || i.Members == nil {
-               return ""
-       }
-       return *i.Members
-}
-
-// GetMetadata returns the Metadata field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetMetadata() string {
-       if i == nil || i.Metadata == nil {
-               return ""
-       }
-       return *i.Metadata
-}
-
-// GetOrganizationAdministration returns the OrganizationAdministration field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetOrganizationAdministration() string {
-       if i == nil || i.OrganizationAdministration == nil {
-               return ""
-       }
-       return *i.OrganizationAdministration
-}
-
-// GetOrganizationHooks returns the OrganizationHooks field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetOrganizationHooks() string {
-       if i == nil || i.OrganizationHooks == nil {
-               return ""
-       }
-       return *i.OrganizationHooks
-}
-
-// GetOrganizationPlan returns the OrganizationPlan field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetOrganizationPlan() string {
-       if i == nil || i.OrganizationPlan == nil {
-               return ""
-       }
-       return *i.OrganizationPlan
-}
-
-// GetOrganizationPreReceiveHooks returns the OrganizationPreReceiveHooks field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetOrganizationPreReceiveHooks() string {
-       if i == nil || i.OrganizationPreReceiveHooks == nil {
-               return ""
-       }
-       return *i.OrganizationPreReceiveHooks
-}
-
-// GetOrganizationProjects returns the OrganizationProjects field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetOrganizationProjects() string {
-       if i == nil || i.OrganizationProjects == nil {
-               return ""
-       }
-       return *i.OrganizationProjects
-}
-
-// GetOrganizationUserBlocking returns the OrganizationUserBlocking field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetOrganizationUserBlocking() string {
-       if i == nil || i.OrganizationUserBlocking == nil {
-               return ""
-       }
-       return *i.OrganizationUserBlocking
-}
-
-// GetPackages returns the Packages field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetPackages() string {
-       if i == nil || i.Packages == nil {
-               return ""
-       }
-       return *i.Packages
-}
-
-// GetPages returns the Pages field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetPages() string {
-       if i == nil || i.Pages == nil {
-               return ""
-       }
-       return *i.Pages
-}
-
-// GetPullRequests returns the PullRequests field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetPullRequests() string {
-       if i == nil || i.PullRequests == nil {
-               return ""
-       }
-       return *i.PullRequests
-}
-
-// GetRepositoryHooks returns the RepositoryHooks field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetRepositoryHooks() string {
-       if i == nil || i.RepositoryHooks == nil {
-               return ""
-       }
-       return *i.RepositoryHooks
-}
-
-// GetRepositoryPreReceiveHooks returns the RepositoryPreReceiveHooks field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetRepositoryPreReceiveHooks() string {
-       if i == nil || i.RepositoryPreReceiveHooks == nil {
-               return ""
-       }
-       return *i.RepositoryPreReceiveHooks
-}
-
-// GetRepositoryProjects returns the RepositoryProjects field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetRepositoryProjects() string {
-       if i == nil || i.RepositoryProjects == nil {
-               return ""
-       }
-       return *i.RepositoryProjects
-}
-
-// GetSingleFile returns the SingleFile field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetSingleFile() string {
-       if i == nil || i.SingleFile == nil {
-               return ""
-       }
-       return *i.SingleFile
-}
-
-// GetStatuses returns the Statuses field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetStatuses() string {
-       if i == nil || i.Statuses == nil {
-               return ""
-       }
-       return *i.Statuses
-}
-
-// GetTeamDiscussions returns the TeamDiscussions field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetTeamDiscussions() string {
-       if i == nil || i.TeamDiscussions == nil {
-               return ""
-       }
-       return *i.TeamDiscussions
-}
-
-// GetVulnerabilityAlerts returns the VulnerabilityAlerts field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetVulnerabilityAlerts() string {
-       if i == nil || i.VulnerabilityAlerts == nil {
-               return ""
-       }
-       return *i.VulnerabilityAlerts
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (i *InstallationRepositoriesEvent) GetAction() string {
-       if i == nil || i.Action == nil {
-               return ""
-       }
-       return *i.Action
-}
-
-// GetInstallation returns the Installation field.
-func (i *InstallationRepositoriesEvent) GetInstallation() *Installation {
-       if i == nil {
-               return nil
-       }
-       return i.Installation
-}
-
-// GetRepositorySelection returns the RepositorySelection field if it's non-nil, zero value otherwise.
-func (i *InstallationRepositoriesEvent) GetRepositorySelection() string {
-       if i == nil || i.RepositorySelection == nil {
-               return ""
-       }
-       return *i.RepositorySelection
-}
-
-// GetSender returns the Sender field.
-func (i *InstallationRepositoriesEvent) GetSender() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Sender
-}
-
-// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
-func (i *InstallationToken) GetExpiresAt() time.Time {
-       if i == nil || i.ExpiresAt == nil {
-               return time.Time{}
-       }
-       return *i.ExpiresAt
-}
-
-// GetPermissions returns the Permissions field.
-func (i *InstallationToken) GetPermissions() *InstallationPermissions {
-       if i == nil {
-               return nil
-       }
-       return i.Permissions
-}
-
-// GetToken returns the Token field if it's non-nil, zero value otherwise.
-func (i *InstallationToken) GetToken() string {
-       if i == nil || i.Token == nil {
-               return ""
-       }
-       return *i.Token
-}
-
-// GetPermissions returns the Permissions field.
-func (i *InstallationTokenOptions) GetPermissions() *InstallationPermissions {
-       if i == nil {
-               return nil
-       }
-       return i.Permissions
-}
-
-// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
-func (i *InteractionRestriction) GetExpiresAt() Timestamp {
-       if i == nil || i.ExpiresAt == nil {
-               return Timestamp{}
-       }
-       return *i.ExpiresAt
-}
-
-// GetLimit returns the Limit field if it's non-nil, zero value otherwise.
-func (i *InteractionRestriction) GetLimit() string {
-       if i == nil || i.Limit == nil {
-               return ""
-       }
-       return *i.Limit
-}
-
-// GetOrigin returns the Origin field if it's non-nil, zero value otherwise.
-func (i *InteractionRestriction) GetOrigin() string {
-       if i == nil || i.Origin == nil {
-               return ""
-       }
-       return *i.Origin
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (i *Invitation) GetCreatedAt() time.Time {
-       if i == nil || i.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *i.CreatedAt
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (i *Invitation) GetEmail() string {
-       if i == nil || i.Email == nil {
-               return ""
-       }
-       return *i.Email
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (i *Invitation) GetID() int64 {
-       if i == nil || i.ID == nil {
-               return 0
-       }
-       return *i.ID
-}
-
-// GetInvitationTeamURL returns the InvitationTeamURL field if it's non-nil, zero value otherwise.
-func (i *Invitation) GetInvitationTeamURL() string {
-       if i == nil || i.InvitationTeamURL == nil {
-               return ""
-       }
-       return *i.InvitationTeamURL
-}
-
-// GetInviter returns the Inviter field.
-func (i *Invitation) GetInviter() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Inviter
-}
-
-// GetLogin returns the Login field if it's non-nil, zero value otherwise.
-func (i *Invitation) GetLogin() string {
-       if i == nil || i.Login == nil {
-               return ""
-       }
-       return *i.Login
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (i *Invitation) GetNodeID() string {
-       if i == nil || i.NodeID == nil {
-               return ""
-       }
-       return *i.NodeID
-}
-
-// GetRole returns the Role field if it's non-nil, zero value otherwise.
-func (i *Invitation) GetRole() string {
-       if i == nil || i.Role == nil {
-               return ""
-       }
-       return *i.Role
-}
-
-// GetTeamCount returns the TeamCount field if it's non-nil, zero value otherwise.
-func (i *Invitation) GetTeamCount() int {
-       if i == nil || i.TeamCount == nil {
-               return 0
-       }
-       return *i.TeamCount
-}
-
-// GetActiveLockReason returns the ActiveLockReason field if it's non-nil, zero value otherwise.
-func (i *Issue) GetActiveLockReason() string {
-       if i == nil || i.ActiveLockReason == nil {
-               return ""
-       }
-       return *i.ActiveLockReason
-}
-
-// GetAssignee returns the Assignee field.
-func (i *Issue) GetAssignee() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Assignee
-}
-
-// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise.
-func (i *Issue) GetAuthorAssociation() string {
-       if i == nil || i.AuthorAssociation == nil {
-               return ""
-       }
-       return *i.AuthorAssociation
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (i *Issue) GetBody() string {
-       if i == nil || i.Body == nil {
-               return ""
-       }
-       return *i.Body
-}
-
-// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise.
-func (i *Issue) GetClosedAt() time.Time {
-       if i == nil || i.ClosedAt == nil {
-               return time.Time{}
-       }
-       return *i.ClosedAt
-}
-
-// GetClosedBy returns the ClosedBy field.
-func (i *Issue) GetClosedBy() *User {
-       if i == nil {
-               return nil
-       }
-       return i.ClosedBy
-}
-
-// GetComments returns the Comments field if it's non-nil, zero value otherwise.
-func (i *Issue) GetComments() int {
-       if i == nil || i.Comments == nil {
-               return 0
-       }
-       return *i.Comments
-}
-
-// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
-func (i *Issue) GetCommentsURL() string {
-       if i == nil || i.CommentsURL == nil {
-               return ""
-       }
-       return *i.CommentsURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (i *Issue) GetCreatedAt() time.Time {
-       if i == nil || i.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *i.CreatedAt
-}
-
-// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
-func (i *Issue) GetEventsURL() string {
-       if i == nil || i.EventsURL == nil {
-               return ""
-       }
-       return *i.EventsURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (i *Issue) GetHTMLURL() string {
-       if i == nil || i.HTMLURL == nil {
-               return ""
-       }
-       return *i.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (i *Issue) GetID() int64 {
-       if i == nil || i.ID == nil {
-               return 0
-       }
-       return *i.ID
-}
-
-// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise.
-func (i *Issue) GetLabelsURL() string {
-       if i == nil || i.LabelsURL == nil {
-               return ""
-       }
-       return *i.LabelsURL
-}
-
-// GetLocked returns the Locked field if it's non-nil, zero value otherwise.
-func (i *Issue) GetLocked() bool {
-       if i == nil || i.Locked == nil {
-               return false
-       }
-       return *i.Locked
-}
-
-// GetMilestone returns the Milestone field.
-func (i *Issue) GetMilestone() *Milestone {
-       if i == nil {
-               return nil
-       }
-       return i.Milestone
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (i *Issue) GetNodeID() string {
-       if i == nil || i.NodeID == nil {
-               return ""
-       }
-       return *i.NodeID
-}
-
-// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (i *Issue) GetNumber() int {
-       if i == nil || i.Number == nil {
-               return 0
-       }
-       return *i.Number
-}
-
-// GetPullRequestLinks returns the PullRequestLinks field.
-func (i *Issue) GetPullRequestLinks() *PullRequestLinks {
-       if i == nil {
-               return nil
-       }
-       return i.PullRequestLinks
-}
-
-// GetReactions returns the Reactions field.
-func (i *Issue) GetReactions() *Reactions {
-       if i == nil {
-               return nil
-       }
-       return i.Reactions
-}
-
-// GetRepository returns the Repository field.
-func (i *Issue) GetRepository() *Repository {
-       if i == nil {
-               return nil
-       }
-       return i.Repository
-}
-
-// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
-func (i *Issue) GetRepositoryURL() string {
-       if i == nil || i.RepositoryURL == nil {
-               return ""
-       }
-       return *i.RepositoryURL
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (i *Issue) GetState() string {
-       if i == nil || i.State == nil {
-               return ""
-       }
-       return *i.State
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (i *Issue) GetTitle() string {
-       if i == nil || i.Title == nil {
-               return ""
-       }
-       return *i.Title
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (i *Issue) GetUpdatedAt() time.Time {
-       if i == nil || i.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *i.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (i *Issue) GetURL() string {
-       if i == nil || i.URL == nil {
-               return ""
-       }
-       return *i.URL
-}
-
-// GetUser returns the User field.
-func (i *Issue) GetUser() *User {
-       if i == nil {
-               return nil
-       }
-       return i.User
-}
-
-// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise.
-func (i *IssueComment) GetAuthorAssociation() string {
-       if i == nil || i.AuthorAssociation == nil {
-               return ""
-       }
-       return *i.AuthorAssociation
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (i *IssueComment) GetBody() string {
-       if i == nil || i.Body == nil {
-               return ""
-       }
-       return *i.Body
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (i *IssueComment) GetCreatedAt() time.Time {
-       if i == nil || i.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *i.CreatedAt
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (i *IssueComment) GetHTMLURL() string {
-       if i == nil || i.HTMLURL == nil {
-               return ""
-       }
-       return *i.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (i *IssueComment) GetID() int64 {
-       if i == nil || i.ID == nil {
-               return 0
-       }
-       return *i.ID
-}
-
-// GetIssueURL returns the IssueURL field if it's non-nil, zero value otherwise.
-func (i *IssueComment) GetIssueURL() string {
-       if i == nil || i.IssueURL == nil {
-               return ""
-       }
-       return *i.IssueURL
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (i *IssueComment) GetNodeID() string {
-       if i == nil || i.NodeID == nil {
-               return ""
-       }
-       return *i.NodeID
-}
-
-// GetReactions returns the Reactions field.
-func (i *IssueComment) GetReactions() *Reactions {
-       if i == nil {
-               return nil
-       }
-       return i.Reactions
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (i *IssueComment) GetUpdatedAt() time.Time {
-       if i == nil || i.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *i.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (i *IssueComment) GetURL() string {
-       if i == nil || i.URL == nil {
-               return ""
-       }
-       return *i.URL
-}
-
-// GetUser returns the User field.
-func (i *IssueComment) GetUser() *User {
-       if i == nil {
-               return nil
-       }
-       return i.User
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (i *IssueCommentEvent) GetAction() string {
-       if i == nil || i.Action == nil {
-               return ""
-       }
-       return *i.Action
-}
-
-// GetChanges returns the Changes field.
-func (i *IssueCommentEvent) GetChanges() *EditChange {
-       if i == nil {
-               return nil
-       }
-       return i.Changes
-}
-
-// GetComment returns the Comment field.
-func (i *IssueCommentEvent) GetComment() *IssueComment {
-       if i == nil {
-               return nil
-       }
-       return i.Comment
-}
-
-// GetInstallation returns the Installation field.
-func (i *IssueCommentEvent) GetInstallation() *Installation {
-       if i == nil {
-               return nil
-       }
-       return i.Installation
-}
-
-// GetIssue returns the Issue field.
-func (i *IssueCommentEvent) GetIssue() *Issue {
-       if i == nil {
-               return nil
-       }
-       return i.Issue
-}
-
-// GetRepo returns the Repo field.
-func (i *IssueCommentEvent) GetRepo() *Repository {
-       if i == nil {
-               return nil
-       }
-       return i.Repo
-}
-
-// GetSender returns the Sender field.
-func (i *IssueCommentEvent) GetSender() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Sender
-}
-
-// GetActor returns the Actor field.
-func (i *IssueEvent) GetActor() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Actor
-}
-
-// GetAssignee returns the Assignee field.
-func (i *IssueEvent) GetAssignee() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Assignee
-}
-
-// GetAssigner returns the Assigner field.
-func (i *IssueEvent) GetAssigner() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Assigner
-}
-
-// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
-func (i *IssueEvent) GetCommitID() string {
-       if i == nil || i.CommitID == nil {
-               return ""
-       }
-       return *i.CommitID
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (i *IssueEvent) GetCreatedAt() time.Time {
-       if i == nil || i.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *i.CreatedAt
-}
-
-// GetDismissedReview returns the DismissedReview field.
-func (i *IssueEvent) GetDismissedReview() *DismissedReview {
-       if i == nil {
-               return nil
-       }
-       return i.DismissedReview
-}
-
-// GetEvent returns the Event field if it's non-nil, zero value otherwise.
-func (i *IssueEvent) GetEvent() string {
-       if i == nil || i.Event == nil {
-               return ""
-       }
-       return *i.Event
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (i *IssueEvent) GetID() int64 {
-       if i == nil || i.ID == nil {
-               return 0
-       }
-       return *i.ID
-}
-
-// GetIssue returns the Issue field.
-func (i *IssueEvent) GetIssue() *Issue {
-       if i == nil {
-               return nil
-       }
-       return i.Issue
-}
-
-// GetLabel returns the Label field.
-func (i *IssueEvent) GetLabel() *Label {
-       if i == nil {
-               return nil
-       }
-       return i.Label
-}
-
-// GetLockReason returns the LockReason field if it's non-nil, zero value otherwise.
-func (i *IssueEvent) GetLockReason() string {
-       if i == nil || i.LockReason == nil {
-               return ""
-       }
-       return *i.LockReason
-}
-
-// GetMilestone returns the Milestone field.
-func (i *IssueEvent) GetMilestone() *Milestone {
-       if i == nil {
-               return nil
-       }
-       return i.Milestone
-}
-
-// GetProjectCard returns the ProjectCard field.
-func (i *IssueEvent) GetProjectCard() *ProjectCard {
-       if i == nil {
-               return nil
-       }
-       return i.ProjectCard
-}
-
-// GetRename returns the Rename field.
-func (i *IssueEvent) GetRename() *Rename {
-       if i == nil {
-               return nil
-       }
-       return i.Rename
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (i *IssueEvent) GetURL() string {
-       if i == nil || i.URL == nil {
-               return ""
-       }
-       return *i.URL
-}
-
-// GetDirection returns the Direction field if it's non-nil, zero value otherwise.
-func (i *IssueListCommentsOptions) GetDirection() string {
-       if i == nil || i.Direction == nil {
-               return ""
-       }
-       return *i.Direction
-}
-
-// GetSince returns the Since field if it's non-nil, zero value otherwise.
-func (i *IssueListCommentsOptions) GetSince() time.Time {
-       if i == nil || i.Since == nil {
-               return time.Time{}
-       }
-       return *i.Since
-}
-
-// GetSort returns the Sort field if it's non-nil, zero value otherwise.
-func (i *IssueListCommentsOptions) GetSort() string {
-       if i == nil || i.Sort == nil {
-               return ""
-       }
-       return *i.Sort
-}
-
-// GetAssignee returns the Assignee field if it's non-nil, zero value otherwise.
-func (i *IssueRequest) GetAssignee() string {
-       if i == nil || i.Assignee == nil {
-               return ""
-       }
-       return *i.Assignee
-}
-
-// GetAssignees returns the Assignees field if it's non-nil, zero value otherwise.
-func (i *IssueRequest) GetAssignees() []string {
-       if i == nil || i.Assignees == nil {
-               return nil
-       }
-       return *i.Assignees
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (i *IssueRequest) GetBody() string {
-       if i == nil || i.Body == nil {
-               return ""
-       }
-       return *i.Body
-}
-
-// GetLabels returns the Labels field if it's non-nil, zero value otherwise.
-func (i *IssueRequest) GetLabels() []string {
-       if i == nil || i.Labels == nil {
-               return nil
-       }
-       return *i.Labels
-}
-
-// GetMilestone returns the Milestone field if it's non-nil, zero value otherwise.
-func (i *IssueRequest) GetMilestone() int {
-       if i == nil || i.Milestone == nil {
-               return 0
-       }
-       return *i.Milestone
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (i *IssueRequest) GetState() string {
-       if i == nil || i.State == nil {
-               return ""
-       }
-       return *i.State
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (i *IssueRequest) GetTitle() string {
-       if i == nil || i.Title == nil {
-               return ""
-       }
-       return *i.Title
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (i *IssuesEvent) GetAction() string {
-       if i == nil || i.Action == nil {
-               return ""
-       }
-       return *i.Action
-}
-
-// GetAssignee returns the Assignee field.
-func (i *IssuesEvent) GetAssignee() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Assignee
-}
-
-// GetChanges returns the Changes field.
-func (i *IssuesEvent) GetChanges() *EditChange {
-       if i == nil {
-               return nil
-       }
-       return i.Changes
-}
-
-// GetInstallation returns the Installation field.
-func (i *IssuesEvent) GetInstallation() *Installation {
-       if i == nil {
-               return nil
-       }
-       return i.Installation
-}
-
-// GetIssue returns the Issue field.
-func (i *IssuesEvent) GetIssue() *Issue {
-       if i == nil {
-               return nil
-       }
-       return i.Issue
-}
-
-// GetLabel returns the Label field.
-func (i *IssuesEvent) GetLabel() *Label {
-       if i == nil {
-               return nil
-       }
-       return i.Label
-}
-
-// GetRepo returns the Repo field.
-func (i *IssuesEvent) GetRepo() *Repository {
-       if i == nil {
-               return nil
-       }
-       return i.Repo
-}
-
-// GetSender returns the Sender field.
-func (i *IssuesEvent) GetSender() *User {
-       if i == nil {
-               return nil
-       }
-       return i.Sender
-}
-
-// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
-func (i *IssuesSearchResult) GetIncompleteResults() bool {
-       if i == nil || i.IncompleteResults == nil {
-               return false
-       }
-       return *i.IncompleteResults
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (i *IssuesSearchResult) GetTotal() int {
-       if i == nil || i.Total == nil {
-               return 0
-       }
-       return *i.Total
-}
-
-// GetClosedIssues returns the ClosedIssues field if it's non-nil, zero value otherwise.
-func (i *IssueStats) GetClosedIssues() int {
-       if i == nil || i.ClosedIssues == nil {
-               return 0
-       }
-       return *i.ClosedIssues
-}
-
-// GetOpenIssues returns the OpenIssues field if it's non-nil, zero value otherwise.
-func (i *IssueStats) GetOpenIssues() int {
-       if i == nil || i.OpenIssues == nil {
-               return 0
-       }
-       return *i.OpenIssues
-}
-
-// GetTotalIssues returns the TotalIssues field if it's non-nil, zero value otherwise.
-func (i *IssueStats) GetTotalIssues() int {
-       if i == nil || i.TotalIssues == nil {
-               return 0
-       }
-       return *i.TotalIssues
-}
-
-// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
-func (j *Jobs) GetTotalCount() int {
-       if j == nil || j.TotalCount == nil {
-               return 0
-       }
-       return *j.TotalCount
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (k *Key) GetCreatedAt() Timestamp {
-       if k == nil || k.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *k.CreatedAt
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (k *Key) GetID() int64 {
-       if k == nil || k.ID == nil {
-               return 0
-       }
-       return *k.ID
-}
-
-// GetKey returns the Key field if it's non-nil, zero value otherwise.
-func (k *Key) GetKey() string {
-       if k == nil || k.Key == nil {
-               return ""
-       }
-       return *k.Key
-}
-
-// GetReadOnly returns the ReadOnly field if it's non-nil, zero value otherwise.
-func (k *Key) GetReadOnly() bool {
-       if k == nil || k.ReadOnly == nil {
-               return false
-       }
-       return *k.ReadOnly
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (k *Key) GetTitle() string {
-       if k == nil || k.Title == nil {
-               return ""
-       }
-       return *k.Title
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (k *Key) GetURL() string {
-       if k == nil || k.URL == nil {
-               return ""
-       }
-       return *k.URL
-}
-
-// GetColor returns the Color field if it's non-nil, zero value otherwise.
-func (l *Label) GetColor() string {
-       if l == nil || l.Color == nil {
-               return ""
-       }
-       return *l.Color
-}
-
-// GetDefault returns the Default field if it's non-nil, zero value otherwise.
-func (l *Label) GetDefault() bool {
-       if l == nil || l.Default == nil {
-               return false
-       }
-       return *l.Default
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (l *Label) GetDescription() string {
-       if l == nil || l.Description == nil {
-               return ""
-       }
-       return *l.Description
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (l *Label) GetID() int64 {
-       if l == nil || l.ID == nil {
-               return 0
-       }
-       return *l.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (l *Label) GetName() string {
-       if l == nil || l.Name == nil {
-               return ""
-       }
-       return *l.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (l *Label) GetNodeID() string {
-       if l == nil || l.NodeID == nil {
-               return ""
-       }
-       return *l.NodeID
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (l *Label) GetURL() string {
-       if l == nil || l.URL == nil {
-               return ""
-       }
-       return *l.URL
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (l *LabelEvent) GetAction() string {
-       if l == nil || l.Action == nil {
-               return ""
-       }
-       return *l.Action
-}
-
-// GetChanges returns the Changes field.
-func (l *LabelEvent) GetChanges() *EditChange {
-       if l == nil {
-               return nil
-       }
-       return l.Changes
-}
-
-// GetInstallation returns the Installation field.
-func (l *LabelEvent) GetInstallation() *Installation {
-       if l == nil {
-               return nil
-       }
-       return l.Installation
-}
-
-// GetLabel returns the Label field.
-func (l *LabelEvent) GetLabel() *Label {
-       if l == nil {
-               return nil
-       }
-       return l.Label
-}
-
-// GetOrg returns the Org field.
-func (l *LabelEvent) GetOrg() *Organization {
-       if l == nil {
-               return nil
-       }
-       return l.Org
-}
-
-// GetRepo returns the Repo field.
-func (l *LabelEvent) GetRepo() *Repository {
-       if l == nil {
-               return nil
-       }
-       return l.Repo
-}
-
-// GetColor returns the Color field if it's non-nil, zero value otherwise.
-func (l *LabelResult) GetColor() string {
-       if l == nil || l.Color == nil {
-               return ""
-       }
-       return *l.Color
-}
-
-// GetDefault returns the Default field if it's non-nil, zero value otherwise.
-func (l *LabelResult) GetDefault() bool {
-       if l == nil || l.Default == nil {
-               return false
-       }
-       return *l.Default
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (l *LabelResult) GetDescription() string {
-       if l == nil || l.Description == nil {
-               return ""
-       }
-       return *l.Description
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (l *LabelResult) GetID() int64 {
-       if l == nil || l.ID == nil {
-               return 0
-       }
-       return *l.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (l *LabelResult) GetName() string {
-       if l == nil || l.Name == nil {
-               return ""
-       }
-       return *l.Name
-}
-
-// GetScore returns the Score field.
-func (l *LabelResult) GetScore() *float64 {
-       if l == nil {
-               return nil
-       }
-       return l.Score
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (l *LabelResult) GetURL() string {
-       if l == nil || l.URL == nil {
-               return ""
-       }
-       return *l.URL
-}
-
-// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
-func (l *LabelsSearchResult) GetIncompleteResults() bool {
-       if l == nil || l.IncompleteResults == nil {
-               return false
-       }
-       return *l.IncompleteResults
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (l *LabelsSearchResult) GetTotal() int {
-       if l == nil || l.Total == nil {
-               return 0
-       }
-       return *l.Total
-}
-
-// GetOID returns the OID field if it's non-nil, zero value otherwise.
-func (l *LargeFile) GetOID() string {
-       if l == nil || l.OID == nil {
-               return ""
-       }
-       return *l.OID
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (l *LargeFile) GetPath() string {
-       if l == nil || l.Path == nil {
-               return ""
-       }
-       return *l.Path
-}
-
-// GetRefName returns the RefName field if it's non-nil, zero value otherwise.
-func (l *LargeFile) GetRefName() string {
-       if l == nil || l.RefName == nil {
-               return ""
-       }
-       return *l.RefName
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (l *LargeFile) GetSize() int {
-       if l == nil || l.Size == nil {
-               return 0
-       }
-       return *l.Size
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (l *License) GetBody() string {
-       if l == nil || l.Body == nil {
-               return ""
-       }
-       return *l.Body
-}
-
-// GetConditions returns the Conditions field if it's non-nil, zero value otherwise.
-func (l *License) GetConditions() []string {
-       if l == nil || l.Conditions == nil {
-               return nil
-       }
-       return *l.Conditions
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (l *License) GetDescription() string {
-       if l == nil || l.Description == nil {
-               return ""
-       }
-       return *l.Description
-}
-
-// GetFeatured returns the Featured field if it's non-nil, zero value otherwise.
-func (l *License) GetFeatured() bool {
-       if l == nil || l.Featured == nil {
-               return false
-       }
-       return *l.Featured
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (l *License) GetHTMLURL() string {
-       if l == nil || l.HTMLURL == nil {
-               return ""
-       }
-       return *l.HTMLURL
-}
-
-// GetImplementation returns the Implementation field if it's non-nil, zero value otherwise.
-func (l *License) GetImplementation() string {
-       if l == nil || l.Implementation == nil {
-               return ""
-       }
-       return *l.Implementation
-}
-
-// GetKey returns the Key field if it's non-nil, zero value otherwise.
-func (l *License) GetKey() string {
-       if l == nil || l.Key == nil {
-               return ""
-       }
-       return *l.Key
-}
-
-// GetLimitations returns the Limitations field if it's non-nil, zero value otherwise.
-func (l *License) GetLimitations() []string {
-       if l == nil || l.Limitations == nil {
-               return nil
-       }
-       return *l.Limitations
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (l *License) GetName() string {
-       if l == nil || l.Name == nil {
-               return ""
-       }
-       return *l.Name
-}
-
-// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise.
-func (l *License) GetPermissions() []string {
-       if l == nil || l.Permissions == nil {
-               return nil
-       }
-       return *l.Permissions
-}
-
-// GetSPDXID returns the SPDXID field if it's non-nil, zero value otherwise.
-func (l *License) GetSPDXID() string {
-       if l == nil || l.SPDXID == nil {
-               return ""
-       }
-       return *l.SPDXID
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (l *License) GetURL() string {
-       if l == nil || l.URL == nil {
-               return ""
-       }
-       return *l.URL
-}
-
-// GetCheckName returns the CheckName field if it's non-nil, zero value otherwise.
-func (l *ListCheckRunsOptions) GetCheckName() string {
-       if l == nil || l.CheckName == nil {
-               return ""
-       }
-       return *l.CheckName
-}
-
-// GetFilter returns the Filter field if it's non-nil, zero value otherwise.
-func (l *ListCheckRunsOptions) GetFilter() string {
-       if l == nil || l.Filter == nil {
-               return ""
-       }
-       return *l.Filter
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (l *ListCheckRunsOptions) GetStatus() string {
-       if l == nil || l.Status == nil {
-               return ""
-       }
-       return *l.Status
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (l *ListCheckRunsResults) GetTotal() int {
-       if l == nil || l.Total == nil {
-               return 0
-       }
-       return *l.Total
-}
-
-// GetAppID returns the AppID field if it's non-nil, zero value otherwise.
-func (l *ListCheckSuiteOptions) GetAppID() int {
-       if l == nil || l.AppID == nil {
-               return 0
-       }
-       return *l.AppID
-}
-
-// GetCheckName returns the CheckName field if it's non-nil, zero value otherwise.
-func (l *ListCheckSuiteOptions) GetCheckName() string {
-       if l == nil || l.CheckName == nil {
-               return ""
-       }
-       return *l.CheckName
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (l *ListCheckSuiteResults) GetTotal() int {
-       if l == nil || l.Total == nil {
-               return 0
-       }
-       return *l.Total
-}
-
-// GetAffiliation returns the Affiliation field if it's non-nil, zero value otherwise.
-func (l *ListCollaboratorOptions) GetAffiliation() string {
-       if l == nil || l.Affiliation == nil {
-               return ""
-       }
-       return *l.Affiliation
-}
-
-// GetEffectiveDate returns the EffectiveDate field if it's non-nil, zero value otherwise.
-func (m *MarketplacePendingChange) GetEffectiveDate() Timestamp {
-       if m == nil || m.EffectiveDate == nil {
-               return Timestamp{}
-       }
-       return *m.EffectiveDate
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (m *MarketplacePendingChange) GetID() int64 {
-       if m == nil || m.ID == nil {
-               return 0
-       }
-       return *m.ID
-}
-
-// GetPlan returns the Plan field.
-func (m *MarketplacePendingChange) GetPlan() *MarketplacePlan {
-       if m == nil {
-               return nil
-       }
-       return m.Plan
-}
-
-// GetUnitCount returns the UnitCount field if it's non-nil, zero value otherwise.
-func (m *MarketplacePendingChange) GetUnitCount() int {
-       if m == nil || m.UnitCount == nil {
-               return 0
-       }
-       return *m.UnitCount
-}
-
-// GetAccountsURL returns the AccountsURL field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetAccountsURL() string {
-       if m == nil || m.AccountsURL == nil {
-               return ""
-       }
-       return *m.AccountsURL
-}
-
-// GetBullets returns the Bullets field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetBullets() []string {
-       if m == nil || m.Bullets == nil {
-               return nil
-       }
-       return *m.Bullets
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetDescription() string {
-       if m == nil || m.Description == nil {
-               return ""
-       }
-       return *m.Description
-}
-
-// GetHasFreeTrial returns the HasFreeTrial field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetHasFreeTrial() bool {
-       if m == nil || m.HasFreeTrial == nil {
-               return false
-       }
-       return *m.HasFreeTrial
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetID() int64 {
-       if m == nil || m.ID == nil {
-               return 0
-       }
-       return *m.ID
-}
-
-// GetMonthlyPriceInCents returns the MonthlyPriceInCents field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetMonthlyPriceInCents() int {
-       if m == nil || m.MonthlyPriceInCents == nil {
-               return 0
-       }
-       return *m.MonthlyPriceInCents
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetName() string {
-       if m == nil || m.Name == nil {
-               return ""
-       }
-       return *m.Name
-}
-
-// GetPriceModel returns the PriceModel field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetPriceModel() string {
-       if m == nil || m.PriceModel == nil {
-               return ""
-       }
-       return *m.PriceModel
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetState() string {
-       if m == nil || m.State == nil {
-               return ""
-       }
-       return *m.State
-}
-
-// GetUnitName returns the UnitName field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetUnitName() string {
-       if m == nil || m.UnitName == nil {
-               return ""
-       }
-       return *m.UnitName
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetURL() string {
-       if m == nil || m.URL == nil {
-               return ""
-       }
-       return *m.URL
-}
-
-// GetYearlyPriceInCents returns the YearlyPriceInCents field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlan) GetYearlyPriceInCents() int {
-       if m == nil || m.YearlyPriceInCents == nil {
-               return 0
-       }
-       return *m.YearlyPriceInCents
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlanAccount) GetEmail() string {
-       if m == nil || m.Email == nil {
-               return ""
-       }
-       return *m.Email
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlanAccount) GetID() int64 {
-       if m == nil || m.ID == nil {
-               return 0
-       }
-       return *m.ID
-}
-
-// GetLogin returns the Login field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlanAccount) GetLogin() string {
-       if m == nil || m.Login == nil {
-               return ""
-       }
-       return *m.Login
-}
-
-// GetMarketplacePendingChange returns the MarketplacePendingChange field.
-func (m *MarketplacePlanAccount) GetMarketplacePendingChange() *MarketplacePendingChange {
-       if m == nil {
-               return nil
-       }
-       return m.MarketplacePendingChange
-}
-
-// GetMarketplacePurchase returns the MarketplacePurchase field.
-func (m *MarketplacePlanAccount) GetMarketplacePurchase() *MarketplacePurchase {
-       if m == nil {
-               return nil
-       }
-       return m.MarketplacePurchase
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlanAccount) GetNodeID() string {
-       if m == nil || m.NodeID == nil {
-               return ""
-       }
-       return *m.NodeID
-}
-
-// GetOrganizationBillingEmail returns the OrganizationBillingEmail field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlanAccount) GetOrganizationBillingEmail() string {
-       if m == nil || m.OrganizationBillingEmail == nil {
-               return ""
-       }
-       return *m.OrganizationBillingEmail
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlanAccount) GetType() string {
-       if m == nil || m.Type == nil {
-               return ""
-       }
-       return *m.Type
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (m *MarketplacePlanAccount) GetURL() string {
-       if m == nil || m.URL == nil {
-               return ""
-       }
-       return *m.URL
-}
-
-// GetAccount returns the Account field.
-func (m *MarketplacePurchase) GetAccount() *MarketplacePlanAccount {
-       if m == nil {
-               return nil
-       }
-       return m.Account
-}
-
-// GetBillingCycle returns the BillingCycle field if it's non-nil, zero value otherwise.
-func (m *MarketplacePurchase) GetBillingCycle() string {
-       if m == nil || m.BillingCycle == nil {
-               return ""
-       }
-       return *m.BillingCycle
-}
-
-// GetFreeTrialEndsOn returns the FreeTrialEndsOn field if it's non-nil, zero value otherwise.
-func (m *MarketplacePurchase) GetFreeTrialEndsOn() Timestamp {
-       if m == nil || m.FreeTrialEndsOn == nil {
-               return Timestamp{}
-       }
-       return *m.FreeTrialEndsOn
-}
-
-// GetNextBillingDate returns the NextBillingDate field if it's non-nil, zero value otherwise.
-func (m *MarketplacePurchase) GetNextBillingDate() Timestamp {
-       if m == nil || m.NextBillingDate == nil {
-               return Timestamp{}
-       }
-       return *m.NextBillingDate
-}
-
-// GetOnFreeTrial returns the OnFreeTrial field if it's non-nil, zero value otherwise.
-func (m *MarketplacePurchase) GetOnFreeTrial() bool {
-       if m == nil || m.OnFreeTrial == nil {
-               return false
-       }
-       return *m.OnFreeTrial
-}
-
-// GetPlan returns the Plan field.
-func (m *MarketplacePurchase) GetPlan() *MarketplacePlan {
-       if m == nil {
-               return nil
-       }
-       return m.Plan
-}
-
-// GetUnitCount returns the UnitCount field if it's non-nil, zero value otherwise.
-func (m *MarketplacePurchase) GetUnitCount() int {
-       if m == nil || m.UnitCount == nil {
-               return 0
-       }
-       return *m.UnitCount
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (m *MarketplacePurchaseEvent) GetAction() string {
-       if m == nil || m.Action == nil {
-               return ""
-       }
-       return *m.Action
-}
-
-// GetEffectiveDate returns the EffectiveDate field if it's non-nil, zero value otherwise.
-func (m *MarketplacePurchaseEvent) GetEffectiveDate() Timestamp {
-       if m == nil || m.EffectiveDate == nil {
-               return Timestamp{}
-       }
-       return *m.EffectiveDate
-}
-
-// GetInstallation returns the Installation field.
-func (m *MarketplacePurchaseEvent) GetInstallation() *Installation {
-       if m == nil {
-               return nil
-       }
-       return m.Installation
-}
-
-// GetMarketplacePurchase returns the MarketplacePurchase field.
-func (m *MarketplacePurchaseEvent) GetMarketplacePurchase() *MarketplacePurchase {
-       if m == nil {
-               return nil
-       }
-       return m.MarketplacePurchase
-}
-
-// GetPreviousMarketplacePurchase returns the PreviousMarketplacePurchase field.
-func (m *MarketplacePurchaseEvent) GetPreviousMarketplacePurchase() *MarketplacePurchase {
-       if m == nil {
-               return nil
-       }
-       return m.PreviousMarketplacePurchase
-}
-
-// GetSender returns the Sender field.
-func (m *MarketplacePurchaseEvent) GetSender() *User {
-       if m == nil {
-               return nil
-       }
-       return m.Sender
-}
-
-// GetText returns the Text field if it's non-nil, zero value otherwise.
-func (m *Match) GetText() string {
-       if m == nil || m.Text == nil {
-               return ""
-       }
-       return *m.Text
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (m *MemberEvent) GetAction() string {
-       if m == nil || m.Action == nil {
-               return ""
-       }
-       return *m.Action
-}
-
-// GetInstallation returns the Installation field.
-func (m *MemberEvent) GetInstallation() *Installation {
-       if m == nil {
-               return nil
-       }
-       return m.Installation
-}
-
-// GetMember returns the Member field.
-func (m *MemberEvent) GetMember() *User {
-       if m == nil {
-               return nil
-       }
-       return m.Member
-}
-
-// GetRepo returns the Repo field.
-func (m *MemberEvent) GetRepo() *Repository {
-       if m == nil {
-               return nil
-       }
-       return m.Repo
-}
-
-// GetSender returns the Sender field.
-func (m *MemberEvent) GetSender() *User {
-       if m == nil {
-               return nil
-       }
-       return m.Sender
-}
-
-// GetOrganization returns the Organization field.
-func (m *Membership) GetOrganization() *Organization {
-       if m == nil {
-               return nil
-       }
-       return m.Organization
-}
-
-// GetOrganizationURL returns the OrganizationURL field if it's non-nil, zero value otherwise.
-func (m *Membership) GetOrganizationURL() string {
-       if m == nil || m.OrganizationURL == nil {
-               return ""
-       }
-       return *m.OrganizationURL
-}
-
-// GetRole returns the Role field if it's non-nil, zero value otherwise.
-func (m *Membership) GetRole() string {
-       if m == nil || m.Role == nil {
-               return ""
-       }
-       return *m.Role
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (m *Membership) GetState() string {
-       if m == nil || m.State == nil {
-               return ""
-       }
-       return *m.State
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (m *Membership) GetURL() string {
-       if m == nil || m.URL == nil {
-               return ""
-       }
-       return *m.URL
-}
-
-// GetUser returns the User field.
-func (m *Membership) GetUser() *User {
-       if m == nil {
-               return nil
-       }
-       return m.User
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (m *MembershipEvent) GetAction() string {
-       if m == nil || m.Action == nil {
-               return ""
-       }
-       return *m.Action
-}
-
-// GetInstallation returns the Installation field.
-func (m *MembershipEvent) GetInstallation() *Installation {
-       if m == nil {
-               return nil
-       }
-       return m.Installation
-}
-
-// GetMember returns the Member field.
-func (m *MembershipEvent) GetMember() *User {
-       if m == nil {
-               return nil
-       }
-       return m.Member
-}
-
-// GetOrg returns the Org field.
-func (m *MembershipEvent) GetOrg() *Organization {
-       if m == nil {
-               return nil
-       }
-       return m.Org
-}
-
-// GetScope returns the Scope field if it's non-nil, zero value otherwise.
-func (m *MembershipEvent) GetScope() string {
-       if m == nil || m.Scope == nil {
-               return ""
-       }
-       return *m.Scope
-}
-
-// GetSender returns the Sender field.
-func (m *MembershipEvent) GetSender() *User {
-       if m == nil {
-               return nil
-       }
-       return m.Sender
-}
-
-// GetTeam returns the Team field.
-func (m *MembershipEvent) GetTeam() *Team {
-       if m == nil {
-               return nil
-       }
-       return m.Team
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (m *MetaEvent) GetAction() string {
-       if m == nil || m.Action == nil {
-               return ""
-       }
-       return *m.Action
-}
-
-// GetHook returns the Hook field.
-func (m *MetaEvent) GetHook() *Hook {
-       if m == nil {
-               return nil
-       }
-       return m.Hook
-}
-
-// GetHookID returns the HookID field if it's non-nil, zero value otherwise.
-func (m *MetaEvent) GetHookID() int64 {
-       if m == nil || m.HookID == nil {
-               return 0
-       }
-       return *m.HookID
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (m *Metric) GetHTMLURL() string {
-       if m == nil || m.HTMLURL == nil {
-               return ""
-       }
-       return *m.HTMLURL
-}
-
-// GetKey returns the Key field if it's non-nil, zero value otherwise.
-func (m *Metric) GetKey() string {
-       if m == nil || m.Key == nil {
-               return ""
-       }
-       return *m.Key
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (m *Metric) GetName() string {
-       if m == nil || m.Name == nil {
-               return ""
-       }
-       return *m.Name
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (m *Metric) GetURL() string {
-       if m == nil || m.URL == nil {
-               return ""
-       }
-       return *m.URL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (m *Migration) GetCreatedAt() string {
-       if m == nil || m.CreatedAt == nil {
-               return ""
-       }
-       return *m.CreatedAt
-}
-
-// GetExcludeAttachments returns the ExcludeAttachments field if it's non-nil, zero value otherwise.
-func (m *Migration) GetExcludeAttachments() bool {
-       if m == nil || m.ExcludeAttachments == nil {
-               return false
-       }
-       return *m.ExcludeAttachments
-}
-
-// GetGUID returns the GUID field if it's non-nil, zero value otherwise.
-func (m *Migration) GetGUID() string {
-       if m == nil || m.GUID == nil {
-               return ""
-       }
-       return *m.GUID
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (m *Migration) GetID() int64 {
-       if m == nil || m.ID == nil {
-               return 0
-       }
-       return *m.ID
-}
-
-// GetLockRepositories returns the LockRepositories field if it's non-nil, zero value otherwise.
-func (m *Migration) GetLockRepositories() bool {
-       if m == nil || m.LockRepositories == nil {
-               return false
-       }
-       return *m.LockRepositories
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (m *Migration) GetState() string {
-       if m == nil || m.State == nil {
-               return ""
-       }
-       return *m.State
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (m *Migration) GetUpdatedAt() string {
-       if m == nil || m.UpdatedAt == nil {
-               return ""
-       }
-       return *m.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (m *Migration) GetURL() string {
-       if m == nil || m.URL == nil {
-               return ""
-       }
-       return *m.URL
-}
-
-// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetClosedAt() time.Time {
-       if m == nil || m.ClosedAt == nil {
-               return time.Time{}
-       }
-       return *m.ClosedAt
-}
-
-// GetClosedIssues returns the ClosedIssues field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetClosedIssues() int {
-       if m == nil || m.ClosedIssues == nil {
-               return 0
-       }
-       return *m.ClosedIssues
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetCreatedAt() time.Time {
-       if m == nil || m.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *m.CreatedAt
-}
-
-// GetCreator returns the Creator field.
-func (m *Milestone) GetCreator() *User {
-       if m == nil {
-               return nil
-       }
-       return m.Creator
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetDescription() string {
-       if m == nil || m.Description == nil {
-               return ""
-       }
-       return *m.Description
-}
-
-// GetDueOn returns the DueOn field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetDueOn() time.Time {
-       if m == nil || m.DueOn == nil {
-               return time.Time{}
-       }
-       return *m.DueOn
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetHTMLURL() string {
-       if m == nil || m.HTMLURL == nil {
-               return ""
-       }
-       return *m.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetID() int64 {
-       if m == nil || m.ID == nil {
-               return 0
-       }
-       return *m.ID
-}
-
-// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetLabelsURL() string {
-       if m == nil || m.LabelsURL == nil {
-               return ""
-       }
-       return *m.LabelsURL
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetNodeID() string {
-       if m == nil || m.NodeID == nil {
-               return ""
-       }
-       return *m.NodeID
-}
-
-// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetNumber() int {
-       if m == nil || m.Number == nil {
-               return 0
-       }
-       return *m.Number
-}
-
-// GetOpenIssues returns the OpenIssues field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetOpenIssues() int {
-       if m == nil || m.OpenIssues == nil {
-               return 0
-       }
-       return *m.OpenIssues
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetState() string {
-       if m == nil || m.State == nil {
-               return ""
-       }
-       return *m.State
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetTitle() string {
-       if m == nil || m.Title == nil {
-               return ""
-       }
-       return *m.Title
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetUpdatedAt() time.Time {
-       if m == nil || m.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *m.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (m *Milestone) GetURL() string {
-       if m == nil || m.URL == nil {
-               return ""
-       }
-       return *m.URL
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (m *MilestoneEvent) GetAction() string {
-       if m == nil || m.Action == nil {
-               return ""
-       }
-       return *m.Action
-}
-
-// GetChanges returns the Changes field.
-func (m *MilestoneEvent) GetChanges() *EditChange {
-       if m == nil {
-               return nil
-       }
-       return m.Changes
-}
-
-// GetInstallation returns the Installation field.
-func (m *MilestoneEvent) GetInstallation() *Installation {
-       if m == nil {
-               return nil
-       }
-       return m.Installation
-}
-
-// GetMilestone returns the Milestone field.
-func (m *MilestoneEvent) GetMilestone() *Milestone {
-       if m == nil {
-               return nil
-       }
-       return m.Milestone
-}
-
-// GetOrg returns the Org field.
-func (m *MilestoneEvent) GetOrg() *Organization {
-       if m == nil {
-               return nil
-       }
-       return m.Org
-}
-
-// GetRepo returns the Repo field.
-func (m *MilestoneEvent) GetRepo() *Repository {
-       if m == nil {
-               return nil
-       }
-       return m.Repo
-}
-
-// GetSender returns the Sender field.
-func (m *MilestoneEvent) GetSender() *User {
-       if m == nil {
-               return nil
-       }
-       return m.Sender
-}
-
-// GetClosedMilestones returns the ClosedMilestones field if it's non-nil, zero value otherwise.
-func (m *MilestoneStats) GetClosedMilestones() int {
-       if m == nil || m.ClosedMilestones == nil {
-               return 0
-       }
-       return *m.ClosedMilestones
-}
-
-// GetOpenMilestones returns the OpenMilestones field if it's non-nil, zero value otherwise.
-func (m *MilestoneStats) GetOpenMilestones() int {
-       if m == nil || m.OpenMilestones == nil {
-               return 0
-       }
-       return *m.OpenMilestones
-}
-
-// GetTotalMilestones returns the TotalMilestones field if it's non-nil, zero value otherwise.
-func (m *MilestoneStats) GetTotalMilestones() int {
-       if m == nil || m.TotalMilestones == nil {
-               return 0
-       }
-       return *m.TotalMilestones
-}
-
-// GetBase returns the Base field if it's non-nil, zero value otherwise.
-func (n *NewPullRequest) GetBase() string {
-       if n == nil || n.Base == nil {
-               return ""
-       }
-       return *n.Base
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (n *NewPullRequest) GetBody() string {
-       if n == nil || n.Body == nil {
-               return ""
-       }
-       return *n.Body
-}
-
-// GetDraft returns the Draft field if it's non-nil, zero value otherwise.
-func (n *NewPullRequest) GetDraft() bool {
-       if n == nil || n.Draft == nil {
-               return false
-       }
-       return *n.Draft
-}
-
-// GetHead returns the Head field if it's non-nil, zero value otherwise.
-func (n *NewPullRequest) GetHead() string {
-       if n == nil || n.Head == nil {
-               return ""
-       }
-       return *n.Head
-}
-
-// GetIssue returns the Issue field if it's non-nil, zero value otherwise.
-func (n *NewPullRequest) GetIssue() int {
-       if n == nil || n.Issue == nil {
-               return 0
-       }
-       return *n.Issue
-}
-
-// GetMaintainerCanModify returns the MaintainerCanModify field if it's non-nil, zero value otherwise.
-func (n *NewPullRequest) GetMaintainerCanModify() bool {
-       if n == nil || n.MaintainerCanModify == nil {
-               return false
-       }
-       return *n.MaintainerCanModify
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (n *NewPullRequest) GetTitle() string {
-       if n == nil || n.Title == nil {
-               return ""
-       }
-       return *n.Title
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (n *NewTeam) GetDescription() string {
-       if n == nil || n.Description == nil {
-               return ""
-       }
-       return *n.Description
-}
-
-// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise.
-func (n *NewTeam) GetLDAPDN() string {
-       if n == nil || n.LDAPDN == nil {
-               return ""
-       }
-       return *n.LDAPDN
-}
-
-// GetParentTeamID returns the ParentTeamID field if it's non-nil, zero value otherwise.
-func (n *NewTeam) GetParentTeamID() int64 {
-       if n == nil || n.ParentTeamID == nil {
-               return 0
-       }
-       return *n.ParentTeamID
-}
-
-// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
-func (n *NewTeam) GetPermission() string {
-       if n == nil || n.Permission == nil {
-               return ""
-       }
-       return *n.Permission
-}
-
-// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise.
-func (n *NewTeam) GetPrivacy() string {
-       if n == nil || n.Privacy == nil {
-               return ""
-       }
-       return *n.Privacy
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (n *Notification) GetID() string {
-       if n == nil || n.ID == nil {
-               return ""
-       }
-       return *n.ID
-}
-
-// GetLastReadAt returns the LastReadAt field if it's non-nil, zero value otherwise.
-func (n *Notification) GetLastReadAt() time.Time {
-       if n == nil || n.LastReadAt == nil {
-               return time.Time{}
-       }
-       return *n.LastReadAt
-}
-
-// GetReason returns the Reason field if it's non-nil, zero value otherwise.
-func (n *Notification) GetReason() string {
-       if n == nil || n.Reason == nil {
-               return ""
-       }
-       return *n.Reason
-}
-
-// GetRepository returns the Repository field.
-func (n *Notification) GetRepository() *Repository {
-       if n == nil {
-               return nil
-       }
-       return n.Repository
-}
-
-// GetSubject returns the Subject field.
-func (n *Notification) GetSubject() *NotificationSubject {
-       if n == nil {
-               return nil
-       }
-       return n.Subject
-}
-
-// GetUnread returns the Unread field if it's non-nil, zero value otherwise.
-func (n *Notification) GetUnread() bool {
-       if n == nil || n.Unread == nil {
-               return false
-       }
-       return *n.Unread
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (n *Notification) GetUpdatedAt() time.Time {
-       if n == nil || n.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *n.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (n *Notification) GetURL() string {
-       if n == nil || n.URL == nil {
-               return ""
-       }
-       return *n.URL
-}
-
-// GetLatestCommentURL returns the LatestCommentURL field if it's non-nil, zero value otherwise.
-func (n *NotificationSubject) GetLatestCommentURL() string {
-       if n == nil || n.LatestCommentURL == nil {
-               return ""
-       }
-       return *n.LatestCommentURL
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (n *NotificationSubject) GetTitle() string {
-       if n == nil || n.Title == nil {
-               return ""
-       }
-       return *n.Title
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (n *NotificationSubject) GetType() string {
-       if n == nil || n.Type == nil {
-               return ""
-       }
-       return *n.Type
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (n *NotificationSubject) GetURL() string {
-       if n == nil || n.URL == nil {
-               return ""
-       }
-       return *n.URL
-}
-
-// GetClientID returns the ClientID field if it's non-nil, zero value otherwise.
-func (o *OAuthAPP) GetClientID() string {
-       if o == nil || o.ClientID == nil {
-               return ""
-       }
-       return *o.ClientID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (o *OAuthAPP) GetName() string {
-       if o == nil || o.Name == nil {
-               return ""
-       }
-       return *o.Name
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (o *OAuthAPP) GetURL() string {
-       if o == nil || o.URL == nil {
-               return ""
-       }
-       return *o.URL
-}
-
-// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
-func (o *Organization) GetAvatarURL() string {
-       if o == nil || o.AvatarURL == nil {
-               return ""
-       }
-       return *o.AvatarURL
-}
-
-// GetBillingEmail returns the BillingEmail field if it's non-nil, zero value otherwise.
-func (o *Organization) GetBillingEmail() string {
-       if o == nil || o.BillingEmail == nil {
-               return ""
-       }
-       return *o.BillingEmail
-}
-
-// GetBlog returns the Blog field if it's non-nil, zero value otherwise.
-func (o *Organization) GetBlog() string {
-       if o == nil || o.Blog == nil {
-               return ""
-       }
-       return *o.Blog
-}
-
-// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise.
-func (o *Organization) GetCollaborators() int {
-       if o == nil || o.Collaborators == nil {
-               return 0
-       }
-       return *o.Collaborators
-}
-
-// GetCompany returns the Company field if it's non-nil, zero value otherwise.
-func (o *Organization) GetCompany() string {
-       if o == nil || o.Company == nil {
-               return ""
-       }
-       return *o.Company
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (o *Organization) GetCreatedAt() time.Time {
-       if o == nil || o.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *o.CreatedAt
-}
-
-// GetDefaultRepoPermission returns the DefaultRepoPermission field if it's non-nil, zero value otherwise.
-func (o *Organization) GetDefaultRepoPermission() string {
-       if o == nil || o.DefaultRepoPermission == nil {
-               return ""
-       }
-       return *o.DefaultRepoPermission
-}
-
-// GetDefaultRepoSettings returns the DefaultRepoSettings field if it's non-nil, zero value otherwise.
-func (o *Organization) GetDefaultRepoSettings() string {
-       if o == nil || o.DefaultRepoSettings == nil {
-               return ""
-       }
-       return *o.DefaultRepoSettings
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (o *Organization) GetDescription() string {
-       if o == nil || o.Description == nil {
-               return ""
-       }
-       return *o.Description
-}
-
-// GetDiskUsage returns the DiskUsage field if it's non-nil, zero value otherwise.
-func (o *Organization) GetDiskUsage() int {
-       if o == nil || o.DiskUsage == nil {
-               return 0
-       }
-       return *o.DiskUsage
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (o *Organization) GetEmail() string {
-       if o == nil || o.Email == nil {
-               return ""
-       }
-       return *o.Email
-}
-
-// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
-func (o *Organization) GetEventsURL() string {
-       if o == nil || o.EventsURL == nil {
-               return ""
-       }
-       return *o.EventsURL
-}
-
-// GetFollowers returns the Followers field if it's non-nil, zero value otherwise.
-func (o *Organization) GetFollowers() int {
-       if o == nil || o.Followers == nil {
-               return 0
-       }
-       return *o.Followers
-}
-
-// GetFollowing returns the Following field if it's non-nil, zero value otherwise.
-func (o *Organization) GetFollowing() int {
-       if o == nil || o.Following == nil {
-               return 0
-       }
-       return *o.Following
-}
-
-// GetHasOrganizationProjects returns the HasOrganizationProjects field if it's non-nil, zero value otherwise.
-func (o *Organization) GetHasOrganizationProjects() bool {
-       if o == nil || o.HasOrganizationProjects == nil {
-               return false
-       }
-       return *o.HasOrganizationProjects
-}
-
-// GetHasRepositoryProjects returns the HasRepositoryProjects field if it's non-nil, zero value otherwise.
-func (o *Organization) GetHasRepositoryProjects() bool {
-       if o == nil || o.HasRepositoryProjects == nil {
-               return false
-       }
-       return *o.HasRepositoryProjects
-}
-
-// GetHooksURL returns the HooksURL field if it's non-nil, zero value otherwise.
-func (o *Organization) GetHooksURL() string {
-       if o == nil || o.HooksURL == nil {
-               return ""
-       }
-       return *o.HooksURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (o *Organization) GetHTMLURL() string {
-       if o == nil || o.HTMLURL == nil {
-               return ""
-       }
-       return *o.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (o *Organization) GetID() int64 {
-       if o == nil || o.ID == nil {
-               return 0
-       }
-       return *o.ID
-}
-
-// GetIssuesURL returns the IssuesURL field if it's non-nil, zero value otherwise.
-func (o *Organization) GetIssuesURL() string {
-       if o == nil || o.IssuesURL == nil {
-               return ""
-       }
-       return *o.IssuesURL
-}
-
-// GetIsVerified returns the IsVerified field if it's non-nil, zero value otherwise.
-func (o *Organization) GetIsVerified() bool {
-       if o == nil || o.IsVerified == nil {
-               return false
-       }
-       return *o.IsVerified
-}
-
-// GetLocation returns the Location field if it's non-nil, zero value otherwise.
-func (o *Organization) GetLocation() string {
-       if o == nil || o.Location == nil {
-               return ""
-       }
-       return *o.Location
-}
-
-// GetLogin returns the Login field if it's non-nil, zero value otherwise.
-func (o *Organization) GetLogin() string {
-       if o == nil || o.Login == nil {
-               return ""
-       }
-       return *o.Login
-}
-
-// GetMembersAllowedRepositoryCreationType returns the MembersAllowedRepositoryCreationType field if it's non-nil, zero value otherwise.
-func (o *Organization) GetMembersAllowedRepositoryCreationType() string {
-       if o == nil || o.MembersAllowedRepositoryCreationType == nil {
-               return ""
-       }
-       return *o.MembersAllowedRepositoryCreationType
-}
-
-// GetMembersCanCreateInternalRepos returns the MembersCanCreateInternalRepos field if it's non-nil, zero value otherwise.
-func (o *Organization) GetMembersCanCreateInternalRepos() bool {
-       if o == nil || o.MembersCanCreateInternalRepos == nil {
-               return false
-       }
-       return *o.MembersCanCreateInternalRepos
-}
-
-// GetMembersCanCreatePrivateRepos returns the MembersCanCreatePrivateRepos field if it's non-nil, zero value otherwise.
-func (o *Organization) GetMembersCanCreatePrivateRepos() bool {
-       if o == nil || o.MembersCanCreatePrivateRepos == nil {
-               return false
-       }
-       return *o.MembersCanCreatePrivateRepos
-}
-
-// GetMembersCanCreatePublicRepos returns the MembersCanCreatePublicRepos field if it's non-nil, zero value otherwise.
-func (o *Organization) GetMembersCanCreatePublicRepos() bool {
-       if o == nil || o.MembersCanCreatePublicRepos == nil {
-               return false
-       }
-       return *o.MembersCanCreatePublicRepos
-}
-
-// GetMembersCanCreateRepos returns the MembersCanCreateRepos field if it's non-nil, zero value otherwise.
-func (o *Organization) GetMembersCanCreateRepos() bool {
-       if o == nil || o.MembersCanCreateRepos == nil {
-               return false
-       }
-       return *o.MembersCanCreateRepos
-}
-
-// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise.
-func (o *Organization) GetMembersURL() string {
-       if o == nil || o.MembersURL == nil {
-               return ""
-       }
-       return *o.MembersURL
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (o *Organization) GetName() string {
-       if o == nil || o.Name == nil {
-               return ""
-       }
-       return *o.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (o *Organization) GetNodeID() string {
-       if o == nil || o.NodeID == nil {
-               return ""
-       }
-       return *o.NodeID
-}
-
-// GetOwnedPrivateRepos returns the OwnedPrivateRepos field if it's non-nil, zero value otherwise.
-func (o *Organization) GetOwnedPrivateRepos() int {
-       if o == nil || o.OwnedPrivateRepos == nil {
-               return 0
-       }
-       return *o.OwnedPrivateRepos
-}
-
-// GetPlan returns the Plan field.
-func (o *Organization) GetPlan() *Plan {
-       if o == nil {
-               return nil
-       }
-       return o.Plan
-}
-
-// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise.
-func (o *Organization) GetPrivateGists() int {
-       if o == nil || o.PrivateGists == nil {
-               return 0
-       }
-       return *o.PrivateGists
-}
-
-// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise.
-func (o *Organization) GetPublicGists() int {
-       if o == nil || o.PublicGists == nil {
-               return 0
-       }
-       return *o.PublicGists
-}
-
-// GetPublicMembersURL returns the PublicMembersURL field if it's non-nil, zero value otherwise.
-func (o *Organization) GetPublicMembersURL() string {
-       if o == nil || o.PublicMembersURL == nil {
-               return ""
-       }
-       return *o.PublicMembersURL
-}
-
-// GetPublicRepos returns the PublicRepos field if it's non-nil, zero value otherwise.
-func (o *Organization) GetPublicRepos() int {
-       if o == nil || o.PublicRepos == nil {
-               return 0
-       }
-       return *o.PublicRepos
-}
-
-// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise.
-func (o *Organization) GetReposURL() string {
-       if o == nil || o.ReposURL == nil {
-               return ""
-       }
-       return *o.ReposURL
-}
-
-// GetTotalPrivateRepos returns the TotalPrivateRepos field if it's non-nil, zero value otherwise.
-func (o *Organization) GetTotalPrivateRepos() int {
-       if o == nil || o.TotalPrivateRepos == nil {
-               return 0
-       }
-       return *o.TotalPrivateRepos
-}
-
-// GetTwitterUsername returns the TwitterUsername field if it's non-nil, zero value otherwise.
-func (o *Organization) GetTwitterUsername() string {
-       if o == nil || o.TwitterUsername == nil {
-               return ""
-       }
-       return *o.TwitterUsername
-}
-
-// GetTwoFactorRequirementEnabled returns the TwoFactorRequirementEnabled field if it's non-nil, zero value otherwise.
-func (o *Organization) GetTwoFactorRequirementEnabled() bool {
-       if o == nil || o.TwoFactorRequirementEnabled == nil {
-               return false
-       }
-       return *o.TwoFactorRequirementEnabled
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (o *Organization) GetType() string {
-       if o == nil || o.Type == nil {
-               return ""
-       }
-       return *o.Type
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (o *Organization) GetUpdatedAt() time.Time {
-       if o == nil || o.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *o.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (o *Organization) GetURL() string {
-       if o == nil || o.URL == nil {
-               return ""
-       }
-       return *o.URL
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (o *OrganizationEvent) GetAction() string {
-       if o == nil || o.Action == nil {
-               return ""
-       }
-       return *o.Action
-}
-
-// GetInstallation returns the Installation field.
-func (o *OrganizationEvent) GetInstallation() *Installation {
-       if o == nil {
-               return nil
-       }
-       return o.Installation
-}
-
-// GetInvitation returns the Invitation field.
-func (o *OrganizationEvent) GetInvitation() *Invitation {
-       if o == nil {
-               return nil
-       }
-       return o.Invitation
-}
-
-// GetMembership returns the Membership field.
-func (o *OrganizationEvent) GetMembership() *Membership {
-       if o == nil {
-               return nil
-       }
-       return o.Membership
-}
-
-// GetOrganization returns the Organization field.
-func (o *OrganizationEvent) GetOrganization() *Organization {
-       if o == nil {
-               return nil
-       }
-       return o.Organization
-}
-
-// GetSender returns the Sender field.
-func (o *OrganizationEvent) GetSender() *User {
-       if o == nil {
-               return nil
-       }
-       return o.Sender
-}
-
-// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
-func (o *OrganizationInstallations) GetTotalCount() int {
-       if o == nil || o.TotalCount == nil {
-               return 0
-       }
-       return *o.TotalCount
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (o *OrgBlockEvent) GetAction() string {
-       if o == nil || o.Action == nil {
-               return ""
-       }
-       return *o.Action
-}
-
-// GetBlockedUser returns the BlockedUser field.
-func (o *OrgBlockEvent) GetBlockedUser() *User {
-       if o == nil {
-               return nil
-       }
-       return o.BlockedUser
-}
-
-// GetInstallation returns the Installation field.
-func (o *OrgBlockEvent) GetInstallation() *Installation {
-       if o == nil {
-               return nil
-       }
-       return o.Installation
-}
-
-// GetOrganization returns the Organization field.
-func (o *OrgBlockEvent) GetOrganization() *Organization {
-       if o == nil {
-               return nil
-       }
-       return o.Organization
-}
-
-// GetSender returns the Sender field.
-func (o *OrgBlockEvent) GetSender() *User {
-       if o == nil {
-               return nil
-       }
-       return o.Sender
-}
-
-// GetDisabledOrgs returns the DisabledOrgs field if it's non-nil, zero value otherwise.
-func (o *OrgStats) GetDisabledOrgs() int {
-       if o == nil || o.DisabledOrgs == nil {
-               return 0
-       }
-       return *o.DisabledOrgs
-}
-
-// GetTotalOrgs returns the TotalOrgs field if it's non-nil, zero value otherwise.
-func (o *OrgStats) GetTotalOrgs() int {
-       if o == nil || o.TotalOrgs == nil {
-               return 0
-       }
-       return *o.TotalOrgs
-}
-
-// GetTotalTeamMembers returns the TotalTeamMembers field if it's non-nil, zero value otherwise.
-func (o *OrgStats) GetTotalTeamMembers() int {
-       if o == nil || o.TotalTeamMembers == nil {
-               return 0
-       }
-       return *o.TotalTeamMembers
-}
-
-// GetTotalTeams returns the TotalTeams field if it's non-nil, zero value otherwise.
-func (o *OrgStats) GetTotalTeams() int {
-       if o == nil || o.TotalTeams == nil {
-               return 0
-       }
-       return *o.TotalTeams
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *Package) GetCreatedAt() Timestamp {
-       if p == nil || p.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.CreatedAt
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *Package) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *Package) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *Package) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetOwner returns the Owner field.
-func (p *Package) GetOwner() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Owner
-}
-
-// GetPackageType returns the PackageType field if it's non-nil, zero value otherwise.
-func (p *Package) GetPackageType() string {
-       if p == nil || p.PackageType == nil {
-               return ""
-       }
-       return *p.PackageType
-}
-
-// GetPackageVersion returns the PackageVersion field.
-func (p *Package) GetPackageVersion() *PackageVersion {
-       if p == nil {
-               return nil
-       }
-       return p.PackageVersion
-}
-
-// GetRegistry returns the Registry field.
-func (p *Package) GetRegistry() *PackageRegistry {
-       if p == nil {
-               return nil
-       }
-       return p.Registry
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (p *Package) GetUpdatedAt() Timestamp {
-       if p == nil || p.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.UpdatedAt
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (p *PackageEvent) GetAction() string {
-       if p == nil || p.Action == nil {
-               return ""
-       }
-       return *p.Action
-}
-
-// GetOrg returns the Org field.
-func (p *PackageEvent) GetOrg() *Organization {
-       if p == nil {
-               return nil
-       }
-       return p.Org
-}
-
-// GetPackage returns the Package field.
-func (p *PackageEvent) GetPackage() *Package {
-       if p == nil {
-               return nil
-       }
-       return p.Package
-}
-
-// GetRepo returns the Repo field.
-func (p *PackageEvent) GetRepo() *Repository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetSender returns the Sender field.
-func (p *PackageEvent) GetSender() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Sender
-}
-
-// GetAuthor returns the Author field.
-func (p *PackageFile) GetAuthor() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Author
-}
-
-// GetContentType returns the ContentType field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetContentType() string {
-       if p == nil || p.ContentType == nil {
-               return ""
-       }
-       return *p.ContentType
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetCreatedAt() Timestamp {
-       if p == nil || p.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.CreatedAt
-}
-
-// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetDownloadURL() string {
-       if p == nil || p.DownloadURL == nil {
-               return ""
-       }
-       return *p.DownloadURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetMD5 returns the MD5 field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetMD5() string {
-       if p == nil || p.MD5 == nil {
-               return ""
-       }
-       return *p.MD5
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetSHA1 returns the SHA1 field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetSHA1() string {
-       if p == nil || p.SHA1 == nil {
-               return ""
-       }
-       return *p.SHA1
-}
-
-// GetSHA256 returns the SHA256 field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetSHA256() string {
-       if p == nil || p.SHA256 == nil {
-               return ""
-       }
-       return *p.SHA256
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetSize() int64 {
-       if p == nil || p.Size == nil {
-               return 0
-       }
-       return *p.Size
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetState() string {
-       if p == nil || p.State == nil {
-               return ""
-       }
-       return *p.State
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (p *PackageFile) GetUpdatedAt() Timestamp {
-       if p == nil || p.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.UpdatedAt
-}
-
-// GetAboutURL returns the AboutURL field if it's non-nil, zero value otherwise.
-func (p *PackageRegistry) GetAboutURL() string {
-       if p == nil || p.AboutURL == nil {
-               return ""
-       }
-       return *p.AboutURL
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *PackageRegistry) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (p *PackageRegistry) GetType() string {
-       if p == nil || p.Type == nil {
-               return ""
-       }
-       return *p.Type
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *PackageRegistry) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetVendor returns the Vendor field if it's non-nil, zero value otherwise.
-func (p *PackageRegistry) GetVendor() string {
-       if p == nil || p.Vendor == nil {
-               return ""
-       }
-       return *p.Vendor
-}
-
-// GetAuthor returns the Author field.
-func (p *PackageRelease) GetAuthor() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Author
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *PackageRelease) GetCreatedAt() Timestamp {
-       if p == nil || p.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.CreatedAt
-}
-
-// GetDraft returns the Draft field if it's non-nil, zero value otherwise.
-func (p *PackageRelease) GetDraft() bool {
-       if p == nil || p.Draft == nil {
-               return false
-       }
-       return *p.Draft
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *PackageRelease) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *PackageRelease) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *PackageRelease) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise.
-func (p *PackageRelease) GetPrerelease() bool {
-       if p == nil || p.Prerelease == nil {
-               return false
-       }
-       return *p.Prerelease
-}
-
-// GetPublishedAt returns the PublishedAt field if it's non-nil, zero value otherwise.
-func (p *PackageRelease) GetPublishedAt() Timestamp {
-       if p == nil || p.PublishedAt == nil {
-               return Timestamp{}
-       }
-       return *p.PublishedAt
-}
-
-// GetTagName returns the TagName field if it's non-nil, zero value otherwise.
-func (p *PackageRelease) GetTagName() string {
-       if p == nil || p.TagName == nil {
-               return ""
-       }
-       return *p.TagName
-}
-
-// GetTargetCommitish returns the TargetCommitish field if it's non-nil, zero value otherwise.
-func (p *PackageRelease) GetTargetCommitish() string {
-       if p == nil || p.TargetCommitish == nil {
-               return ""
-       }
-       return *p.TargetCommitish
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *PackageRelease) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetAuthor returns the Author field.
-func (p *PackageVersion) GetAuthor() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Author
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetBody() string {
-       if p == nil || p.Body == nil {
-               return ""
-       }
-       return *p.Body
-}
-
-// GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetBodyHTML() string {
-       if p == nil || p.BodyHTML == nil {
-               return ""
-       }
-       return *p.BodyHTML
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetCreatedAt() Timestamp {
-       if p == nil || p.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.CreatedAt
-}
-
-// GetDraft returns the Draft field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetDraft() bool {
-       if p == nil || p.Draft == nil {
-               return false
-       }
-       return *p.Draft
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetInstallationCommand returns the InstallationCommand field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetInstallationCommand() string {
-       if p == nil || p.InstallationCommand == nil {
-               return ""
-       }
-       return *p.InstallationCommand
-}
-
-// GetManifest returns the Manifest field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetManifest() string {
-       if p == nil || p.Manifest == nil {
-               return ""
-       }
-       return *p.Manifest
-}
-
-// GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetPrerelease() bool {
-       if p == nil || p.Prerelease == nil {
-               return false
-       }
-       return *p.Prerelease
-}
-
-// GetRelease returns the Release field.
-func (p *PackageVersion) GetRelease() *PackageRelease {
-       if p == nil {
-               return nil
-       }
-       return p.Release
-}
-
-// GetSummary returns the Summary field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetSummary() string {
-       if p == nil || p.Summary == nil {
-               return ""
-       }
-       return *p.Summary
-}
-
-// GetTagName returns the TagName field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetTagName() string {
-       if p == nil || p.TagName == nil {
-               return ""
-       }
-       return *p.TagName
-}
-
-// GetTargetCommitish returns the TargetCommitish field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetTargetCommitish() string {
-       if p == nil || p.TargetCommitish == nil {
-               return ""
-       }
-       return *p.TargetCommitish
-}
-
-// GetTargetOID returns the TargetOID field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetTargetOID() string {
-       if p == nil || p.TargetOID == nil {
-               return ""
-       }
-       return *p.TargetOID
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetUpdatedAt() Timestamp {
-       if p == nil || p.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.UpdatedAt
-}
-
-// GetVersion returns the Version field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetVersion() string {
-       if p == nil || p.Version == nil {
-               return ""
-       }
-       return *p.Version
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (p *Page) GetAction() string {
-       if p == nil || p.Action == nil {
-               return ""
-       }
-       return *p.Action
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *Page) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetPageName returns the PageName field if it's non-nil, zero value otherwise.
-func (p *Page) GetPageName() string {
-       if p == nil || p.PageName == nil {
-               return ""
-       }
-       return *p.PageName
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (p *Page) GetSHA() string {
-       if p == nil || p.SHA == nil {
-               return ""
-       }
-       return *p.SHA
-}
-
-// GetSummary returns the Summary field if it's non-nil, zero value otherwise.
-func (p *Page) GetSummary() string {
-       if p == nil || p.Summary == nil {
-               return ""
-       }
-       return *p.Summary
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (p *Page) GetTitle() string {
-       if p == nil || p.Title == nil {
-               return ""
-       }
-       return *p.Title
-}
-
-// GetBuild returns the Build field.
-func (p *PageBuildEvent) GetBuild() *PagesBuild {
-       if p == nil {
-               return nil
-       }
-       return p.Build
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *PageBuildEvent) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetInstallation returns the Installation field.
-func (p *PageBuildEvent) GetInstallation() *Installation {
-       if p == nil {
-               return nil
-       }
-       return p.Installation
-}
-
-// GetRepo returns the Repo field.
-func (p *PageBuildEvent) GetRepo() *Repository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetSender returns the Sender field.
-func (p *PageBuildEvent) GetSender() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Sender
-}
-
-// GetCNAME returns the CNAME field if it's non-nil, zero value otherwise.
-func (p *Pages) GetCNAME() string {
-       if p == nil || p.CNAME == nil {
-               return ""
-       }
-       return *p.CNAME
-}
-
-// GetCustom404 returns the Custom404 field if it's non-nil, zero value otherwise.
-func (p *Pages) GetCustom404() bool {
-       if p == nil || p.Custom404 == nil {
-               return false
-       }
-       return *p.Custom404
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *Pages) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetSource returns the Source field.
-func (p *Pages) GetSource() *PagesSource {
-       if p == nil {
-               return nil
-       }
-       return p.Source
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (p *Pages) GetStatus() string {
-       if p == nil || p.Status == nil {
-               return ""
-       }
-       return *p.Status
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *Pages) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetCommit returns the Commit field if it's non-nil, zero value otherwise.
-func (p *PagesBuild) GetCommit() string {
-       if p == nil || p.Commit == nil {
-               return ""
-       }
-       return *p.Commit
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *PagesBuild) GetCreatedAt() Timestamp {
-       if p == nil || p.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.CreatedAt
-}
-
-// GetDuration returns the Duration field if it's non-nil, zero value otherwise.
-func (p *PagesBuild) GetDuration() int {
-       if p == nil || p.Duration == nil {
-               return 0
-       }
-       return *p.Duration
-}
-
-// GetError returns the Error field.
-func (p *PagesBuild) GetError() *PagesError {
-       if p == nil {
-               return nil
-       }
-       return p.Error
-}
-
-// GetPusher returns the Pusher field.
-func (p *PagesBuild) GetPusher() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Pusher
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (p *PagesBuild) GetStatus() string {
-       if p == nil || p.Status == nil {
-               return ""
-       }
-       return *p.Status
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (p *PagesBuild) GetUpdatedAt() Timestamp {
-       if p == nil || p.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *PagesBuild) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (p *PagesError) GetMessage() string {
-       if p == nil || p.Message == nil {
-               return ""
-       }
-       return *p.Message
-}
-
-// GetBranch returns the Branch field if it's non-nil, zero value otherwise.
-func (p *PagesSource) GetBranch() string {
-       if p == nil || p.Branch == nil {
-               return ""
-       }
-       return *p.Branch
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (p *PagesSource) GetPath() string {
-       if p == nil || p.Path == nil {
-               return ""
-       }
-       return *p.Path
-}
-
-// GetTotalPages returns the TotalPages field if it's non-nil, zero value otherwise.
-func (p *PageStats) GetTotalPages() int {
-       if p == nil || p.TotalPages == nil {
-               return 0
-       }
-       return *p.TotalPages
-}
-
-// GetCNAME returns the CNAME field if it's non-nil, zero value otherwise.
-func (p *PagesUpdate) GetCNAME() string {
-       if p == nil || p.CNAME == nil {
-               return ""
-       }
-       return *p.CNAME
-}
-
-// GetSource returns the Source field if it's non-nil, zero value otherwise.
-func (p *PagesUpdate) GetSource() string {
-       if p == nil || p.Source == nil {
-               return ""
-       }
-       return *p.Source
-}
-
-// GetHook returns the Hook field.
-func (p *PingEvent) GetHook() *Hook {
-       if p == nil {
-               return nil
-       }
-       return p.Hook
-}
-
-// GetHookID returns the HookID field if it's non-nil, zero value otherwise.
-func (p *PingEvent) GetHookID() int64 {
-       if p == nil || p.HookID == nil {
-               return 0
-       }
-       return *p.HookID
-}
-
-// GetInstallation returns the Installation field.
-func (p *PingEvent) GetInstallation() *Installation {
-       if p == nil {
-               return nil
-       }
-       return p.Installation
-}
-
-// GetZen returns the Zen field if it's non-nil, zero value otherwise.
-func (p *PingEvent) GetZen() string {
-       if p == nil || p.Zen == nil {
-               return ""
-       }
-       return *p.Zen
-}
-
-// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise.
-func (p *Plan) GetCollaborators() int {
-       if p == nil || p.Collaborators == nil {
-               return 0
-       }
-       return *p.Collaborators
-}
-
-// GetFilledSeats returns the FilledSeats field if it's non-nil, zero value otherwise.
-func (p *Plan) GetFilledSeats() int {
-       if p == nil || p.FilledSeats == nil {
-               return 0
-       }
-       return *p.FilledSeats
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *Plan) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetPrivateRepos returns the PrivateRepos field if it's non-nil, zero value otherwise.
-func (p *Plan) GetPrivateRepos() int {
-       if p == nil || p.PrivateRepos == nil {
-               return 0
-       }
-       return *p.PrivateRepos
-}
-
-// GetSeats returns the Seats field if it's non-nil, zero value otherwise.
-func (p *Plan) GetSeats() int {
-       if p == nil || p.Seats == nil {
-               return 0
-       }
-       return *p.Seats
-}
-
-// GetSpace returns the Space field if it's non-nil, zero value otherwise.
-func (p *Plan) GetSpace() int {
-       if p == nil || p.Space == nil {
-               return 0
-       }
-       return *p.Space
-}
-
-// GetConfigURL returns the ConfigURL field if it's non-nil, zero value otherwise.
-func (p *PreReceiveHook) GetConfigURL() string {
-       if p == nil || p.ConfigURL == nil {
-               return ""
-       }
-       return *p.ConfigURL
-}
-
-// GetEnforcement returns the Enforcement field if it's non-nil, zero value otherwise.
-func (p *PreReceiveHook) GetEnforcement() string {
-       if p == nil || p.Enforcement == nil {
-               return ""
-       }
-       return *p.Enforcement
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *PreReceiveHook) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *PreReceiveHook) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetHRef returns the HRef field if it's non-nil, zero value otherwise.
-func (p *PRLink) GetHRef() string {
-       if p == nil || p.HRef == nil {
-               return ""
-       }
-       return *p.HRef
-}
-
-// GetComments returns the Comments field.
-func (p *PRLinks) GetComments() *PRLink {
-       if p == nil {
-               return nil
-       }
-       return p.Comments
-}
-
-// GetCommits returns the Commits field.
-func (p *PRLinks) GetCommits() *PRLink {
-       if p == nil {
-               return nil
-       }
-       return p.Commits
-}
-
-// GetHTML returns the HTML field.
-func (p *PRLinks) GetHTML() *PRLink {
-       if p == nil {
-               return nil
-       }
-       return p.HTML
-}
-
-// GetIssue returns the Issue field.
-func (p *PRLinks) GetIssue() *PRLink {
-       if p == nil {
-               return nil
-       }
-       return p.Issue
-}
-
-// GetReviewComment returns the ReviewComment field.
-func (p *PRLinks) GetReviewComment() *PRLink {
-       if p == nil {
-               return nil
-       }
-       return p.ReviewComment
-}
-
-// GetReviewComments returns the ReviewComments field.
-func (p *PRLinks) GetReviewComments() *PRLink {
-       if p == nil {
-               return nil
-       }
-       return p.ReviewComments
-}
-
-// GetSelf returns the Self field.
-func (p *PRLinks) GetSelf() *PRLink {
-       if p == nil {
-               return nil
-       }
-       return p.Self
-}
-
-// GetStatuses returns the Statuses field.
-func (p *PRLinks) GetStatuses() *PRLink {
-       if p == nil {
-               return nil
-       }
-       return p.Statuses
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (p *Project) GetBody() string {
-       if p == nil || p.Body == nil {
-               return ""
-       }
-       return *p.Body
-}
-
-// GetColumnsURL returns the ColumnsURL field if it's non-nil, zero value otherwise.
-func (p *Project) GetColumnsURL() string {
-       if p == nil || p.ColumnsURL == nil {
-               return ""
-       }
-       return *p.ColumnsURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *Project) GetCreatedAt() Timestamp {
-       if p == nil || p.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.CreatedAt
-}
-
-// GetCreator returns the Creator field.
-func (p *Project) GetCreator() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Creator
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *Project) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *Project) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *Project) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (p *Project) GetNodeID() string {
-       if p == nil || p.NodeID == nil {
-               return ""
-       }
-       return *p.NodeID
-}
-
-// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (p *Project) GetNumber() int {
-       if p == nil || p.Number == nil {
-               return 0
-       }
-       return *p.Number
-}
-
-// GetOwnerURL returns the OwnerURL field if it's non-nil, zero value otherwise.
-func (p *Project) GetOwnerURL() string {
-       if p == nil || p.OwnerURL == nil {
-               return ""
-       }
-       return *p.OwnerURL
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (p *Project) GetState() string {
-       if p == nil || p.State == nil {
-               return ""
-       }
-       return *p.State
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (p *Project) GetUpdatedAt() Timestamp {
-       if p == nil || p.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *Project) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetArchived returns the Archived field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetArchived() bool {
-       if p == nil || p.Archived == nil {
-               return false
-       }
-       return *p.Archived
-}
-
-// GetColumnID returns the ColumnID field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetColumnID() int64 {
-       if p == nil || p.ColumnID == nil {
-               return 0
-       }
-       return *p.ColumnID
-}
-
-// GetColumnName returns the ColumnName field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetColumnName() string {
-       if p == nil || p.ColumnName == nil {
-               return ""
-       }
-       return *p.ColumnName
-}
-
-// GetColumnURL returns the ColumnURL field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetColumnURL() string {
-       if p == nil || p.ColumnURL == nil {
-               return ""
-       }
-       return *p.ColumnURL
-}
-
-// GetContentURL returns the ContentURL field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetContentURL() string {
-       if p == nil || p.ContentURL == nil {
-               return ""
-       }
-       return *p.ContentURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetCreatedAt() Timestamp {
-       if p == nil || p.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.CreatedAt
-}
-
-// GetCreator returns the Creator field.
-func (p *ProjectCard) GetCreator() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Creator
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetNodeID() string {
-       if p == nil || p.NodeID == nil {
-               return ""
-       }
-       return *p.NodeID
-}
-
-// GetNote returns the Note field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetNote() string {
-       if p == nil || p.Note == nil {
-               return ""
-       }
-       return *p.Note
-}
-
-// GetPreviousColumnName returns the PreviousColumnName field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetPreviousColumnName() string {
-       if p == nil || p.PreviousColumnName == nil {
-               return ""
-       }
-       return *p.PreviousColumnName
-}
-
-// GetProjectID returns the ProjectID field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetProjectID() int64 {
-       if p == nil || p.ProjectID == nil {
-               return 0
-       }
-       return *p.ProjectID
-}
-
-// GetProjectURL returns the ProjectURL field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetProjectURL() string {
-       if p == nil || p.ProjectURL == nil {
-               return ""
-       }
-       return *p.ProjectURL
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetUpdatedAt() Timestamp {
-       if p == nil || p.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *ProjectCard) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (p *ProjectCardEvent) GetAction() string {
-       if p == nil || p.Action == nil {
-               return ""
-       }
-       return *p.Action
-}
-
-// GetAfterID returns the AfterID field if it's non-nil, zero value otherwise.
-func (p *ProjectCardEvent) GetAfterID() int64 {
-       if p == nil || p.AfterID == nil {
-               return 0
-       }
-       return *p.AfterID
-}
-
-// GetChanges returns the Changes field.
-func (p *ProjectCardEvent) GetChanges() *ProjectCardChange {
-       if p == nil {
-               return nil
-       }
-       return p.Changes
-}
-
-// GetInstallation returns the Installation field.
-func (p *ProjectCardEvent) GetInstallation() *Installation {
-       if p == nil {
-               return nil
-       }
-       return p.Installation
-}
-
-// GetOrg returns the Org field.
-func (p *ProjectCardEvent) GetOrg() *Organization {
-       if p == nil {
-               return nil
-       }
-       return p.Org
-}
-
-// GetProjectCard returns the ProjectCard field.
-func (p *ProjectCardEvent) GetProjectCard() *ProjectCard {
-       if p == nil {
-               return nil
-       }
-       return p.ProjectCard
-}
-
-// GetRepo returns the Repo field.
-func (p *ProjectCardEvent) GetRepo() *Repository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetSender returns the Sender field.
-func (p *ProjectCardEvent) GetSender() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Sender
-}
-
-// GetArchivedState returns the ArchivedState field if it's non-nil, zero value otherwise.
-func (p *ProjectCardListOptions) GetArchivedState() string {
-       if p == nil || p.ArchivedState == nil {
-               return ""
-       }
-       return *p.ArchivedState
-}
-
-// GetArchived returns the Archived field if it's non-nil, zero value otherwise.
-func (p *ProjectCardOptions) GetArchived() bool {
-       if p == nil || p.Archived == nil {
-               return false
-       }
-       return *p.Archived
-}
-
-// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
-func (p *ProjectCollaboratorOptions) GetPermission() string {
-       if p == nil || p.Permission == nil {
-               return ""
-       }
-       return *p.Permission
-}
-
-// GetCardsURL returns the CardsURL field if it's non-nil, zero value otherwise.
-func (p *ProjectColumn) GetCardsURL() string {
-       if p == nil || p.CardsURL == nil {
-               return ""
-       }
-       return *p.CardsURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *ProjectColumn) GetCreatedAt() Timestamp {
-       if p == nil || p.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.CreatedAt
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *ProjectColumn) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *ProjectColumn) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (p *ProjectColumn) GetNodeID() string {
-       if p == nil || p.NodeID == nil {
-               return ""
-       }
-       return *p.NodeID
-}
-
-// GetProjectURL returns the ProjectURL field if it's non-nil, zero value otherwise.
-func (p *ProjectColumn) GetProjectURL() string {
-       if p == nil || p.ProjectURL == nil {
-               return ""
-       }
-       return *p.ProjectURL
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (p *ProjectColumn) GetUpdatedAt() Timestamp {
-       if p == nil || p.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *ProjectColumn) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (p *ProjectColumnEvent) GetAction() string {
-       if p == nil || p.Action == nil {
-               return ""
-       }
-       return *p.Action
-}
-
-// GetAfterID returns the AfterID field if it's non-nil, zero value otherwise.
-func (p *ProjectColumnEvent) GetAfterID() int64 {
-       if p == nil || p.AfterID == nil {
-               return 0
-       }
-       return *p.AfterID
-}
-
-// GetChanges returns the Changes field.
-func (p *ProjectColumnEvent) GetChanges() *ProjectColumnChange {
-       if p == nil {
-               return nil
-       }
-       return p.Changes
-}
-
-// GetInstallation returns the Installation field.
-func (p *ProjectColumnEvent) GetInstallation() *Installation {
-       if p == nil {
-               return nil
-       }
-       return p.Installation
-}
-
-// GetOrg returns the Org field.
-func (p *ProjectColumnEvent) GetOrg() *Organization {
-       if p == nil {
-               return nil
-       }
-       return p.Org
-}
-
-// GetProjectColumn returns the ProjectColumn field.
-func (p *ProjectColumnEvent) GetProjectColumn() *ProjectColumn {
-       if p == nil {
-               return nil
-       }
-       return p.ProjectColumn
-}
-
-// GetRepo returns the Repo field.
-func (p *ProjectColumnEvent) GetRepo() *Repository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetSender returns the Sender field.
-func (p *ProjectColumnEvent) GetSender() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Sender
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (p *ProjectEvent) GetAction() string {
-       if p == nil || p.Action == nil {
-               return ""
-       }
-       return *p.Action
-}
-
-// GetChanges returns the Changes field.
-func (p *ProjectEvent) GetChanges() *ProjectChange {
-       if p == nil {
-               return nil
-       }
-       return p.Changes
-}
-
-// GetInstallation returns the Installation field.
-func (p *ProjectEvent) GetInstallation() *Installation {
-       if p == nil {
-               return nil
-       }
-       return p.Installation
-}
-
-// GetOrg returns the Org field.
-func (p *ProjectEvent) GetOrg() *Organization {
-       if p == nil {
-               return nil
-       }
-       return p.Org
-}
-
-// GetProject returns the Project field.
-func (p *ProjectEvent) GetProject() *Project {
-       if p == nil {
-               return nil
-       }
-       return p.Project
-}
-
-// GetRepo returns the Repo field.
-func (p *ProjectEvent) GetRepo() *Repository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetSender returns the Sender field.
-func (p *ProjectEvent) GetSender() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Sender
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (p *ProjectOptions) GetBody() string {
-       if p == nil || p.Body == nil {
-               return ""
-       }
-       return *p.Body
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *ProjectOptions) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetOrganizationPermission returns the OrganizationPermission field if it's non-nil, zero value otherwise.
-func (p *ProjectOptions) GetOrganizationPermission() string {
-       if p == nil || p.OrganizationPermission == nil {
-               return ""
-       }
-       return *p.OrganizationPermission
-}
-
-// GetPublic returns the Public field if it's non-nil, zero value otherwise.
-func (p *ProjectOptions) GetPublic() bool {
-       if p == nil || p.Public == nil {
-               return false
-       }
-       return *p.Public
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (p *ProjectOptions) GetState() string {
-       if p == nil || p.State == nil {
-               return ""
-       }
-       return *p.State
-}
-
-// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
-func (p *ProjectPermissionLevel) GetPermission() string {
-       if p == nil || p.Permission == nil {
-               return ""
-       }
-       return *p.Permission
-}
-
-// GetUser returns the User field.
-func (p *ProjectPermissionLevel) GetUser() *User {
-       if p == nil {
-               return nil
-       }
-       return p.User
-}
-
-// GetAllowDeletions returns the AllowDeletions field.
-func (p *Protection) GetAllowDeletions() *AllowDeletions {
-       if p == nil {
-               return nil
-       }
-       return p.AllowDeletions
-}
-
-// GetAllowForcePushes returns the AllowForcePushes field.
-func (p *Protection) GetAllowForcePushes() *AllowForcePushes {
-       if p == nil {
-               return nil
-       }
-       return p.AllowForcePushes
-}
-
-// GetEnforceAdmins returns the EnforceAdmins field.
-func (p *Protection) GetEnforceAdmins() *AdminEnforcement {
-       if p == nil {
-               return nil
-       }
-       return p.EnforceAdmins
-}
-
-// GetRequiredPullRequestReviews returns the RequiredPullRequestReviews field.
-func (p *Protection) GetRequiredPullRequestReviews() *PullRequestReviewsEnforcement {
-       if p == nil {
-               return nil
-       }
-       return p.RequiredPullRequestReviews
-}
-
-// GetRequiredStatusChecks returns the RequiredStatusChecks field.
-func (p *Protection) GetRequiredStatusChecks() *RequiredStatusChecks {
-       if p == nil {
-               return nil
-       }
-       return p.RequiredStatusChecks
-}
-
-// GetRequireLinearHistory returns the RequireLinearHistory field.
-func (p *Protection) GetRequireLinearHistory() *RequireLinearHistory {
-       if p == nil {
-               return nil
-       }
-       return p.RequireLinearHistory
-}
-
-// GetRestrictions returns the Restrictions field.
-func (p *Protection) GetRestrictions() *BranchRestrictions {
-       if p == nil {
-               return nil
-       }
-       return p.Restrictions
-}
-
-// GetAllowDeletions returns the AllowDeletions field if it's non-nil, zero value otherwise.
-func (p *ProtectionRequest) GetAllowDeletions() bool {
-       if p == nil || p.AllowDeletions == nil {
-               return false
-       }
-       return *p.AllowDeletions
-}
-
-// GetAllowForcePushes returns the AllowForcePushes field if it's non-nil, zero value otherwise.
-func (p *ProtectionRequest) GetAllowForcePushes() bool {
-       if p == nil || p.AllowForcePushes == nil {
-               return false
-       }
-       return *p.AllowForcePushes
-}
-
-// GetRequiredPullRequestReviews returns the RequiredPullRequestReviews field.
-func (p *ProtectionRequest) GetRequiredPullRequestReviews() *PullRequestReviewsEnforcementRequest {
-       if p == nil {
-               return nil
-       }
-       return p.RequiredPullRequestReviews
-}
-
-// GetRequiredStatusChecks returns the RequiredStatusChecks field.
-func (p *ProtectionRequest) GetRequiredStatusChecks() *RequiredStatusChecks {
-       if p == nil {
-               return nil
-       }
-       return p.RequiredStatusChecks
-}
-
-// GetRequireLinearHistory returns the RequireLinearHistory field if it's non-nil, zero value otherwise.
-func (p *ProtectionRequest) GetRequireLinearHistory() bool {
-       if p == nil || p.RequireLinearHistory == nil {
-               return false
-       }
-       return *p.RequireLinearHistory
-}
-
-// GetRestrictions returns the Restrictions field.
-func (p *ProtectionRequest) GetRestrictions() *BranchRestrictionsRequest {
-       if p == nil {
-               return nil
-       }
-       return p.Restrictions
-}
-
-// GetInstallation returns the Installation field.
-func (p *PublicEvent) GetInstallation() *Installation {
-       if p == nil {
-               return nil
-       }
-       return p.Installation
-}
-
-// GetRepo returns the Repo field.
-func (p *PublicEvent) GetRepo() *Repository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetSender returns the Sender field.
-func (p *PublicEvent) GetSender() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Sender
-}
-
-// GetKey returns the Key field if it's non-nil, zero value otherwise.
-func (p *PublicKey) GetKey() string {
-       if p == nil || p.Key == nil {
-               return ""
-       }
-       return *p.Key
-}
-
-// GetKeyID returns the KeyID field if it's non-nil, zero value otherwise.
-func (p *PublicKey) GetKeyID() string {
-       if p == nil || p.KeyID == nil {
-               return ""
-       }
-       return *p.KeyID
-}
-
-// GetActiveLockReason returns the ActiveLockReason field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetActiveLockReason() string {
-       if p == nil || p.ActiveLockReason == nil {
-               return ""
-       }
-       return *p.ActiveLockReason
-}
-
-// GetAdditions returns the Additions field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetAdditions() int {
-       if p == nil || p.Additions == nil {
-               return 0
-       }
-       return *p.Additions
-}
-
-// GetAssignee returns the Assignee field.
-func (p *PullRequest) GetAssignee() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Assignee
-}
-
-// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetAuthorAssociation() string {
-       if p == nil || p.AuthorAssociation == nil {
-               return ""
-       }
-       return *p.AuthorAssociation
-}
-
-// GetBase returns the Base field.
-func (p *PullRequest) GetBase() *PullRequestBranch {
-       if p == nil {
-               return nil
-       }
-       return p.Base
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetBody() string {
-       if p == nil || p.Body == nil {
-               return ""
-       }
-       return *p.Body
-}
-
-// GetChangedFiles returns the ChangedFiles field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetChangedFiles() int {
-       if p == nil || p.ChangedFiles == nil {
-               return 0
-       }
-       return *p.ChangedFiles
-}
-
-// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetClosedAt() time.Time {
-       if p == nil || p.ClosedAt == nil {
-               return time.Time{}
-       }
-       return *p.ClosedAt
-}
-
-// GetComments returns the Comments field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetComments() int {
-       if p == nil || p.Comments == nil {
-               return 0
-       }
-       return *p.Comments
-}
-
-// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetCommentsURL() string {
-       if p == nil || p.CommentsURL == nil {
-               return ""
-       }
-       return *p.CommentsURL
-}
-
-// GetCommits returns the Commits field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetCommits() int {
-       if p == nil || p.Commits == nil {
-               return 0
-       }
-       return *p.Commits
-}
-
-// GetCommitsURL returns the CommitsURL field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetCommitsURL() string {
-       if p == nil || p.CommitsURL == nil {
-               return ""
-       }
-       return *p.CommitsURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetCreatedAt() time.Time {
-       if p == nil || p.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *p.CreatedAt
-}
-
-// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetDeletions() int {
-       if p == nil || p.Deletions == nil {
-               return 0
-       }
-       return *p.Deletions
-}
-
-// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetDiffURL() string {
-       if p == nil || p.DiffURL == nil {
-               return ""
-       }
-       return *p.DiffURL
-}
-
-// GetDraft returns the Draft field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetDraft() bool {
-       if p == nil || p.Draft == nil {
-               return false
-       }
-       return *p.Draft
-}
-
-// GetHead returns the Head field.
-func (p *PullRequest) GetHead() *PullRequestBranch {
-       if p == nil {
-               return nil
-       }
-       return p.Head
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetIssueURL returns the IssueURL field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetIssueURL() string {
-       if p == nil || p.IssueURL == nil {
-               return ""
-       }
-       return *p.IssueURL
-}
-
-// GetLinks returns the Links field.
-func (p *PullRequest) GetLinks() *PRLinks {
-       if p == nil {
-               return nil
-       }
-       return p.Links
-}
-
-// GetLocked returns the Locked field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetLocked() bool {
-       if p == nil || p.Locked == nil {
-               return false
-       }
-       return *p.Locked
-}
-
-// GetMaintainerCanModify returns the MaintainerCanModify field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetMaintainerCanModify() bool {
-       if p == nil || p.MaintainerCanModify == nil {
-               return false
-       }
-       return *p.MaintainerCanModify
-}
-
-// GetMergeable returns the Mergeable field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetMergeable() bool {
-       if p == nil || p.Mergeable == nil {
-               return false
-       }
-       return *p.Mergeable
-}
-
-// GetMergeableState returns the MergeableState field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetMergeableState() string {
-       if p == nil || p.MergeableState == nil {
-               return ""
-       }
-       return *p.MergeableState
-}
-
-// GetMergeCommitSHA returns the MergeCommitSHA field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetMergeCommitSHA() string {
-       if p == nil || p.MergeCommitSHA == nil {
-               return ""
-       }
-       return *p.MergeCommitSHA
-}
-
-// GetMerged returns the Merged field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetMerged() bool {
-       if p == nil || p.Merged == nil {
-               return false
-       }
-       return *p.Merged
-}
-
-// GetMergedAt returns the MergedAt field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetMergedAt() time.Time {
-       if p == nil || p.MergedAt == nil {
-               return time.Time{}
-       }
-       return *p.MergedAt
-}
-
-// GetMergedBy returns the MergedBy field.
-func (p *PullRequest) GetMergedBy() *User {
-       if p == nil {
-               return nil
-       }
-       return p.MergedBy
-}
-
-// GetMilestone returns the Milestone field.
-func (p *PullRequest) GetMilestone() *Milestone {
-       if p == nil {
-               return nil
-       }
-       return p.Milestone
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetNodeID() string {
-       if p == nil || p.NodeID == nil {
-               return ""
-       }
-       return *p.NodeID
-}
-
-// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetNumber() int {
-       if p == nil || p.Number == nil {
-               return 0
-       }
-       return *p.Number
-}
-
-// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetPatchURL() string {
-       if p == nil || p.PatchURL == nil {
-               return ""
-       }
-       return *p.PatchURL
-}
-
-// GetRebaseable returns the Rebaseable field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetRebaseable() bool {
-       if p == nil || p.Rebaseable == nil {
-               return false
-       }
-       return *p.Rebaseable
-}
-
-// GetReviewComments returns the ReviewComments field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetReviewComments() int {
-       if p == nil || p.ReviewComments == nil {
-               return 0
-       }
-       return *p.ReviewComments
-}
-
-// GetReviewCommentsURL returns the ReviewCommentsURL field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetReviewCommentsURL() string {
-       if p == nil || p.ReviewCommentsURL == nil {
-               return ""
-       }
-       return *p.ReviewCommentsURL
-}
-
-// GetReviewCommentURL returns the ReviewCommentURL field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetReviewCommentURL() string {
-       if p == nil || p.ReviewCommentURL == nil {
-               return ""
-       }
-       return *p.ReviewCommentURL
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetState() string {
-       if p == nil || p.State == nil {
-               return ""
-       }
-       return *p.State
-}
-
-// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetStatusesURL() string {
-       if p == nil || p.StatusesURL == nil {
-               return ""
-       }
-       return *p.StatusesURL
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetTitle() string {
-       if p == nil || p.Title == nil {
-               return ""
-       }
-       return *p.Title
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetUpdatedAt() time.Time {
-       if p == nil || p.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *p.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *PullRequest) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetUser returns the User field.
-func (p *PullRequest) GetUser() *User {
-       if p == nil {
-               return nil
-       }
-       return p.User
-}
-
-// GetLabel returns the Label field if it's non-nil, zero value otherwise.
-func (p *PullRequestBranch) GetLabel() string {
-       if p == nil || p.Label == nil {
-               return ""
-       }
-       return *p.Label
-}
-
-// GetRef returns the Ref field if it's non-nil, zero value otherwise.
-func (p *PullRequestBranch) GetRef() string {
-       if p == nil || p.Ref == nil {
-               return ""
-       }
-       return *p.Ref
-}
-
-// GetRepo returns the Repo field.
-func (p *PullRequestBranch) GetRepo() *Repository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (p *PullRequestBranch) GetSHA() string {
-       if p == nil || p.SHA == nil {
-               return ""
-       }
-       return *p.SHA
-}
-
-// GetUser returns the User field.
-func (p *PullRequestBranch) GetUser() *User {
-       if p == nil {
-               return nil
-       }
-       return p.User
-}
-
-// GetExpectedHeadSHA returns the ExpectedHeadSHA field if it's non-nil, zero value otherwise.
-func (p *PullRequestBranchUpdateOptions) GetExpectedHeadSHA() string {
-       if p == nil || p.ExpectedHeadSHA == nil {
-               return ""
-       }
-       return *p.ExpectedHeadSHA
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (p *PullRequestBranchUpdateResponse) GetMessage() string {
-       if p == nil || p.Message == nil {
-               return ""
-       }
-       return *p.Message
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *PullRequestBranchUpdateResponse) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetAuthorAssociation() string {
-       if p == nil || p.AuthorAssociation == nil {
-               return ""
-       }
-       return *p.AuthorAssociation
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetBody() string {
-       if p == nil || p.Body == nil {
-               return ""
-       }
-       return *p.Body
-}
-
-// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetCommitID() string {
-       if p == nil || p.CommitID == nil {
-               return ""
-       }
-       return *p.CommitID
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetCreatedAt() time.Time {
-       if p == nil || p.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *p.CreatedAt
-}
-
-// GetDiffHunk returns the DiffHunk field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetDiffHunk() string {
-       if p == nil || p.DiffHunk == nil {
-               return ""
-       }
-       return *p.DiffHunk
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetInReplyTo returns the InReplyTo field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetInReplyTo() int64 {
-       if p == nil || p.InReplyTo == nil {
-               return 0
-       }
-       return *p.InReplyTo
-}
-
-// GetLine returns the Line field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetLine() int {
-       if p == nil || p.Line == nil {
-               return 0
-       }
-       return *p.Line
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetNodeID() string {
-       if p == nil || p.NodeID == nil {
-               return ""
-       }
-       return *p.NodeID
-}
-
-// GetOriginalCommitID returns the OriginalCommitID field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetOriginalCommitID() string {
-       if p == nil || p.OriginalCommitID == nil {
-               return ""
-       }
-       return *p.OriginalCommitID
-}
-
-// GetOriginalLine returns the OriginalLine field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetOriginalLine() int {
-       if p == nil || p.OriginalLine == nil {
-               return 0
-       }
-       return *p.OriginalLine
-}
-
-// GetOriginalPosition returns the OriginalPosition field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetOriginalPosition() int {
-       if p == nil || p.OriginalPosition == nil {
-               return 0
-       }
-       return *p.OriginalPosition
-}
-
-// GetOriginalStartLine returns the OriginalStartLine field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetOriginalStartLine() int {
-       if p == nil || p.OriginalStartLine == nil {
-               return 0
-       }
-       return *p.OriginalStartLine
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetPath() string {
-       if p == nil || p.Path == nil {
-               return ""
-       }
-       return *p.Path
-}
-
-// GetPosition returns the Position field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetPosition() int {
-       if p == nil || p.Position == nil {
-               return 0
-       }
-       return *p.Position
-}
-
-// GetPullRequestReviewID returns the PullRequestReviewID field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetPullRequestReviewID() int64 {
-       if p == nil || p.PullRequestReviewID == nil {
-               return 0
-       }
-       return *p.PullRequestReviewID
-}
-
-// GetPullRequestURL returns the PullRequestURL field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetPullRequestURL() string {
-       if p == nil || p.PullRequestURL == nil {
-               return ""
-       }
-       return *p.PullRequestURL
-}
-
-// GetReactions returns the Reactions field.
-func (p *PullRequestComment) GetReactions() *Reactions {
-       if p == nil {
-               return nil
-       }
-       return p.Reactions
-}
-
-// GetSide returns the Side field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetSide() string {
-       if p == nil || p.Side == nil {
-               return ""
-       }
-       return *p.Side
-}
-
-// GetStartLine returns the StartLine field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetStartLine() int {
-       if p == nil || p.StartLine == nil {
-               return 0
-       }
-       return *p.StartLine
-}
-
-// GetStartSide returns the StartSide field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetStartSide() string {
-       if p == nil || p.StartSide == nil {
-               return ""
-       }
-       return *p.StartSide
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetUpdatedAt() time.Time {
-       if p == nil || p.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *p.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *PullRequestComment) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetUser returns the User field.
-func (p *PullRequestComment) GetUser() *User {
-       if p == nil {
-               return nil
-       }
-       return p.User
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (p *PullRequestEvent) GetAction() string {
-       if p == nil || p.Action == nil {
-               return ""
-       }
-       return *p.Action
-}
-
-// GetAfter returns the After field if it's non-nil, zero value otherwise.
-func (p *PullRequestEvent) GetAfter() string {
-       if p == nil || p.After == nil {
-               return ""
-       }
-       return *p.After
-}
-
-// GetAssignee returns the Assignee field.
-func (p *PullRequestEvent) GetAssignee() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Assignee
-}
-
-// GetBefore returns the Before field if it's non-nil, zero value otherwise.
-func (p *PullRequestEvent) GetBefore() string {
-       if p == nil || p.Before == nil {
-               return ""
-       }
-       return *p.Before
-}
-
-// GetChanges returns the Changes field.
-func (p *PullRequestEvent) GetChanges() *EditChange {
-       if p == nil {
-               return nil
-       }
-       return p.Changes
-}
-
-// GetInstallation returns the Installation field.
-func (p *PullRequestEvent) GetInstallation() *Installation {
-       if p == nil {
-               return nil
-       }
-       return p.Installation
-}
-
-// GetLabel returns the Label field.
-func (p *PullRequestEvent) GetLabel() *Label {
-       if p == nil {
-               return nil
-       }
-       return p.Label
-}
-
-// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (p *PullRequestEvent) GetNumber() int {
-       if p == nil || p.Number == nil {
-               return 0
-       }
-       return *p.Number
-}
-
-// GetOrganization returns the Organization field.
-func (p *PullRequestEvent) GetOrganization() *Organization {
-       if p == nil {
-               return nil
-       }
-       return p.Organization
-}
-
-// GetPullRequest returns the PullRequest field.
-func (p *PullRequestEvent) GetPullRequest() *PullRequest {
-       if p == nil {
-               return nil
-       }
-       return p.PullRequest
-}
-
-// GetRepo returns the Repo field.
-func (p *PullRequestEvent) GetRepo() *Repository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetRequestedReviewer returns the RequestedReviewer field.
-func (p *PullRequestEvent) GetRequestedReviewer() *User {
-       if p == nil {
-               return nil
-       }
-       return p.RequestedReviewer
-}
-
-// GetRequestedTeam returns the RequestedTeam field.
-func (p *PullRequestEvent) GetRequestedTeam() *Team {
-       if p == nil {
-               return nil
-       }
-       return p.RequestedTeam
-}
-
-// GetSender returns the Sender field.
-func (p *PullRequestEvent) GetSender() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Sender
-}
-
-// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise.
-func (p *PullRequestLinks) GetDiffURL() string {
-       if p == nil || p.DiffURL == nil {
-               return ""
-       }
-       return *p.DiffURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *PullRequestLinks) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise.
-func (p *PullRequestLinks) GetPatchURL() string {
-       if p == nil || p.PatchURL == nil {
-               return ""
-       }
-       return *p.PatchURL
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *PullRequestLinks) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetMerged returns the Merged field if it's non-nil, zero value otherwise.
-func (p *PullRequestMergeResult) GetMerged() bool {
-       if p == nil || p.Merged == nil {
-               return false
-       }
-       return *p.Merged
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (p *PullRequestMergeResult) GetMessage() string {
-       if p == nil || p.Message == nil {
-               return ""
-       }
-       return *p.Message
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (p *PullRequestMergeResult) GetSHA() string {
-       if p == nil || p.SHA == nil {
-               return ""
-       }
-       return *p.SHA
-}
-
-// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise.
-func (p *PullRequestReview) GetAuthorAssociation() string {
-       if p == nil || p.AuthorAssociation == nil {
-               return ""
-       }
-       return *p.AuthorAssociation
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (p *PullRequestReview) GetBody() string {
-       if p == nil || p.Body == nil {
-               return ""
-       }
-       return *p.Body
-}
-
-// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
-func (p *PullRequestReview) GetCommitID() string {
-       if p == nil || p.CommitID == nil {
-               return ""
-       }
-       return *p.CommitID
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *PullRequestReview) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *PullRequestReview) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (p *PullRequestReview) GetNodeID() string {
-       if p == nil || p.NodeID == nil {
-               return ""
-       }
-       return *p.NodeID
-}
-
-// GetPullRequestURL returns the PullRequestURL field if it's non-nil, zero value otherwise.
-func (p *PullRequestReview) GetPullRequestURL() string {
-       if p == nil || p.PullRequestURL == nil {
-               return ""
-       }
-       return *p.PullRequestURL
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (p *PullRequestReview) GetState() string {
-       if p == nil || p.State == nil {
-               return ""
-       }
-       return *p.State
-}
-
-// GetSubmittedAt returns the SubmittedAt field if it's non-nil, zero value otherwise.
-func (p *PullRequestReview) GetSubmittedAt() time.Time {
-       if p == nil || p.SubmittedAt == nil {
-               return time.Time{}
-       }
-       return *p.SubmittedAt
-}
-
-// GetUser returns the User field.
-func (p *PullRequestReview) GetUser() *User {
-       if p == nil {
-               return nil
-       }
-       return p.User
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (p *PullRequestReviewCommentEvent) GetAction() string {
-       if p == nil || p.Action == nil {
-               return ""
-       }
-       return *p.Action
-}
-
-// GetChanges returns the Changes field.
-func (p *PullRequestReviewCommentEvent) GetChanges() *EditChange {
-       if p == nil {
-               return nil
-       }
-       return p.Changes
-}
-
-// GetComment returns the Comment field.
-func (p *PullRequestReviewCommentEvent) GetComment() *PullRequestComment {
-       if p == nil {
-               return nil
-       }
-       return p.Comment
-}
-
-// GetInstallation returns the Installation field.
-func (p *PullRequestReviewCommentEvent) GetInstallation() *Installation {
-       if p == nil {
-               return nil
-       }
-       return p.Installation
-}
-
-// GetPullRequest returns the PullRequest field.
-func (p *PullRequestReviewCommentEvent) GetPullRequest() *PullRequest {
-       if p == nil {
-               return nil
-       }
-       return p.PullRequest
-}
-
-// GetRepo returns the Repo field.
-func (p *PullRequestReviewCommentEvent) GetRepo() *Repository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetSender returns the Sender field.
-func (p *PullRequestReviewCommentEvent) GetSender() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Sender
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (p *PullRequestReviewDismissalRequest) GetMessage() string {
-       if p == nil || p.Message == nil {
-               return ""
-       }
-       return *p.Message
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (p *PullRequestReviewEvent) GetAction() string {
-       if p == nil || p.Action == nil {
-               return ""
-       }
-       return *p.Action
-}
-
-// GetInstallation returns the Installation field.
-func (p *PullRequestReviewEvent) GetInstallation() *Installation {
-       if p == nil {
-               return nil
-       }
-       return p.Installation
-}
-
-// GetOrganization returns the Organization field.
-func (p *PullRequestReviewEvent) GetOrganization() *Organization {
-       if p == nil {
-               return nil
-       }
-       return p.Organization
-}
-
-// GetPullRequest returns the PullRequest field.
-func (p *PullRequestReviewEvent) GetPullRequest() *PullRequest {
-       if p == nil {
-               return nil
-       }
-       return p.PullRequest
-}
-
-// GetRepo returns the Repo field.
-func (p *PullRequestReviewEvent) GetRepo() *Repository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetReview returns the Review field.
-func (p *PullRequestReviewEvent) GetReview() *PullRequestReview {
-       if p == nil {
-               return nil
-       }
-       return p.Review
-}
-
-// GetSender returns the Sender field.
-func (p *PullRequestReviewEvent) GetSender() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Sender
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (p *PullRequestReviewRequest) GetBody() string {
-       if p == nil || p.Body == nil {
-               return ""
-       }
-       return *p.Body
-}
-
-// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
-func (p *PullRequestReviewRequest) GetCommitID() string {
-       if p == nil || p.CommitID == nil {
-               return ""
-       }
-       return *p.CommitID
-}
-
-// GetEvent returns the Event field if it's non-nil, zero value otherwise.
-func (p *PullRequestReviewRequest) GetEvent() string {
-       if p == nil || p.Event == nil {
-               return ""
-       }
-       return *p.Event
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (p *PullRequestReviewRequest) GetNodeID() string {
-       if p == nil || p.NodeID == nil {
-               return ""
-       }
-       return *p.NodeID
-}
-
-// GetDismissalRestrictions returns the DismissalRestrictions field.
-func (p *PullRequestReviewsEnforcement) GetDismissalRestrictions() *DismissalRestrictions {
-       if p == nil {
-               return nil
-       }
-       return p.DismissalRestrictions
-}
-
-// GetDismissalRestrictionsRequest returns the DismissalRestrictionsRequest field.
-func (p *PullRequestReviewsEnforcementRequest) GetDismissalRestrictionsRequest() *DismissalRestrictionsRequest {
-       if p == nil {
-               return nil
-       }
-       return p.DismissalRestrictionsRequest
-}
-
-// GetDismissalRestrictionsRequest returns the DismissalRestrictionsRequest field.
-func (p *PullRequestReviewsEnforcementUpdate) GetDismissalRestrictionsRequest() *DismissalRestrictionsRequest {
-       if p == nil {
-               return nil
-       }
-       return p.DismissalRestrictionsRequest
-}
-
-// GetDismissStaleReviews returns the DismissStaleReviews field if it's non-nil, zero value otherwise.
-func (p *PullRequestReviewsEnforcementUpdate) GetDismissStaleReviews() bool {
-       if p == nil || p.DismissStaleReviews == nil {
-               return false
-       }
-       return *p.DismissStaleReviews
-}
-
-// GetMergablePulls returns the MergablePulls field if it's non-nil, zero value otherwise.
-func (p *PullStats) GetMergablePulls() int {
-       if p == nil || p.MergablePulls == nil {
-               return 0
-       }
-       return *p.MergablePulls
-}
-
-// GetMergedPulls returns the MergedPulls field if it's non-nil, zero value otherwise.
-func (p *PullStats) GetMergedPulls() int {
-       if p == nil || p.MergedPulls == nil {
-               return 0
-       }
-       return *p.MergedPulls
-}
-
-// GetTotalPulls returns the TotalPulls field if it's non-nil, zero value otherwise.
-func (p *PullStats) GetTotalPulls() int {
-       if p == nil || p.TotalPulls == nil {
-               return 0
-       }
-       return *p.TotalPulls
-}
-
-// GetUnmergablePulls returns the UnmergablePulls field if it's non-nil, zero value otherwise.
-func (p *PullStats) GetUnmergablePulls() int {
-       if p == nil || p.UnmergablePulls == nil {
-               return 0
-       }
-       return *p.UnmergablePulls
-}
-
-// GetCommits returns the Commits field if it's non-nil, zero value otherwise.
-func (p *PunchCard) GetCommits() int {
-       if p == nil || p.Commits == nil {
-               return 0
-       }
-       return *p.Commits
-}
-
-// GetDay returns the Day field if it's non-nil, zero value otherwise.
-func (p *PunchCard) GetDay() int {
-       if p == nil || p.Day == nil {
-               return 0
-       }
-       return *p.Day
-}
-
-// GetHour returns the Hour field if it's non-nil, zero value otherwise.
-func (p *PunchCard) GetHour() int {
-       if p == nil || p.Hour == nil {
-               return 0
-       }
-       return *p.Hour
-}
-
-// GetAfter returns the After field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetAfter() string {
-       if p == nil || p.After == nil {
-               return ""
-       }
-       return *p.After
-}
-
-// GetBaseRef returns the BaseRef field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetBaseRef() string {
-       if p == nil || p.BaseRef == nil {
-               return ""
-       }
-       return *p.BaseRef
-}
-
-// GetBefore returns the Before field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetBefore() string {
-       if p == nil || p.Before == nil {
-               return ""
-       }
-       return *p.Before
-}
-
-// GetCompare returns the Compare field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetCompare() string {
-       if p == nil || p.Compare == nil {
-               return ""
-       }
-       return *p.Compare
-}
-
-// GetCreated returns the Created field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetCreated() bool {
-       if p == nil || p.Created == nil {
-               return false
-       }
-       return *p.Created
-}
-
-// GetDeleted returns the Deleted field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetDeleted() bool {
-       if p == nil || p.Deleted == nil {
-               return false
-       }
-       return *p.Deleted
-}
-
-// GetDistinctSize returns the DistinctSize field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetDistinctSize() int {
-       if p == nil || p.DistinctSize == nil {
-               return 0
-       }
-       return *p.DistinctSize
-}
-
-// GetForced returns the Forced field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetForced() bool {
-       if p == nil || p.Forced == nil {
-               return false
-       }
-       return *p.Forced
-}
-
-// GetHead returns the Head field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetHead() string {
-       if p == nil || p.Head == nil {
-               return ""
-       }
-       return *p.Head
-}
-
-// GetHeadCommit returns the HeadCommit field.
-func (p *PushEvent) GetHeadCommit() *HeadCommit {
-       if p == nil {
-               return nil
-       }
-       return p.HeadCommit
-}
-
-// GetInstallation returns the Installation field.
-func (p *PushEvent) GetInstallation() *Installation {
-       if p == nil {
-               return nil
-       }
-       return p.Installation
-}
-
-// GetPusher returns the Pusher field.
-func (p *PushEvent) GetPusher() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Pusher
-}
-
-// GetPushID returns the PushID field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetPushID() int64 {
-       if p == nil || p.PushID == nil {
-               return 0
-       }
-       return *p.PushID
-}
-
-// GetRef returns the Ref field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetRef() string {
-       if p == nil || p.Ref == nil {
-               return ""
-       }
-       return *p.Ref
-}
-
-// GetRepo returns the Repo field.
-func (p *PushEvent) GetRepo() *PushEventRepository {
-       if p == nil {
-               return nil
-       }
-       return p.Repo
-}
-
-// GetSender returns the Sender field.
-func (p *PushEvent) GetSender() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Sender
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (p *PushEvent) GetSize() int {
-       if p == nil || p.Size == nil {
-               return 0
-       }
-       return *p.Size
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (p *PushEventRepoOwner) GetEmail() string {
-       if p == nil || p.Email == nil {
-               return ""
-       }
-       return *p.Email
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *PushEventRepoOwner) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetArchived returns the Archived field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetArchived() bool {
-       if p == nil || p.Archived == nil {
-               return false
-       }
-       return *p.Archived
-}
-
-// GetArchiveURL returns the ArchiveURL field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetArchiveURL() string {
-       if p == nil || p.ArchiveURL == nil {
-               return ""
-       }
-       return *p.ArchiveURL
-}
-
-// GetCloneURL returns the CloneURL field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetCloneURL() string {
-       if p == nil || p.CloneURL == nil {
-               return ""
-       }
-       return *p.CloneURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetCreatedAt() Timestamp {
-       if p == nil || p.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.CreatedAt
-}
-
-// GetDefaultBranch returns the DefaultBranch field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetDefaultBranch() string {
-       if p == nil || p.DefaultBranch == nil {
-               return ""
-       }
-       return *p.DefaultBranch
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetDescription() string {
-       if p == nil || p.Description == nil {
-               return ""
-       }
-       return *p.Description
-}
-
-// GetDisabled returns the Disabled field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetDisabled() bool {
-       if p == nil || p.Disabled == nil {
-               return false
-       }
-       return *p.Disabled
-}
-
-// GetFork returns the Fork field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetFork() bool {
-       if p == nil || p.Fork == nil {
-               return false
-       }
-       return *p.Fork
-}
-
-// GetForksCount returns the ForksCount field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetForksCount() int {
-       if p == nil || p.ForksCount == nil {
-               return 0
-       }
-       return *p.ForksCount
-}
-
-// GetFullName returns the FullName field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetFullName() string {
-       if p == nil || p.FullName == nil {
-               return ""
-       }
-       return *p.FullName
-}
-
-// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetGitURL() string {
-       if p == nil || p.GitURL == nil {
-               return ""
-       }
-       return *p.GitURL
-}
-
-// GetHasDownloads returns the HasDownloads field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetHasDownloads() bool {
-       if p == nil || p.HasDownloads == nil {
-               return false
-       }
-       return *p.HasDownloads
-}
-
-// GetHasIssues returns the HasIssues field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetHasIssues() bool {
-       if p == nil || p.HasIssues == nil {
-               return false
-       }
-       return *p.HasIssues
-}
-
-// GetHasPages returns the HasPages field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetHasPages() bool {
-       if p == nil || p.HasPages == nil {
-               return false
-       }
-       return *p.HasPages
-}
-
-// GetHasWiki returns the HasWiki field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetHasWiki() bool {
-       if p == nil || p.HasWiki == nil {
-               return false
-       }
-       return *p.HasWiki
-}
-
-// GetHomepage returns the Homepage field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetHomepage() string {
-       if p == nil || p.Homepage == nil {
-               return ""
-       }
-       return *p.Homepage
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetHTMLURL() string {
-       if p == nil || p.HTMLURL == nil {
-               return ""
-       }
-       return *p.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetID() int64 {
-       if p == nil || p.ID == nil {
-               return 0
-       }
-       return *p.ID
-}
-
-// GetLanguage returns the Language field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetLanguage() string {
-       if p == nil || p.Language == nil {
-               return ""
-       }
-       return *p.Language
-}
-
-// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetMasterBranch() string {
-       if p == nil || p.MasterBranch == nil {
-               return ""
-       }
-       return *p.MasterBranch
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetName() string {
-       if p == nil || p.Name == nil {
-               return ""
-       }
-       return *p.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetNodeID() string {
-       if p == nil || p.NodeID == nil {
-               return ""
-       }
-       return *p.NodeID
-}
-
-// GetOpenIssuesCount returns the OpenIssuesCount field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetOpenIssuesCount() int {
-       if p == nil || p.OpenIssuesCount == nil {
-               return 0
-       }
-       return *p.OpenIssuesCount
-}
-
-// GetOrganization returns the Organization field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetOrganization() string {
-       if p == nil || p.Organization == nil {
-               return ""
-       }
-       return *p.Organization
-}
-
-// GetOwner returns the Owner field.
-func (p *PushEventRepository) GetOwner() *User {
-       if p == nil {
-               return nil
-       }
-       return p.Owner
-}
-
-// GetPrivate returns the Private field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetPrivate() bool {
-       if p == nil || p.Private == nil {
-               return false
-       }
-       return *p.Private
-}
-
-// GetPullsURL returns the PullsURL field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetPullsURL() string {
-       if p == nil || p.PullsURL == nil {
-               return ""
-       }
-       return *p.PullsURL
-}
-
-// GetPushedAt returns the PushedAt field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetPushedAt() Timestamp {
-       if p == nil || p.PushedAt == nil {
-               return Timestamp{}
-       }
-       return *p.PushedAt
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetSize() int {
-       if p == nil || p.Size == nil {
-               return 0
-       }
-       return *p.Size
-}
-
-// GetSSHURL returns the SSHURL field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetSSHURL() string {
-       if p == nil || p.SSHURL == nil {
-               return ""
-       }
-       return *p.SSHURL
-}
-
-// GetStargazersCount returns the StargazersCount field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetStargazersCount() int {
-       if p == nil || p.StargazersCount == nil {
-               return 0
-       }
-       return *p.StargazersCount
-}
-
-// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetStatusesURL() string {
-       if p == nil || p.StatusesURL == nil {
-               return ""
-       }
-       return *p.StatusesURL
-}
-
-// GetSVNURL returns the SVNURL field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetSVNURL() string {
-       if p == nil || p.SVNURL == nil {
-               return ""
-       }
-       return *p.SVNURL
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetUpdatedAt() Timestamp {
-       if p == nil || p.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *p.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetURL() string {
-       if p == nil || p.URL == nil {
-               return ""
-       }
-       return *p.URL
-}
-
-// GetWatchersCount returns the WatchersCount field if it's non-nil, zero value otherwise.
-func (p *PushEventRepository) GetWatchersCount() int {
-       if p == nil || p.WatchersCount == nil {
-               return 0
-       }
-       return *p.WatchersCount
-}
-
-// GetCore returns the Core field.
-func (r *RateLimits) GetCore() *Rate {
-       if r == nil {
-               return nil
-       }
-       return r.Core
-}
-
-// GetSearch returns the Search field.
-func (r *RateLimits) GetSearch() *Rate {
-       if r == nil {
-               return nil
-       }
-       return r.Search
-}
-
-// GetContent returns the Content field if it's non-nil, zero value otherwise.
-func (r *Reaction) GetContent() string {
-       if r == nil || r.Content == nil {
-               return ""
-       }
-       return *r.Content
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (r *Reaction) GetID() int64 {
-       if r == nil || r.ID == nil {
-               return 0
-       }
-       return *r.ID
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (r *Reaction) GetNodeID() string {
-       if r == nil || r.NodeID == nil {
-               return ""
-       }
-       return *r.NodeID
-}
-
-// GetUser returns the User field.
-func (r *Reaction) GetUser() *User {
-       if r == nil {
-               return nil
-       }
-       return r.User
-}
-
-// GetConfused returns the Confused field if it's non-nil, zero value otherwise.
-func (r *Reactions) GetConfused() int {
-       if r == nil || r.Confused == nil {
-               return 0
-       }
-       return *r.Confused
-}
-
-// GetHeart returns the Heart field if it's non-nil, zero value otherwise.
-func (r *Reactions) GetHeart() int {
-       if r == nil || r.Heart == nil {
-               return 0
-       }
-       return *r.Heart
-}
-
-// GetHooray returns the Hooray field if it's non-nil, zero value otherwise.
-func (r *Reactions) GetHooray() int {
-       if r == nil || r.Hooray == nil {
-               return 0
-       }
-       return *r.Hooray
-}
-
-// GetLaugh returns the Laugh field if it's non-nil, zero value otherwise.
-func (r *Reactions) GetLaugh() int {
-       if r == nil || r.Laugh == nil {
-               return 0
-       }
-       return *r.Laugh
-}
-
-// GetMinusOne returns the MinusOne field if it's non-nil, zero value otherwise.
-func (r *Reactions) GetMinusOne() int {
-       if r == nil || r.MinusOne == nil {
-               return 0
-       }
-       return *r.MinusOne
-}
-
-// GetPlusOne returns the PlusOne field if it's non-nil, zero value otherwise.
-func (r *Reactions) GetPlusOne() int {
-       if r == nil || r.PlusOne == nil {
-               return 0
-       }
-       return *r.PlusOne
-}
-
-// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
-func (r *Reactions) GetTotalCount() int {
-       if r == nil || r.TotalCount == nil {
-               return 0
-       }
-       return *r.TotalCount
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *Reactions) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (r *Reference) GetNodeID() string {
-       if r == nil || r.NodeID == nil {
-               return ""
-       }
-       return *r.NodeID
-}
-
-// GetObject returns the Object field.
-func (r *Reference) GetObject() *GitObject {
-       if r == nil {
-               return nil
-       }
-       return r.Object
-}
-
-// GetRef returns the Ref field if it's non-nil, zero value otherwise.
-func (r *Reference) GetRef() string {
-       if r == nil || r.Ref == nil {
-               return ""
-       }
-       return *r.Ref
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *Reference) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
-func (r *RegistrationToken) GetExpiresAt() Timestamp {
-       if r == nil || r.ExpiresAt == nil {
-               return Timestamp{}
-       }
-       return *r.ExpiresAt
-}
-
-// GetToken returns the Token field if it's non-nil, zero value otherwise.
-func (r *RegistrationToken) GetToken() string {
-       if r == nil || r.Token == nil {
-               return ""
-       }
-       return *r.Token
-}
-
-// GetBrowserDownloadURL returns the BrowserDownloadURL field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetBrowserDownloadURL() string {
-       if r == nil || r.BrowserDownloadURL == nil {
-               return ""
-       }
-       return *r.BrowserDownloadURL
-}
-
-// GetContentType returns the ContentType field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetContentType() string {
-       if r == nil || r.ContentType == nil {
-               return ""
-       }
-       return *r.ContentType
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetCreatedAt() Timestamp {
-       if r == nil || r.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *r.CreatedAt
-}
-
-// GetDownloadCount returns the DownloadCount field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetDownloadCount() int {
-       if r == nil || r.DownloadCount == nil {
-               return 0
-       }
-       return *r.DownloadCount
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetID() int64 {
-       if r == nil || r.ID == nil {
-               return 0
-       }
-       return *r.ID
-}
-
-// GetLabel returns the Label field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetLabel() string {
-       if r == nil || r.Label == nil {
-               return ""
-       }
-       return *r.Label
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetName() string {
-       if r == nil || r.Name == nil {
-               return ""
-       }
-       return *r.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetNodeID() string {
-       if r == nil || r.NodeID == nil {
-               return ""
-       }
-       return *r.NodeID
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetSize() int {
-       if r == nil || r.Size == nil {
-               return 0
-       }
-       return *r.Size
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetState() string {
-       if r == nil || r.State == nil {
-               return ""
-       }
-       return *r.State
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetUpdatedAt() Timestamp {
-       if r == nil || r.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *r.UpdatedAt
-}
-
-// GetUploader returns the Uploader field.
-func (r *ReleaseAsset) GetUploader() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Uploader
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *ReleaseAsset) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (r *ReleaseEvent) GetAction() string {
-       if r == nil || r.Action == nil {
-               return ""
-       }
-       return *r.Action
-}
-
-// GetInstallation returns the Installation field.
-func (r *ReleaseEvent) GetInstallation() *Installation {
-       if r == nil {
-               return nil
-       }
-       return r.Installation
-}
-
-// GetRelease returns the Release field.
-func (r *ReleaseEvent) GetRelease() *RepositoryRelease {
-       if r == nil {
-               return nil
-       }
-       return r.Release
-}
-
-// GetRepo returns the Repo field.
-func (r *ReleaseEvent) GetRepo() *Repository {
-       if r == nil {
-               return nil
-       }
-       return r.Repo
-}
-
-// GetSender returns the Sender field.
-func (r *ReleaseEvent) GetSender() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Sender
-}
-
-// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
-func (r *RemoveToken) GetExpiresAt() Timestamp {
-       if r == nil || r.ExpiresAt == nil {
-               return Timestamp{}
-       }
-       return *r.ExpiresAt
-}
-
-// GetToken returns the Token field if it's non-nil, zero value otherwise.
-func (r *RemoveToken) GetToken() string {
-       if r == nil || r.Token == nil {
-               return ""
-       }
-       return *r.Token
-}
-
-// GetFrom returns the From field if it's non-nil, zero value otherwise.
-func (r *Rename) GetFrom() string {
-       if r == nil || r.From == nil {
-               return ""
-       }
-       return *r.From
-}
-
-// GetTo returns the To field if it's non-nil, zero value otherwise.
-func (r *Rename) GetTo() string {
-       if r == nil || r.To == nil {
-               return ""
-       }
-       return *r.To
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (r *RenameOrgResponse) GetMessage() string {
-       if r == nil || r.Message == nil {
-               return ""
-       }
-       return *r.Message
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *RenameOrgResponse) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
-func (r *RepositoriesSearchResult) GetIncompleteResults() bool {
-       if r == nil || r.IncompleteResults == nil {
-               return false
-       }
-       return *r.IncompleteResults
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (r *RepositoriesSearchResult) GetTotal() int {
-       if r == nil || r.Total == nil {
-               return 0
-       }
-       return *r.Total
-}
-
-// GetAllowMergeCommit returns the AllowMergeCommit field if it's non-nil, zero value otherwise.
-func (r *Repository) GetAllowMergeCommit() bool {
-       if r == nil || r.AllowMergeCommit == nil {
-               return false
-       }
-       return *r.AllowMergeCommit
-}
-
-// GetAllowRebaseMerge returns the AllowRebaseMerge field if it's non-nil, zero value otherwise.
-func (r *Repository) GetAllowRebaseMerge() bool {
-       if r == nil || r.AllowRebaseMerge == nil {
-               return false
-       }
-       return *r.AllowRebaseMerge
-}
-
-// GetAllowSquashMerge returns the AllowSquashMerge field if it's non-nil, zero value otherwise.
-func (r *Repository) GetAllowSquashMerge() bool {
-       if r == nil || r.AllowSquashMerge == nil {
-               return false
-       }
-       return *r.AllowSquashMerge
-}
-
-// GetArchived returns the Archived field if it's non-nil, zero value otherwise.
-func (r *Repository) GetArchived() bool {
-       if r == nil || r.Archived == nil {
-               return false
-       }
-       return *r.Archived
-}
-
-// GetArchiveURL returns the ArchiveURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetArchiveURL() string {
-       if r == nil || r.ArchiveURL == nil {
-               return ""
-       }
-       return *r.ArchiveURL
-}
-
-// GetAssigneesURL returns the AssigneesURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetAssigneesURL() string {
-       if r == nil || r.AssigneesURL == nil {
-               return ""
-       }
-       return *r.AssigneesURL
-}
-
-// GetAutoInit returns the AutoInit field if it's non-nil, zero value otherwise.
-func (r *Repository) GetAutoInit() bool {
-       if r == nil || r.AutoInit == nil {
-               return false
-       }
-       return *r.AutoInit
-}
-
-// GetBlobsURL returns the BlobsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetBlobsURL() string {
-       if r == nil || r.BlobsURL == nil {
-               return ""
-       }
-       return *r.BlobsURL
-}
-
-// GetBranchesURL returns the BranchesURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetBranchesURL() string {
-       if r == nil || r.BranchesURL == nil {
-               return ""
-       }
-       return *r.BranchesURL
-}
-
-// GetCloneURL returns the CloneURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetCloneURL() string {
-       if r == nil || r.CloneURL == nil {
-               return ""
-       }
-       return *r.CloneURL
-}
-
-// GetCodeOfConduct returns the CodeOfConduct field.
-func (r *Repository) GetCodeOfConduct() *CodeOfConduct {
-       if r == nil {
-               return nil
-       }
-       return r.CodeOfConduct
-}
-
-// GetCollaboratorsURL returns the CollaboratorsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetCollaboratorsURL() string {
-       if r == nil || r.CollaboratorsURL == nil {
-               return ""
-       }
-       return *r.CollaboratorsURL
-}
-
-// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetCommentsURL() string {
-       if r == nil || r.CommentsURL == nil {
-               return ""
-       }
-       return *r.CommentsURL
-}
-
-// GetCommitsURL returns the CommitsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetCommitsURL() string {
-       if r == nil || r.CommitsURL == nil {
-               return ""
-       }
-       return *r.CommitsURL
-}
-
-// GetCompareURL returns the CompareURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetCompareURL() string {
-       if r == nil || r.CompareURL == nil {
-               return ""
-       }
-       return *r.CompareURL
-}
-
-// GetContentsURL returns the ContentsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetContentsURL() string {
-       if r == nil || r.ContentsURL == nil {
-               return ""
-       }
-       return *r.ContentsURL
-}
-
-// GetContributorsURL returns the ContributorsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetContributorsURL() string {
-       if r == nil || r.ContributorsURL == nil {
-               return ""
-       }
-       return *r.ContributorsURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (r *Repository) GetCreatedAt() Timestamp {
-       if r == nil || r.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *r.CreatedAt
-}
-
-// GetDefaultBranch returns the DefaultBranch field if it's non-nil, zero value otherwise.
-func (r *Repository) GetDefaultBranch() string {
-       if r == nil || r.DefaultBranch == nil {
-               return ""
-       }
-       return *r.DefaultBranch
-}
-
-// GetDeleteBranchOnMerge returns the DeleteBranchOnMerge field if it's non-nil, zero value otherwise.
-func (r *Repository) GetDeleteBranchOnMerge() bool {
-       if r == nil || r.DeleteBranchOnMerge == nil {
-               return false
-       }
-       return *r.DeleteBranchOnMerge
-}
-
-// GetDeploymentsURL returns the DeploymentsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetDeploymentsURL() string {
-       if r == nil || r.DeploymentsURL == nil {
-               return ""
-       }
-       return *r.DeploymentsURL
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (r *Repository) GetDescription() string {
-       if r == nil || r.Description == nil {
-               return ""
-       }
-       return *r.Description
-}
-
-// GetDisabled returns the Disabled field if it's non-nil, zero value otherwise.
-func (r *Repository) GetDisabled() bool {
-       if r == nil || r.Disabled == nil {
-               return false
-       }
-       return *r.Disabled
-}
-
-// GetDownloadsURL returns the DownloadsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetDownloadsURL() string {
-       if r == nil || r.DownloadsURL == nil {
-               return ""
-       }
-       return *r.DownloadsURL
-}
-
-// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetEventsURL() string {
-       if r == nil || r.EventsURL == nil {
-               return ""
-       }
-       return *r.EventsURL
-}
-
-// GetFork returns the Fork field if it's non-nil, zero value otherwise.
-func (r *Repository) GetFork() bool {
-       if r == nil || r.Fork == nil {
-               return false
-       }
-       return *r.Fork
-}
-
-// GetForksCount returns the ForksCount field if it's non-nil, zero value otherwise.
-func (r *Repository) GetForksCount() int {
-       if r == nil || r.ForksCount == nil {
-               return 0
-       }
-       return *r.ForksCount
-}
-
-// GetForksURL returns the ForksURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetForksURL() string {
-       if r == nil || r.ForksURL == nil {
-               return ""
-       }
-       return *r.ForksURL
-}
-
-// GetFullName returns the FullName field if it's non-nil, zero value otherwise.
-func (r *Repository) GetFullName() string {
-       if r == nil || r.FullName == nil {
-               return ""
-       }
-       return *r.FullName
-}
-
-// GetGitCommitsURL returns the GitCommitsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetGitCommitsURL() string {
-       if r == nil || r.GitCommitsURL == nil {
-               return ""
-       }
-       return *r.GitCommitsURL
-}
-
-// GetGitignoreTemplate returns the GitignoreTemplate field if it's non-nil, zero value otherwise.
-func (r *Repository) GetGitignoreTemplate() string {
-       if r == nil || r.GitignoreTemplate == nil {
-               return ""
-       }
-       return *r.GitignoreTemplate
-}
-
-// GetGitRefsURL returns the GitRefsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetGitRefsURL() string {
-       if r == nil || r.GitRefsURL == nil {
-               return ""
-       }
-       return *r.GitRefsURL
-}
-
-// GetGitTagsURL returns the GitTagsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetGitTagsURL() string {
-       if r == nil || r.GitTagsURL == nil {
-               return ""
-       }
-       return *r.GitTagsURL
-}
-
-// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetGitURL() string {
-       if r == nil || r.GitURL == nil {
-               return ""
-       }
-       return *r.GitURL
-}
-
-// GetHasDownloads returns the HasDownloads field if it's non-nil, zero value otherwise.
-func (r *Repository) GetHasDownloads() bool {
-       if r == nil || r.HasDownloads == nil {
-               return false
-       }
-       return *r.HasDownloads
-}
-
-// GetHasIssues returns the HasIssues field if it's non-nil, zero value otherwise.
-func (r *Repository) GetHasIssues() bool {
-       if r == nil || r.HasIssues == nil {
-               return false
-       }
-       return *r.HasIssues
-}
-
-// GetHasPages returns the HasPages field if it's non-nil, zero value otherwise.
-func (r *Repository) GetHasPages() bool {
-       if r == nil || r.HasPages == nil {
-               return false
-       }
-       return *r.HasPages
-}
-
-// GetHasProjects returns the HasProjects field if it's non-nil, zero value otherwise.
-func (r *Repository) GetHasProjects() bool {
-       if r == nil || r.HasProjects == nil {
-               return false
-       }
-       return *r.HasProjects
-}
-
-// GetHasWiki returns the HasWiki field if it's non-nil, zero value otherwise.
-func (r *Repository) GetHasWiki() bool {
-       if r == nil || r.HasWiki == nil {
-               return false
-       }
-       return *r.HasWiki
-}
-
-// GetHomepage returns the Homepage field if it's non-nil, zero value otherwise.
-func (r *Repository) GetHomepage() string {
-       if r == nil || r.Homepage == nil {
-               return ""
-       }
-       return *r.Homepage
-}
-
-// GetHooksURL returns the HooksURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetHooksURL() string {
-       if r == nil || r.HooksURL == nil {
-               return ""
-       }
-       return *r.HooksURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetHTMLURL() string {
-       if r == nil || r.HTMLURL == nil {
-               return ""
-       }
-       return *r.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (r *Repository) GetID() int64 {
-       if r == nil || r.ID == nil {
-               return 0
-       }
-       return *r.ID
-}
-
-// GetIssueCommentURL returns the IssueCommentURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetIssueCommentURL() string {
-       if r == nil || r.IssueCommentURL == nil {
-               return ""
-       }
-       return *r.IssueCommentURL
-}
-
-// GetIssueEventsURL returns the IssueEventsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetIssueEventsURL() string {
-       if r == nil || r.IssueEventsURL == nil {
-               return ""
-       }
-       return *r.IssueEventsURL
-}
-
-// GetIssuesURL returns the IssuesURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetIssuesURL() string {
-       if r == nil || r.IssuesURL == nil {
-               return ""
-       }
-       return *r.IssuesURL
-}
-
-// GetIsTemplate returns the IsTemplate field if it's non-nil, zero value otherwise.
-func (r *Repository) GetIsTemplate() bool {
-       if r == nil || r.IsTemplate == nil {
-               return false
-       }
-       return *r.IsTemplate
-}
-
-// GetKeysURL returns the KeysURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetKeysURL() string {
-       if r == nil || r.KeysURL == nil {
-               return ""
-       }
-       return *r.KeysURL
-}
-
-// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetLabelsURL() string {
-       if r == nil || r.LabelsURL == nil {
-               return ""
-       }
-       return *r.LabelsURL
-}
-
-// GetLanguage returns the Language field if it's non-nil, zero value otherwise.
-func (r *Repository) GetLanguage() string {
-       if r == nil || r.Language == nil {
-               return ""
-       }
-       return *r.Language
-}
-
-// GetLanguagesURL returns the LanguagesURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetLanguagesURL() string {
-       if r == nil || r.LanguagesURL == nil {
-               return ""
-       }
-       return *r.LanguagesURL
-}
-
-// GetLicense returns the License field.
-func (r *Repository) GetLicense() *License {
-       if r == nil {
-               return nil
-       }
-       return r.License
-}
-
-// GetLicenseTemplate returns the LicenseTemplate field if it's non-nil, zero value otherwise.
-func (r *Repository) GetLicenseTemplate() string {
-       if r == nil || r.LicenseTemplate == nil {
-               return ""
-       }
-       return *r.LicenseTemplate
-}
-
-// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise.
-func (r *Repository) GetMasterBranch() string {
-       if r == nil || r.MasterBranch == nil {
-               return ""
-       }
-       return *r.MasterBranch
-}
-
-// GetMergesURL returns the MergesURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetMergesURL() string {
-       if r == nil || r.MergesURL == nil {
-               return ""
-       }
-       return *r.MergesURL
-}
-
-// GetMilestonesURL returns the MilestonesURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetMilestonesURL() string {
-       if r == nil || r.MilestonesURL == nil {
-               return ""
-       }
-       return *r.MilestonesURL
-}
-
-// GetMirrorURL returns the MirrorURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetMirrorURL() string {
-       if r == nil || r.MirrorURL == nil {
-               return ""
-       }
-       return *r.MirrorURL
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (r *Repository) GetName() string {
-       if r == nil || r.Name == nil {
-               return ""
-       }
-       return *r.Name
-}
-
-// GetNetworkCount returns the NetworkCount field if it's non-nil, zero value otherwise.
-func (r *Repository) GetNetworkCount() int {
-       if r == nil || r.NetworkCount == nil {
-               return 0
-       }
-       return *r.NetworkCount
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (r *Repository) GetNodeID() string {
-       if r == nil || r.NodeID == nil {
-               return ""
-       }
-       return *r.NodeID
-}
-
-// GetNotificationsURL returns the NotificationsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetNotificationsURL() string {
-       if r == nil || r.NotificationsURL == nil {
-               return ""
-       }
-       return *r.NotificationsURL
-}
-
-// GetOpenIssuesCount returns the OpenIssuesCount field if it's non-nil, zero value otherwise.
-func (r *Repository) GetOpenIssuesCount() int {
-       if r == nil || r.OpenIssuesCount == nil {
-               return 0
-       }
-       return *r.OpenIssuesCount
-}
-
-// GetOrganization returns the Organization field.
-func (r *Repository) GetOrganization() *Organization {
-       if r == nil {
-               return nil
-       }
-       return r.Organization
-}
-
-// GetOwner returns the Owner field.
-func (r *Repository) GetOwner() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Owner
-}
-
-// GetParent returns the Parent field.
-func (r *Repository) GetParent() *Repository {
-       if r == nil {
-               return nil
-       }
-       return r.Parent
-}
-
-// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise.
-func (r *Repository) GetPermissions() map[string]bool {
-       if r == nil || r.Permissions == nil {
-               return map[string]bool{}
-       }
-       return *r.Permissions
-}
-
-// GetPrivate returns the Private field if it's non-nil, zero value otherwise.
-func (r *Repository) GetPrivate() bool {
-       if r == nil || r.Private == nil {
-               return false
-       }
-       return *r.Private
-}
-
-// GetPullsURL returns the PullsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetPullsURL() string {
-       if r == nil || r.PullsURL == nil {
-               return ""
-       }
-       return *r.PullsURL
-}
-
-// GetPushedAt returns the PushedAt field if it's non-nil, zero value otherwise.
-func (r *Repository) GetPushedAt() Timestamp {
-       if r == nil || r.PushedAt == nil {
-               return Timestamp{}
-       }
-       return *r.PushedAt
-}
-
-// GetReleasesURL returns the ReleasesURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetReleasesURL() string {
-       if r == nil || r.ReleasesURL == nil {
-               return ""
-       }
-       return *r.ReleasesURL
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (r *Repository) GetSize() int {
-       if r == nil || r.Size == nil {
-               return 0
-       }
-       return *r.Size
-}
-
-// GetSource returns the Source field.
-func (r *Repository) GetSource() *Repository {
-       if r == nil {
-               return nil
-       }
-       return r.Source
-}
-
-// GetSSHURL returns the SSHURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetSSHURL() string {
-       if r == nil || r.SSHURL == nil {
-               return ""
-       }
-       return *r.SSHURL
-}
-
-// GetStargazersCount returns the StargazersCount field if it's non-nil, zero value otherwise.
-func (r *Repository) GetStargazersCount() int {
-       if r == nil || r.StargazersCount == nil {
-               return 0
-       }
-       return *r.StargazersCount
-}
-
-// GetStargazersURL returns the StargazersURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetStargazersURL() string {
-       if r == nil || r.StargazersURL == nil {
-               return ""
-       }
-       return *r.StargazersURL
-}
-
-// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetStatusesURL() string {
-       if r == nil || r.StatusesURL == nil {
-               return ""
-       }
-       return *r.StatusesURL
-}
-
-// GetSubscribersCount returns the SubscribersCount field if it's non-nil, zero value otherwise.
-func (r *Repository) GetSubscribersCount() int {
-       if r == nil || r.SubscribersCount == nil {
-               return 0
-       }
-       return *r.SubscribersCount
-}
-
-// GetSubscribersURL returns the SubscribersURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetSubscribersURL() string {
-       if r == nil || r.SubscribersURL == nil {
-               return ""
-       }
-       return *r.SubscribersURL
-}
-
-// GetSubscriptionURL returns the SubscriptionURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetSubscriptionURL() string {
-       if r == nil || r.SubscriptionURL == nil {
-               return ""
-       }
-       return *r.SubscriptionURL
-}
-
-// GetSVNURL returns the SVNURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetSVNURL() string {
-       if r == nil || r.SVNURL == nil {
-               return ""
-       }
-       return *r.SVNURL
-}
-
-// GetTagsURL returns the TagsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetTagsURL() string {
-       if r == nil || r.TagsURL == nil {
-               return ""
-       }
-       return *r.TagsURL
-}
-
-// GetTeamID returns the TeamID field if it's non-nil, zero value otherwise.
-func (r *Repository) GetTeamID() int64 {
-       if r == nil || r.TeamID == nil {
-               return 0
-       }
-       return *r.TeamID
-}
-
-// GetTeamsURL returns the TeamsURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetTeamsURL() string {
-       if r == nil || r.TeamsURL == nil {
-               return ""
-       }
-       return *r.TeamsURL
-}
-
-// GetTemplateRepository returns the TemplateRepository field.
-func (r *Repository) GetTemplateRepository() *Repository {
-       if r == nil {
-               return nil
-       }
-       return r.TemplateRepository
-}
-
-// GetTreesURL returns the TreesURL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetTreesURL() string {
-       if r == nil || r.TreesURL == nil {
-               return ""
-       }
-       return *r.TreesURL
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (r *Repository) GetUpdatedAt() Timestamp {
-       if r == nil || r.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *r.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *Repository) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetVisibility returns the Visibility field if it's non-nil, zero value otherwise.
-func (r *Repository) GetVisibility() string {
-       if r == nil || r.Visibility == nil {
-               return ""
-       }
-       return *r.Visibility
-}
-
-// GetWatchersCount returns the WatchersCount field if it's non-nil, zero value otherwise.
-func (r *Repository) GetWatchersCount() int {
-       if r == nil || r.WatchersCount == nil {
-               return 0
-       }
-       return *r.WatchersCount
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (r *RepositoryComment) GetBody() string {
-       if r == nil || r.Body == nil {
-               return ""
-       }
-       return *r.Body
-}
-
-// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
-func (r *RepositoryComment) GetCommitID() string {
-       if r == nil || r.CommitID == nil {
-               return ""
-       }
-       return *r.CommitID
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (r *RepositoryComment) GetCreatedAt() time.Time {
-       if r == nil || r.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *r.CreatedAt
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryComment) GetHTMLURL() string {
-       if r == nil || r.HTMLURL == nil {
-               return ""
-       }
-       return *r.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (r *RepositoryComment) GetID() int64 {
-       if r == nil || r.ID == nil {
-               return 0
-       }
-       return *r.ID
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (r *RepositoryComment) GetNodeID() string {
-       if r == nil || r.NodeID == nil {
-               return ""
-       }
-       return *r.NodeID
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (r *RepositoryComment) GetPath() string {
-       if r == nil || r.Path == nil {
-               return ""
-       }
-       return *r.Path
-}
-
-// GetPosition returns the Position field if it's non-nil, zero value otherwise.
-func (r *RepositoryComment) GetPosition() int {
-       if r == nil || r.Position == nil {
-               return 0
-       }
-       return *r.Position
-}
-
-// GetReactions returns the Reactions field.
-func (r *RepositoryComment) GetReactions() *Reactions {
-       if r == nil {
-               return nil
-       }
-       return r.Reactions
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (r *RepositoryComment) GetUpdatedAt() time.Time {
-       if r == nil || r.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *r.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *RepositoryComment) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetUser returns the User field.
-func (r *RepositoryComment) GetUser() *User {
-       if r == nil {
-               return nil
-       }
-       return r.User
-}
-
-// GetAuthor returns the Author field.
-func (r *RepositoryCommit) GetAuthor() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Author
-}
-
-// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryCommit) GetCommentsURL() string {
-       if r == nil || r.CommentsURL == nil {
-               return ""
-       }
-       return *r.CommentsURL
-}
-
-// GetCommit returns the Commit field.
-func (r *RepositoryCommit) GetCommit() *Commit {
-       if r == nil {
-               return nil
-       }
-       return r.Commit
-}
-
-// GetCommitter returns the Committer field.
-func (r *RepositoryCommit) GetCommitter() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Committer
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryCommit) GetHTMLURL() string {
-       if r == nil || r.HTMLURL == nil {
-               return ""
-       }
-       return *r.HTMLURL
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (r *RepositoryCommit) GetNodeID() string {
-       if r == nil || r.NodeID == nil {
-               return ""
-       }
-       return *r.NodeID
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (r *RepositoryCommit) GetSHA() string {
-       if r == nil || r.SHA == nil {
-               return ""
-       }
-       return *r.SHA
-}
-
-// GetStats returns the Stats field.
-func (r *RepositoryCommit) GetStats() *CommitStats {
-       if r == nil {
-               return nil
-       }
-       return r.Stats
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *RepositoryCommit) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetDownloadURL() string {
-       if r == nil || r.DownloadURL == nil {
-               return ""
-       }
-       return *r.DownloadURL
-}
-
-// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetEncoding() string {
-       if r == nil || r.Encoding == nil {
-               return ""
-       }
-       return *r.Encoding
-}
-
-// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetGitURL() string {
-       if r == nil || r.GitURL == nil {
-               return ""
-       }
-       return *r.GitURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetHTMLURL() string {
-       if r == nil || r.HTMLURL == nil {
-               return ""
-       }
-       return *r.HTMLURL
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetName() string {
-       if r == nil || r.Name == nil {
-               return ""
-       }
-       return *r.Name
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetPath() string {
-       if r == nil || r.Path == nil {
-               return ""
-       }
-       return *r.Path
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetSHA() string {
-       if r == nil || r.SHA == nil {
-               return ""
-       }
-       return *r.SHA
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetSize() int {
-       if r == nil || r.Size == nil {
-               return 0
-       }
-       return *r.Size
-}
-
-// GetTarget returns the Target field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetTarget() string {
-       if r == nil || r.Target == nil {
-               return ""
-       }
-       return *r.Target
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetType() string {
-       if r == nil || r.Type == nil {
-               return ""
-       }
-       return *r.Type
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *RepositoryContent) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetAuthor returns the Author field.
-func (r *RepositoryContentFileOptions) GetAuthor() *CommitAuthor {
-       if r == nil {
-               return nil
-       }
-       return r.Author
-}
-
-// GetBranch returns the Branch field if it's non-nil, zero value otherwise.
-func (r *RepositoryContentFileOptions) GetBranch() string {
-       if r == nil || r.Branch == nil {
-               return ""
-       }
-       return *r.Branch
-}
-
-// GetCommitter returns the Committer field.
-func (r *RepositoryContentFileOptions) GetCommitter() *CommitAuthor {
-       if r == nil {
-               return nil
-       }
-       return r.Committer
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (r *RepositoryContentFileOptions) GetMessage() string {
-       if r == nil || r.Message == nil {
-               return ""
-       }
-       return *r.Message
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (r *RepositoryContentFileOptions) GetSHA() string {
-       if r == nil || r.SHA == nil {
-               return ""
-       }
-       return *r.SHA
-}
-
-// GetContent returns the Content field.
-func (r *RepositoryContentResponse) GetContent() *RepositoryContent {
-       if r == nil {
-               return nil
-       }
-       return r.Content
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (r *RepositoryDispatchEvent) GetAction() string {
-       if r == nil || r.Action == nil {
-               return ""
-       }
-       return *r.Action
-}
-
-// GetBranch returns the Branch field if it's non-nil, zero value otherwise.
-func (r *RepositoryDispatchEvent) GetBranch() string {
-       if r == nil || r.Branch == nil {
-               return ""
-       }
-       return *r.Branch
-}
-
-// GetInstallation returns the Installation field.
-func (r *RepositoryDispatchEvent) GetInstallation() *Installation {
-       if r == nil {
-               return nil
-       }
-       return r.Installation
-}
-
-// GetOrg returns the Org field.
-func (r *RepositoryDispatchEvent) GetOrg() *Organization {
-       if r == nil {
-               return nil
-       }
-       return r.Org
-}
-
-// GetRepo returns the Repo field.
-func (r *RepositoryDispatchEvent) GetRepo() *Repository {
-       if r == nil {
-               return nil
-       }
-       return r.Repo
-}
-
-// GetSender returns the Sender field.
-func (r *RepositoryDispatchEvent) GetSender() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Sender
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (r *RepositoryEvent) GetAction() string {
-       if r == nil || r.Action == nil {
-               return ""
-       }
-       return *r.Action
-}
-
-// GetInstallation returns the Installation field.
-func (r *RepositoryEvent) GetInstallation() *Installation {
-       if r == nil {
-               return nil
-       }
-       return r.Installation
-}
-
-// GetOrg returns the Org field.
-func (r *RepositoryEvent) GetOrg() *Organization {
-       if r == nil {
-               return nil
-       }
-       return r.Org
-}
-
-// GetRepo returns the Repo field.
-func (r *RepositoryEvent) GetRepo() *Repository {
-       if r == nil {
-               return nil
-       }
-       return r.Repo
-}
-
-// GetSender returns the Sender field.
-func (r *RepositoryEvent) GetSender() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Sender
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (r *RepositoryInvitation) GetCreatedAt() Timestamp {
-       if r == nil || r.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *r.CreatedAt
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryInvitation) GetHTMLURL() string {
-       if r == nil || r.HTMLURL == nil {
-               return ""
-       }
-       return *r.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (r *RepositoryInvitation) GetID() int64 {
-       if r == nil || r.ID == nil {
-               return 0
-       }
-       return *r.ID
-}
-
-// GetInvitee returns the Invitee field.
-func (r *RepositoryInvitation) GetInvitee() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Invitee
-}
-
-// GetInviter returns the Inviter field.
-func (r *RepositoryInvitation) GetInviter() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Inviter
-}
-
-// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise.
-func (r *RepositoryInvitation) GetPermissions() string {
-       if r == nil || r.Permissions == nil {
-               return ""
-       }
-       return *r.Permissions
-}
-
-// GetRepo returns the Repo field.
-func (r *RepositoryInvitation) GetRepo() *Repository {
-       if r == nil {
-               return nil
-       }
-       return r.Repo
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *RepositoryInvitation) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetContent returns the Content field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetContent() string {
-       if r == nil || r.Content == nil {
-               return ""
-       }
-       return *r.Content
-}
-
-// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetDownloadURL() string {
-       if r == nil || r.DownloadURL == nil {
-               return ""
-       }
-       return *r.DownloadURL
-}
-
-// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetEncoding() string {
-       if r == nil || r.Encoding == nil {
-               return ""
-       }
-       return *r.Encoding
-}
-
-// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetGitURL() string {
-       if r == nil || r.GitURL == nil {
-               return ""
-       }
-       return *r.GitURL
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetHTMLURL() string {
-       if r == nil || r.HTMLURL == nil {
-               return ""
-       }
-       return *r.HTMLURL
-}
-
-// GetLicense returns the License field.
-func (r *RepositoryLicense) GetLicense() *License {
-       if r == nil {
-               return nil
-       }
-       return r.License
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetName() string {
-       if r == nil || r.Name == nil {
-               return ""
-       }
-       return *r.Name
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetPath() string {
-       if r == nil || r.Path == nil {
-               return ""
-       }
-       return *r.Path
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetSHA() string {
-       if r == nil || r.SHA == nil {
-               return ""
-       }
-       return *r.SHA
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetSize() int {
-       if r == nil || r.Size == nil {
-               return 0
-       }
-       return *r.Size
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetType() string {
-       if r == nil || r.Type == nil {
-               return ""
-       }
-       return *r.Type
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *RepositoryLicense) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetBase returns the Base field if it's non-nil, zero value otherwise.
-func (r *RepositoryMergeRequest) GetBase() string {
-       if r == nil || r.Base == nil {
-               return ""
-       }
-       return *r.Base
-}
-
-// GetCommitMessage returns the CommitMessage field if it's non-nil, zero value otherwise.
-func (r *RepositoryMergeRequest) GetCommitMessage() string {
-       if r == nil || r.CommitMessage == nil {
-               return ""
-       }
-       return *r.CommitMessage
-}
-
-// GetHead returns the Head field if it's non-nil, zero value otherwise.
-func (r *RepositoryMergeRequest) GetHead() string {
-       if r == nil || r.Head == nil {
-               return ""
-       }
-       return *r.Head
-}
-
-// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
-func (r *RepositoryPermissionLevel) GetPermission() string {
-       if r == nil || r.Permission == nil {
-               return ""
-       }
-       return *r.Permission
-}
-
-// GetUser returns the User field.
-func (r *RepositoryPermissionLevel) GetUser() *User {
-       if r == nil {
-               return nil
-       }
-       return r.User
-}
-
-// GetAssetsURL returns the AssetsURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetAssetsURL() string {
-       if r == nil || r.AssetsURL == nil {
-               return ""
-       }
-       return *r.AssetsURL
-}
-
-// GetAuthor returns the Author field.
-func (r *RepositoryRelease) GetAuthor() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Author
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetBody() string {
-       if r == nil || r.Body == nil {
-               return ""
-       }
-       return *r.Body
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetCreatedAt() Timestamp {
-       if r == nil || r.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *r.CreatedAt
-}
-
-// GetDraft returns the Draft field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetDraft() bool {
-       if r == nil || r.Draft == nil {
-               return false
-       }
-       return *r.Draft
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetHTMLURL() string {
-       if r == nil || r.HTMLURL == nil {
-               return ""
-       }
-       return *r.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetID() int64 {
-       if r == nil || r.ID == nil {
-               return 0
-       }
-       return *r.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetName() string {
-       if r == nil || r.Name == nil {
-               return ""
-       }
-       return *r.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetNodeID() string {
-       if r == nil || r.NodeID == nil {
-               return ""
-       }
-       return *r.NodeID
-}
-
-// GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetPrerelease() bool {
-       if r == nil || r.Prerelease == nil {
-               return false
-       }
-       return *r.Prerelease
-}
-
-// GetPublishedAt returns the PublishedAt field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetPublishedAt() Timestamp {
-       if r == nil || r.PublishedAt == nil {
-               return Timestamp{}
-       }
-       return *r.PublishedAt
-}
-
-// GetTagName returns the TagName field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetTagName() string {
-       if r == nil || r.TagName == nil {
-               return ""
-       }
-       return *r.TagName
-}
-
-// GetTarballURL returns the TarballURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetTarballURL() string {
-       if r == nil || r.TarballURL == nil {
-               return ""
-       }
-       return *r.TarballURL
-}
-
-// GetTargetCommitish returns the TargetCommitish field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetTargetCommitish() string {
-       if r == nil || r.TargetCommitish == nil {
-               return ""
-       }
-       return *r.TargetCommitish
-}
-
-// GetUploadURL returns the UploadURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetUploadURL() string {
-       if r == nil || r.UploadURL == nil {
-               return ""
-       }
-       return *r.UploadURL
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetZipballURL returns the ZipballURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetZipballURL() string {
-       if r == nil || r.ZipballURL == nil {
-               return ""
-       }
-       return *r.ZipballURL
-}
-
-// GetCommit returns the Commit field.
-func (r *RepositoryTag) GetCommit() *Commit {
-       if r == nil {
-               return nil
-       }
-       return r.Commit
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (r *RepositoryTag) GetName() string {
-       if r == nil || r.Name == nil {
-               return ""
-       }
-       return *r.Name
-}
-
-// GetTarballURL returns the TarballURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryTag) GetTarballURL() string {
-       if r == nil || r.TarballURL == nil {
-               return ""
-       }
-       return *r.TarballURL
-}
-
-// GetZipballURL returns the ZipballURL field if it's non-nil, zero value otherwise.
-func (r *RepositoryTag) GetZipballURL() string {
-       if r == nil || r.ZipballURL == nil {
-               return ""
-       }
-       return *r.ZipballURL
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (r *RepositoryVulnerabilityAlertEvent) GetAction() string {
-       if r == nil || r.Action == nil {
-               return ""
-       }
-       return *r.Action
-}
-
-// GetRepository returns the Repository field.
-func (r *RepositoryVulnerabilityAlertEvent) GetRepository() *Repository {
-       if r == nil {
-               return nil
-       }
-       return r.Repository
-}
-
-// GetForkRepos returns the ForkRepos field if it's non-nil, zero value otherwise.
-func (r *RepoStats) GetForkRepos() int {
-       if r == nil || r.ForkRepos == nil {
-               return 0
-       }
-       return *r.ForkRepos
-}
-
-// GetOrgRepos returns the OrgRepos field if it's non-nil, zero value otherwise.
-func (r *RepoStats) GetOrgRepos() int {
-       if r == nil || r.OrgRepos == nil {
-               return 0
-       }
-       return *r.OrgRepos
-}
-
-// GetRootRepos returns the RootRepos field if it's non-nil, zero value otherwise.
-func (r *RepoStats) GetRootRepos() int {
-       if r == nil || r.RootRepos == nil {
-               return 0
-       }
-       return *r.RootRepos
-}
-
-// GetTotalPushes returns the TotalPushes field if it's non-nil, zero value otherwise.
-func (r *RepoStats) GetTotalPushes() int {
-       if r == nil || r.TotalPushes == nil {
-               return 0
-       }
-       return *r.TotalPushes
-}
-
-// GetTotalRepos returns the TotalRepos field if it's non-nil, zero value otherwise.
-func (r *RepoStats) GetTotalRepos() int {
-       if r == nil || r.TotalRepos == nil {
-               return 0
-       }
-       return *r.TotalRepos
-}
-
-// GetTotalWikis returns the TotalWikis field if it's non-nil, zero value otherwise.
-func (r *RepoStats) GetTotalWikis() int {
-       if r == nil || r.TotalWikis == nil {
-               return 0
-       }
-       return *r.TotalWikis
-}
-
-// GetContext returns the Context field if it's non-nil, zero value otherwise.
-func (r *RepoStatus) GetContext() string {
-       if r == nil || r.Context == nil {
-               return ""
-       }
-       return *r.Context
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (r *RepoStatus) GetCreatedAt() time.Time {
-       if r == nil || r.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *r.CreatedAt
-}
-
-// GetCreator returns the Creator field.
-func (r *RepoStatus) GetCreator() *User {
-       if r == nil {
-               return nil
-       }
-       return r.Creator
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (r *RepoStatus) GetDescription() string {
-       if r == nil || r.Description == nil {
-               return ""
-       }
-       return *r.Description
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (r *RepoStatus) GetID() int64 {
-       if r == nil || r.ID == nil {
-               return 0
-       }
-       return *r.ID
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (r *RepoStatus) GetNodeID() string {
-       if r == nil || r.NodeID == nil {
-               return ""
-       }
-       return *r.NodeID
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (r *RepoStatus) GetState() string {
-       if r == nil || r.State == nil {
-               return ""
-       }
-       return *r.State
-}
-
-// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise.
-func (r *RepoStatus) GetTargetURL() string {
-       if r == nil || r.TargetURL == nil {
-               return ""
-       }
-       return *r.TargetURL
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (r *RepoStatus) GetUpdatedAt() time.Time {
-       if r == nil || r.UpdatedAt == nil {
-               return time.Time{}
-       }
-       return *r.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (r *RepoStatus) GetURL() string {
-       if r == nil || r.URL == nil {
-               return ""
-       }
-       return *r.URL
-}
-
-// GetStrict returns the Strict field if it's non-nil, zero value otherwise.
-func (r *RequiredStatusChecksRequest) GetStrict() bool {
-       if r == nil || r.Strict == nil {
-               return false
-       }
-       return *r.Strict
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (r *ReviewersRequest) GetNodeID() string {
-       if r == nil || r.NodeID == nil {
-               return ""
-       }
-       return *r.NodeID
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (r *Runner) GetID() int64 {
-       if r == nil || r.ID == nil {
-               return 0
-       }
-       return *r.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (r *Runner) GetName() string {
-       if r == nil || r.Name == nil {
-               return ""
-       }
-       return *r.Name
-}
-
-// GetOS returns the OS field if it's non-nil, zero value otherwise.
-func (r *Runner) GetOS() string {
-       if r == nil || r.OS == nil {
-               return ""
-       }
-       return *r.OS
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (r *Runner) GetStatus() string {
-       if r == nil || r.Status == nil {
-               return ""
-       }
-       return *r.Status
-}
-
-// GetArchitecture returns the Architecture field if it's non-nil, zero value otherwise.
-func (r *RunnerApplicationDownload) GetArchitecture() string {
-       if r == nil || r.Architecture == nil {
-               return ""
-       }
-       return *r.Architecture
-}
-
-// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise.
-func (r *RunnerApplicationDownload) GetDownloadURL() string {
-       if r == nil || r.DownloadURL == nil {
-               return ""
-       }
-       return *r.DownloadURL
-}
-
-// GetFilename returns the Filename field if it's non-nil, zero value otherwise.
-func (r *RunnerApplicationDownload) GetFilename() string {
-       if r == nil || r.Filename == nil {
-               return ""
-       }
-       return *r.Filename
-}
-
-// GetOS returns the OS field if it's non-nil, zero value otherwise.
-func (r *RunnerApplicationDownload) GetOS() string {
-       if r == nil || r.OS == nil {
-               return ""
-       }
-       return *r.OS
-}
-
-// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
-func (s *SelectedReposList) GetTotalCount() int {
-       if s == nil || s.TotalCount == nil {
-               return 0
-       }
-       return *s.TotalCount
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (s *ServiceHook) GetName() string {
-       if s == nil || s.Name == nil {
-               return ""
-       }
-       return *s.Name
-}
-
-// GetEnabled returns the Enabled field if it's non-nil, zero value otherwise.
-func (s *SignaturesProtectedBranch) GetEnabled() bool {
-       if s == nil || s.Enabled == nil {
-               return false
-       }
-       return *s.Enabled
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (s *SignaturesProtectedBranch) GetURL() string {
-       if s == nil || s.URL == nil {
-               return ""
-       }
-       return *s.URL
-}
-
-// GetPayload returns the Payload field if it's non-nil, zero value otherwise.
-func (s *SignatureVerification) GetPayload() string {
-       if s == nil || s.Payload == nil {
-               return ""
-       }
-       return *s.Payload
-}
-
-// GetReason returns the Reason field if it's non-nil, zero value otherwise.
-func (s *SignatureVerification) GetReason() string {
-       if s == nil || s.Reason == nil {
-               return ""
-       }
-       return *s.Reason
-}
-
-// GetSignature returns the Signature field if it's non-nil, zero value otherwise.
-func (s *SignatureVerification) GetSignature() string {
-       if s == nil || s.Signature == nil {
-               return ""
-       }
-       return *s.Signature
-}
-
-// GetVerified returns the Verified field if it's non-nil, zero value otherwise.
-func (s *SignatureVerification) GetVerified() bool {
-       if s == nil || s.Verified == nil {
-               return false
-       }
-       return *s.Verified
-}
-
-// GetActor returns the Actor field.
-func (s *Source) GetActor() *User {
-       if s == nil {
-               return nil
-       }
-       return s.Actor
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (s *Source) GetID() int64 {
-       if s == nil || s.ID == nil {
-               return 0
-       }
-       return *s.ID
-}
-
-// GetIssue returns the Issue field.
-func (s *Source) GetIssue() *Issue {
-       if s == nil {
-               return nil
-       }
-       return s.Issue
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (s *Source) GetType() string {
-       if s == nil || s.Type == nil {
-               return ""
-       }
-       return *s.Type
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (s *Source) GetURL() string {
-       if s == nil || s.URL == nil {
-               return ""
-       }
-       return *s.URL
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (s *SourceImportAuthor) GetEmail() string {
-       if s == nil || s.Email == nil {
-               return ""
-       }
-       return *s.Email
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (s *SourceImportAuthor) GetID() int64 {
-       if s == nil || s.ID == nil {
-               return 0
-       }
-       return *s.ID
-}
-
-// GetImportURL returns the ImportURL field if it's non-nil, zero value otherwise.
-func (s *SourceImportAuthor) GetImportURL() string {
-       if s == nil || s.ImportURL == nil {
-               return ""
-       }
-       return *s.ImportURL
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (s *SourceImportAuthor) GetName() string {
-       if s == nil || s.Name == nil {
-               return ""
-       }
-       return *s.Name
-}
-
-// GetRemoteID returns the RemoteID field if it's non-nil, zero value otherwise.
-func (s *SourceImportAuthor) GetRemoteID() string {
-       if s == nil || s.RemoteID == nil {
-               return ""
-       }
-       return *s.RemoteID
-}
-
-// GetRemoteName returns the RemoteName field if it's non-nil, zero value otherwise.
-func (s *SourceImportAuthor) GetRemoteName() string {
-       if s == nil || s.RemoteName == nil {
-               return ""
-       }
-       return *s.RemoteName
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (s *SourceImportAuthor) GetURL() string {
-       if s == nil || s.URL == nil {
-               return ""
-       }
-       return *s.URL
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (s *StarEvent) GetAction() string {
-       if s == nil || s.Action == nil {
-               return ""
-       }
-       return *s.Action
-}
-
-// GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise.
-func (s *StarEvent) GetStarredAt() Timestamp {
-       if s == nil || s.StarredAt == nil {
-               return Timestamp{}
-       }
-       return *s.StarredAt
-}
-
-// GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise.
-func (s *Stargazer) GetStarredAt() Timestamp {
-       if s == nil || s.StarredAt == nil {
-               return Timestamp{}
-       }
-       return *s.StarredAt
-}
-
-// GetUser returns the User field.
-func (s *Stargazer) GetUser() *User {
-       if s == nil {
-               return nil
-       }
-       return s.User
-}
-
-// GetRepository returns the Repository field.
-func (s *StarredRepository) GetRepository() *Repository {
-       if s == nil {
-               return nil
-       }
-       return s.Repository
-}
-
-// GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise.
-func (s *StarredRepository) GetStarredAt() Timestamp {
-       if s == nil || s.StarredAt == nil {
-               return Timestamp{}
-       }
-       return *s.StarredAt
-}
-
-// GetCommit returns the Commit field.
-func (s *StatusEvent) GetCommit() *RepositoryCommit {
-       if s == nil {
-               return nil
-       }
-       return s.Commit
-}
-
-// GetContext returns the Context field if it's non-nil, zero value otherwise.
-func (s *StatusEvent) GetContext() string {
-       if s == nil || s.Context == nil {
-               return ""
-       }
-       return *s.Context
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (s *StatusEvent) GetCreatedAt() Timestamp {
-       if s == nil || s.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *s.CreatedAt
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (s *StatusEvent) GetDescription() string {
-       if s == nil || s.Description == nil {
-               return ""
-       }
-       return *s.Description
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (s *StatusEvent) GetID() int64 {
-       if s == nil || s.ID == nil {
-               return 0
-       }
-       return *s.ID
-}
-
-// GetInstallation returns the Installation field.
-func (s *StatusEvent) GetInstallation() *Installation {
-       if s == nil {
-               return nil
-       }
-       return s.Installation
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (s *StatusEvent) GetName() string {
-       if s == nil || s.Name == nil {
-               return ""
-       }
-       return *s.Name
-}
-
-// GetRepo returns the Repo field.
-func (s *StatusEvent) GetRepo() *Repository {
-       if s == nil {
-               return nil
-       }
-       return s.Repo
-}
-
-// GetSender returns the Sender field.
-func (s *StatusEvent) GetSender() *User {
-       if s == nil {
-               return nil
-       }
-       return s.Sender
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (s *StatusEvent) GetSHA() string {
-       if s == nil || s.SHA == nil {
-               return ""
-       }
-       return *s.SHA
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (s *StatusEvent) GetState() string {
-       if s == nil || s.State == nil {
-               return ""
-       }
-       return *s.State
-}
-
-// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise.
-func (s *StatusEvent) GetTargetURL() string {
-       if s == nil || s.TargetURL == nil {
-               return ""
-       }
-       return *s.TargetURL
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (s *StatusEvent) GetUpdatedAt() Timestamp {
-       if s == nil || s.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *s.UpdatedAt
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (s *Subscription) GetCreatedAt() Timestamp {
-       if s == nil || s.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *s.CreatedAt
-}
-
-// GetIgnored returns the Ignored field if it's non-nil, zero value otherwise.
-func (s *Subscription) GetIgnored() bool {
-       if s == nil || s.Ignored == nil {
-               return false
-       }
-       return *s.Ignored
-}
-
-// GetReason returns the Reason field if it's non-nil, zero value otherwise.
-func (s *Subscription) GetReason() string {
-       if s == nil || s.Reason == nil {
-               return ""
-       }
-       return *s.Reason
-}
-
-// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
-func (s *Subscription) GetRepositoryURL() string {
-       if s == nil || s.RepositoryURL == nil {
-               return ""
-       }
-       return *s.RepositoryURL
-}
-
-// GetSubscribed returns the Subscribed field if it's non-nil, zero value otherwise.
-func (s *Subscription) GetSubscribed() bool {
-       if s == nil || s.Subscribed == nil {
-               return false
-       }
-       return *s.Subscribed
-}
-
-// GetThreadURL returns the ThreadURL field if it's non-nil, zero value otherwise.
-func (s *Subscription) GetThreadURL() string {
-       if s == nil || s.ThreadURL == nil {
-               return ""
-       }
-       return *s.ThreadURL
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (s *Subscription) GetURL() string {
-       if s == nil || s.URL == nil {
-               return ""
-       }
-       return *s.URL
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (t *Tag) GetMessage() string {
-       if t == nil || t.Message == nil {
-               return ""
-       }
-       return *t.Message
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (t *Tag) GetNodeID() string {
-       if t == nil || t.NodeID == nil {
-               return ""
-       }
-       return *t.NodeID
-}
-
-// GetObject returns the Object field.
-func (t *Tag) GetObject() *GitObject {
-       if t == nil {
-               return nil
-       }
-       return t.Object
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (t *Tag) GetSHA() string {
-       if t == nil || t.SHA == nil {
-               return ""
-       }
-       return *t.SHA
-}
-
-// GetTag returns the Tag field if it's non-nil, zero value otherwise.
-func (t *Tag) GetTag() string {
-       if t == nil || t.Tag == nil {
-               return ""
-       }
-       return *t.Tag
-}
-
-// GetTagger returns the Tagger field.
-func (t *Tag) GetTagger() *CommitAuthor {
-       if t == nil {
-               return nil
-       }
-       return t.Tagger
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (t *Tag) GetURL() string {
-       if t == nil || t.URL == nil {
-               return ""
-       }
-       return *t.URL
-}
-
-// GetVerification returns the Verification field.
-func (t *Tag) GetVerification() *SignatureVerification {
-       if t == nil {
-               return nil
-       }
-       return t.Verification
-}
-
-// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
-func (t *TaskStep) GetCompletedAt() Timestamp {
-       if t == nil || t.CompletedAt == nil {
-               return Timestamp{}
-       }
-       return *t.CompletedAt
-}
-
-// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
-func (t *TaskStep) GetConclusion() string {
-       if t == nil || t.Conclusion == nil {
-               return ""
-       }
-       return *t.Conclusion
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (t *TaskStep) GetName() string {
-       if t == nil || t.Name == nil {
-               return ""
-       }
-       return *t.Name
-}
-
-// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (t *TaskStep) GetNumber() int64 {
-       if t == nil || t.Number == nil {
-               return 0
-       }
-       return *t.Number
-}
-
-// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
-func (t *TaskStep) GetStartedAt() Timestamp {
-       if t == nil || t.StartedAt == nil {
-               return Timestamp{}
-       }
-       return *t.StartedAt
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (t *TaskStep) GetStatus() string {
-       if t == nil || t.Status == nil {
-               return ""
-       }
-       return *t.Status
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (t *Team) GetDescription() string {
-       if t == nil || t.Description == nil {
-               return ""
-       }
-       return *t.Description
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (t *Team) GetID() int64 {
-       if t == nil || t.ID == nil {
-               return 0
-       }
-       return *t.ID
-}
-
-// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise.
-func (t *Team) GetLDAPDN() string {
-       if t == nil || t.LDAPDN == nil {
-               return ""
-       }
-       return *t.LDAPDN
-}
-
-// GetMembersCount returns the MembersCount field if it's non-nil, zero value otherwise.
-func (t *Team) GetMembersCount() int {
-       if t == nil || t.MembersCount == nil {
-               return 0
-       }
-       return *t.MembersCount
-}
-
-// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise.
-func (t *Team) GetMembersURL() string {
-       if t == nil || t.MembersURL == nil {
-               return ""
-       }
-       return *t.MembersURL
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (t *Team) GetName() string {
-       if t == nil || t.Name == nil {
-               return ""
-       }
-       return *t.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (t *Team) GetNodeID() string {
-       if t == nil || t.NodeID == nil {
-               return ""
-       }
-       return *t.NodeID
-}
-
-// GetOrganization returns the Organization field.
-func (t *Team) GetOrganization() *Organization {
-       if t == nil {
-               return nil
-       }
-       return t.Organization
-}
-
-// GetParent returns the Parent field.
-func (t *Team) GetParent() *Team {
-       if t == nil {
-               return nil
-       }
-       return t.Parent
-}
-
-// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
-func (t *Team) GetPermission() string {
-       if t == nil || t.Permission == nil {
-               return ""
-       }
-       return *t.Permission
-}
-
-// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise.
-func (t *Team) GetPrivacy() string {
-       if t == nil || t.Privacy == nil {
-               return ""
-       }
-       return *t.Privacy
-}
-
-// GetReposCount returns the ReposCount field if it's non-nil, zero value otherwise.
-func (t *Team) GetReposCount() int {
-       if t == nil || t.ReposCount == nil {
-               return 0
-       }
-       return *t.ReposCount
-}
-
-// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise.
-func (t *Team) GetRepositoriesURL() string {
-       if t == nil || t.RepositoriesURL == nil {
-               return ""
-       }
-       return *t.RepositoriesURL
-}
-
-// GetSlug returns the Slug field if it's non-nil, zero value otherwise.
-func (t *Team) GetSlug() string {
-       if t == nil || t.Slug == nil {
-               return ""
-       }
-       return *t.Slug
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (t *Team) GetURL() string {
-       if t == nil || t.URL == nil {
-               return ""
-       }
-       return *t.URL
-}
-
-// GetInstallation returns the Installation field.
-func (t *TeamAddEvent) GetInstallation() *Installation {
-       if t == nil {
-               return nil
-       }
-       return t.Installation
-}
-
-// GetOrg returns the Org field.
-func (t *TeamAddEvent) GetOrg() *Organization {
-       if t == nil {
-               return nil
-       }
-       return t.Org
-}
-
-// GetRepo returns the Repo field.
-func (t *TeamAddEvent) GetRepo() *Repository {
-       if t == nil {
-               return nil
-       }
-       return t.Repo
-}
-
-// GetSender returns the Sender field.
-func (t *TeamAddEvent) GetSender() *User {
-       if t == nil {
-               return nil
-       }
-       return t.Sender
-}
-
-// GetTeam returns the Team field.
-func (t *TeamAddEvent) GetTeam() *Team {
-       if t == nil {
-               return nil
-       }
-       return t.Team
-}
-
-// GetAuthor returns the Author field.
-func (t *TeamDiscussion) GetAuthor() *User {
-       if t == nil {
-               return nil
-       }
-       return t.Author
-}
-
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetBody() string {
-       if t == nil || t.Body == nil {
-               return ""
-       }
-       return *t.Body
-}
-
-// GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetBodyHTML() string {
-       if t == nil || t.BodyHTML == nil {
-               return ""
-       }
-       return *t.BodyHTML
-}
-
-// GetBodyVersion returns the BodyVersion field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetBodyVersion() string {
-       if t == nil || t.BodyVersion == nil {
-               return ""
-       }
-       return *t.BodyVersion
-}
-
-// GetCommentsCount returns the CommentsCount field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetCommentsCount() int {
-       if t == nil || t.CommentsCount == nil {
-               return 0
-       }
-       return *t.CommentsCount
-}
-
-// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetCommentsURL() string {
-       if t == nil || t.CommentsURL == nil {
-               return ""
-       }
-       return *t.CommentsURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetCreatedAt() Timestamp {
-       if t == nil || t.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *t.CreatedAt
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetHTMLURL() string {
-       if t == nil || t.HTMLURL == nil {
-               return ""
-       }
-       return *t.HTMLURL
-}
-
-// GetLastEditedAt returns the LastEditedAt field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetLastEditedAt() Timestamp {
-       if t == nil || t.LastEditedAt == nil {
-               return Timestamp{}
-       }
-       return *t.LastEditedAt
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetNodeID() string {
-       if t == nil || t.NodeID == nil {
-               return ""
-       }
-       return *t.NodeID
-}
-
-// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetNumber() int {
-       if t == nil || t.Number == nil {
-               return 0
-       }
-       return *t.Number
-}
-
-// GetPinned returns the Pinned field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetPinned() bool {
-       if t == nil || t.Pinned == nil {
-               return false
-       }
-       return *t.Pinned
-}
-
-// GetPrivate returns the Private field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetPrivate() bool {
-       if t == nil || t.Private == nil {
-               return false
-       }
-       return *t.Private
-}
-
-// GetReactions returns the Reactions field.
-func (t *TeamDiscussion) GetReactions() *Reactions {
-       if t == nil {
-               return nil
-       }
-       return t.Reactions
-}
-
-// GetTeamURL returns the TeamURL field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetTeamURL() string {
-       if t == nil || t.TeamURL == nil {
-               return ""
-       }
-       return *t.TeamURL
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetTitle() string {
-       if t == nil || t.Title == nil {
-               return ""
-       }
-       return *t.Title
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetUpdatedAt() Timestamp {
-       if t == nil || t.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *t.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (t *TeamDiscussion) GetURL() string {
-       if t == nil || t.URL == nil {
-               return ""
-       }
-       return *t.URL
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (t *TeamEvent) GetAction() string {
-       if t == nil || t.Action == nil {
-               return ""
-       }
-       return *t.Action
-}
-
-// GetChanges returns the Changes field.
-func (t *TeamEvent) GetChanges() *TeamChange {
-       if t == nil {
-               return nil
-       }
-       return t.Changes
-}
-
-// GetInstallation returns the Installation field.
-func (t *TeamEvent) GetInstallation() *Installation {
-       if t == nil {
-               return nil
-       }
-       return t.Installation
-}
-
-// GetOrg returns the Org field.
-func (t *TeamEvent) GetOrg() *Organization {
-       if t == nil {
-               return nil
-       }
-       return t.Org
-}
-
-// GetRepo returns the Repo field.
-func (t *TeamEvent) GetRepo() *Repository {
-       if t == nil {
-               return nil
-       }
-       return t.Repo
-}
-
-// GetSender returns the Sender field.
-func (t *TeamEvent) GetSender() *User {
-       if t == nil {
-               return nil
-       }
-       return t.Sender
-}
-
-// GetTeam returns the Team field.
-func (t *TeamEvent) GetTeam() *Team {
-       if t == nil {
-               return nil
-       }
-       return t.Team
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (t *TeamLDAPMapping) GetDescription() string {
-       if t == nil || t.Description == nil {
-               return ""
-       }
-       return *t.Description
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (t *TeamLDAPMapping) GetID() int64 {
-       if t == nil || t.ID == nil {
-               return 0
-       }
-       return *t.ID
-}
-
-// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise.
-func (t *TeamLDAPMapping) GetLDAPDN() string {
-       if t == nil || t.LDAPDN == nil {
-               return ""
-       }
-       return *t.LDAPDN
-}
-
-// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise.
-func (t *TeamLDAPMapping) GetMembersURL() string {
-       if t == nil || t.MembersURL == nil {
-               return ""
-       }
-       return *t.MembersURL
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (t *TeamLDAPMapping) GetName() string {
-       if t == nil || t.Name == nil {
-               return ""
-       }
-       return *t.Name
-}
-
-// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
-func (t *TeamLDAPMapping) GetPermission() string {
-       if t == nil || t.Permission == nil {
-               return ""
-       }
-       return *t.Permission
-}
-
-// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise.
-func (t *TeamLDAPMapping) GetPrivacy() string {
-       if t == nil || t.Privacy == nil {
-               return ""
-       }
-       return *t.Privacy
-}
-
-// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise.
-func (t *TeamLDAPMapping) GetRepositoriesURL() string {
-       if t == nil || t.RepositoriesURL == nil {
-               return ""
-       }
-       return *t.RepositoriesURL
-}
-
-// GetSlug returns the Slug field if it's non-nil, zero value otherwise.
-func (t *TeamLDAPMapping) GetSlug() string {
-       if t == nil || t.Slug == nil {
-               return ""
-       }
-       return *t.Slug
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (t *TeamLDAPMapping) GetURL() string {
-       if t == nil || t.URL == nil {
-               return ""
-       }
-       return *t.URL
-}
-
-// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
-func (t *TeamProjectOptions) GetPermission() string {
-       if t == nil || t.Permission == nil {
-               return ""
-       }
-       return *t.Permission
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (t *TemplateRepoRequest) GetDescription() string {
-       if t == nil || t.Description == nil {
-               return ""
-       }
-       return *t.Description
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (t *TemplateRepoRequest) GetName() string {
-       if t == nil || t.Name == nil {
-               return ""
-       }
-       return *t.Name
-}
-
-// GetOwner returns the Owner field if it's non-nil, zero value otherwise.
-func (t *TemplateRepoRequest) GetOwner() string {
-       if t == nil || t.Owner == nil {
-               return ""
-       }
-       return *t.Owner
-}
-
-// GetPrivate returns the Private field if it's non-nil, zero value otherwise.
-func (t *TemplateRepoRequest) GetPrivate() bool {
-       if t == nil || t.Private == nil {
-               return false
-       }
-       return *t.Private
-}
-
-// GetFragment returns the Fragment field if it's non-nil, zero value otherwise.
-func (t *TextMatch) GetFragment() string {
-       if t == nil || t.Fragment == nil {
-               return ""
-       }
-       return *t.Fragment
-}
-
-// GetObjectType returns the ObjectType field if it's non-nil, zero value otherwise.
-func (t *TextMatch) GetObjectType() string {
-       if t == nil || t.ObjectType == nil {
-               return ""
-       }
-       return *t.ObjectType
-}
-
-// GetObjectURL returns the ObjectURL field if it's non-nil, zero value otherwise.
-func (t *TextMatch) GetObjectURL() string {
-       if t == nil || t.ObjectURL == nil {
-               return ""
-       }
-       return *t.ObjectURL
-}
-
-// GetProperty returns the Property field if it's non-nil, zero value otherwise.
-func (t *TextMatch) GetProperty() string {
-       if t == nil || t.Property == nil {
-               return ""
-       }
-       return *t.Property
-}
-
-// GetActor returns the Actor field.
-func (t *Timeline) GetActor() *User {
-       if t == nil {
-               return nil
-       }
-       return t.Actor
-}
-
-// GetAssignee returns the Assignee field.
-func (t *Timeline) GetAssignee() *User {
-       if t == nil {
-               return nil
-       }
-       return t.Assignee
-}
-
-// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
-func (t *Timeline) GetCommitID() string {
-       if t == nil || t.CommitID == nil {
-               return ""
-       }
-       return *t.CommitID
-}
-
-// GetCommitURL returns the CommitURL field if it's non-nil, zero value otherwise.
-func (t *Timeline) GetCommitURL() string {
-       if t == nil || t.CommitURL == nil {
-               return ""
-       }
-       return *t.CommitURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (t *Timeline) GetCreatedAt() time.Time {
-       if t == nil || t.CreatedAt == nil {
-               return time.Time{}
-       }
-       return *t.CreatedAt
-}
-
-// GetEvent returns the Event field if it's non-nil, zero value otherwise.
-func (t *Timeline) GetEvent() string {
-       if t == nil || t.Event == nil {
-               return ""
-       }
-       return *t.Event
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (t *Timeline) GetID() int64 {
-       if t == nil || t.ID == nil {
-               return 0
-       }
-       return *t.ID
-}
-
-// GetLabel returns the Label field.
-func (t *Timeline) GetLabel() *Label {
-       if t == nil {
-               return nil
-       }
-       return t.Label
-}
-
-// GetMilestone returns the Milestone field.
-func (t *Timeline) GetMilestone() *Milestone {
-       if t == nil {
-               return nil
-       }
-       return t.Milestone
-}
-
-// GetProjectCard returns the ProjectCard field.
-func (t *Timeline) GetProjectCard() *ProjectCard {
-       if t == nil {
-               return nil
-       }
-       return t.ProjectCard
-}
-
-// GetRename returns the Rename field.
-func (t *Timeline) GetRename() *Rename {
-       if t == nil {
-               return nil
-       }
-       return t.Rename
-}
-
-// GetSource returns the Source field.
-func (t *Timeline) GetSource() *Source {
-       if t == nil {
-               return nil
-       }
-       return t.Source
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (t *Timeline) GetURL() string {
-       if t == nil || t.URL == nil {
-               return ""
-       }
-       return *t.URL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (t *TopicResult) GetCreatedAt() Timestamp {
-       if t == nil || t.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *t.CreatedAt
-}
-
-// GetCreatedBy returns the CreatedBy field if it's non-nil, zero value otherwise.
-func (t *TopicResult) GetCreatedBy() string {
-       if t == nil || t.CreatedBy == nil {
-               return ""
-       }
-       return *t.CreatedBy
-}
-
-// GetCurated returns the Curated field if it's non-nil, zero value otherwise.
-func (t *TopicResult) GetCurated() bool {
-       if t == nil || t.Curated == nil {
-               return false
-       }
-       return *t.Curated
-}
-
-// GetDescription returns the Description field if it's non-nil, zero value otherwise.
-func (t *TopicResult) GetDescription() string {
-       if t == nil || t.Description == nil {
-               return ""
-       }
-       return *t.Description
-}
-
-// GetDisplayName returns the DisplayName field if it's non-nil, zero value otherwise.
-func (t *TopicResult) GetDisplayName() string {
-       if t == nil || t.DisplayName == nil {
-               return ""
-       }
-       return *t.DisplayName
-}
-
-// GetFeatured returns the Featured field if it's non-nil, zero value otherwise.
-func (t *TopicResult) GetFeatured() bool {
-       if t == nil || t.Featured == nil {
-               return false
-       }
-       return *t.Featured
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (t *TopicResult) GetName() string {
-       if t == nil || t.Name == nil {
-               return ""
-       }
-       return *t.Name
-}
-
-// GetScore returns the Score field.
-func (t *TopicResult) GetScore() *float64 {
-       if t == nil {
-               return nil
-       }
-       return t.Score
-}
-
-// GetShortDescription returns the ShortDescription field if it's non-nil, zero value otherwise.
-func (t *TopicResult) GetShortDescription() string {
-       if t == nil || t.ShortDescription == nil {
-               return ""
-       }
-       return *t.ShortDescription
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (t *TopicResult) GetUpdatedAt() string {
-       if t == nil || t.UpdatedAt == nil {
-               return ""
-       }
-       return *t.UpdatedAt
-}
-
-// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
-func (t *TopicsSearchResult) GetIncompleteResults() bool {
-       if t == nil || t.IncompleteResults == nil {
-               return false
-       }
-       return *t.IncompleteResults
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (t *TopicsSearchResult) GetTotal() int {
-       if t == nil || t.Total == nil {
-               return 0
-       }
-       return *t.Total
-}
-
-// GetCount returns the Count field if it's non-nil, zero value otherwise.
-func (t *TrafficClones) GetCount() int {
-       if t == nil || t.Count == nil {
-               return 0
-       }
-       return *t.Count
-}
-
-// GetUniques returns the Uniques field if it's non-nil, zero value otherwise.
-func (t *TrafficClones) GetUniques() int {
-       if t == nil || t.Uniques == nil {
-               return 0
-       }
-       return *t.Uniques
-}
-
-// GetCount returns the Count field if it's non-nil, zero value otherwise.
-func (t *TrafficData) GetCount() int {
-       if t == nil || t.Count == nil {
-               return 0
-       }
-       return *t.Count
-}
-
-// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise.
-func (t *TrafficData) GetTimestamp() Timestamp {
-       if t == nil || t.Timestamp == nil {
-               return Timestamp{}
-       }
-       return *t.Timestamp
-}
-
-// GetUniques returns the Uniques field if it's non-nil, zero value otherwise.
-func (t *TrafficData) GetUniques() int {
-       if t == nil || t.Uniques == nil {
-               return 0
-       }
-       return *t.Uniques
-}
-
-// GetCount returns the Count field if it's non-nil, zero value otherwise.
-func (t *TrafficPath) GetCount() int {
-       if t == nil || t.Count == nil {
-               return 0
-       }
-       return *t.Count
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (t *TrafficPath) GetPath() string {
-       if t == nil || t.Path == nil {
-               return ""
-       }
-       return *t.Path
-}
-
-// GetTitle returns the Title field if it's non-nil, zero value otherwise.
-func (t *TrafficPath) GetTitle() string {
-       if t == nil || t.Title == nil {
-               return ""
-       }
-       return *t.Title
-}
-
-// GetUniques returns the Uniques field if it's non-nil, zero value otherwise.
-func (t *TrafficPath) GetUniques() int {
-       if t == nil || t.Uniques == nil {
-               return 0
-       }
-       return *t.Uniques
-}
-
-// GetCount returns the Count field if it's non-nil, zero value otherwise.
-func (t *TrafficReferrer) GetCount() int {
-       if t == nil || t.Count == nil {
-               return 0
-       }
-       return *t.Count
-}
-
-// GetReferrer returns the Referrer field if it's non-nil, zero value otherwise.
-func (t *TrafficReferrer) GetReferrer() string {
-       if t == nil || t.Referrer == nil {
-               return ""
-       }
-       return *t.Referrer
-}
-
-// GetUniques returns the Uniques field if it's non-nil, zero value otherwise.
-func (t *TrafficReferrer) GetUniques() int {
-       if t == nil || t.Uniques == nil {
-               return 0
-       }
-       return *t.Uniques
-}
-
-// GetCount returns the Count field if it's non-nil, zero value otherwise.
-func (t *TrafficViews) GetCount() int {
-       if t == nil || t.Count == nil {
-               return 0
-       }
-       return *t.Count
-}
-
-// GetUniques returns the Uniques field if it's non-nil, zero value otherwise.
-func (t *TrafficViews) GetUniques() int {
-       if t == nil || t.Uniques == nil {
-               return 0
-       }
-       return *t.Uniques
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (t *Tree) GetSHA() string {
-       if t == nil || t.SHA == nil {
-               return ""
-       }
-       return *t.SHA
-}
-
-// GetTruncated returns the Truncated field if it's non-nil, zero value otherwise.
-func (t *Tree) GetTruncated() bool {
-       if t == nil || t.Truncated == nil {
-               return false
-       }
-       return *t.Truncated
-}
-
-// GetContent returns the Content field if it's non-nil, zero value otherwise.
-func (t *TreeEntry) GetContent() string {
-       if t == nil || t.Content == nil {
-               return ""
-       }
-       return *t.Content
-}
-
-// GetMode returns the Mode field if it's non-nil, zero value otherwise.
-func (t *TreeEntry) GetMode() string {
-       if t == nil || t.Mode == nil {
-               return ""
-       }
-       return *t.Mode
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (t *TreeEntry) GetPath() string {
-       if t == nil || t.Path == nil {
-               return ""
-       }
-       return *t.Path
-}
-
-// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
-func (t *TreeEntry) GetSHA() string {
-       if t == nil || t.SHA == nil {
-               return ""
-       }
-       return *t.SHA
-}
-
-// GetSize returns the Size field if it's non-nil, zero value otherwise.
-func (t *TreeEntry) GetSize() int {
-       if t == nil || t.Size == nil {
-               return 0
-       }
-       return *t.Size
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (t *TreeEntry) GetType() string {
-       if t == nil || t.Type == nil {
-               return ""
-       }
-       return *t.Type
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (t *TreeEntry) GetURL() string {
-       if t == nil || t.URL == nil {
-               return ""
-       }
-       return *t.URL
-}
-
-// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
-func (u *UpdateCheckRunOptions) GetCompletedAt() Timestamp {
-       if u == nil || u.CompletedAt == nil {
-               return Timestamp{}
-       }
-       return *u.CompletedAt
-}
-
-// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
-func (u *UpdateCheckRunOptions) GetConclusion() string {
-       if u == nil || u.Conclusion == nil {
-               return ""
-       }
-       return *u.Conclusion
-}
-
-// GetDetailsURL returns the DetailsURL field if it's non-nil, zero value otherwise.
-func (u *UpdateCheckRunOptions) GetDetailsURL() string {
-       if u == nil || u.DetailsURL == nil {
-               return ""
-       }
-       return *u.DetailsURL
-}
-
-// GetExternalID returns the ExternalID field if it's non-nil, zero value otherwise.
-func (u *UpdateCheckRunOptions) GetExternalID() string {
-       if u == nil || u.ExternalID == nil {
-               return ""
-       }
-       return *u.ExternalID
-}
-
-// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
-func (u *UpdateCheckRunOptions) GetHeadSHA() string {
-       if u == nil || u.HeadSHA == nil {
-               return ""
-       }
-       return *u.HeadSHA
-}
-
-// GetOutput returns the Output field.
-func (u *UpdateCheckRunOptions) GetOutput() *CheckRunOutput {
-       if u == nil {
-               return nil
-       }
-       return u.Output
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (u *UpdateCheckRunOptions) GetStatus() string {
-       if u == nil || u.Status == nil {
-               return ""
-       }
-       return *u.Status
-}
-
-// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
-func (u *User) GetAvatarURL() string {
-       if u == nil || u.AvatarURL == nil {
-               return ""
-       }
-       return *u.AvatarURL
-}
-
-// GetBio returns the Bio field if it's non-nil, zero value otherwise.
-func (u *User) GetBio() string {
-       if u == nil || u.Bio == nil {
-               return ""
-       }
-       return *u.Bio
-}
-
-// GetBlog returns the Blog field if it's non-nil, zero value otherwise.
-func (u *User) GetBlog() string {
-       if u == nil || u.Blog == nil {
-               return ""
-       }
-       return *u.Blog
-}
-
-// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise.
-func (u *User) GetCollaborators() int {
-       if u == nil || u.Collaborators == nil {
-               return 0
-       }
-       return *u.Collaborators
-}
-
-// GetCompany returns the Company field if it's non-nil, zero value otherwise.
-func (u *User) GetCompany() string {
-       if u == nil || u.Company == nil {
-               return ""
-       }
-       return *u.Company
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (u *User) GetCreatedAt() Timestamp {
-       if u == nil || u.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *u.CreatedAt
-}
-
-// GetDiskUsage returns the DiskUsage field if it's non-nil, zero value otherwise.
-func (u *User) GetDiskUsage() int {
-       if u == nil || u.DiskUsage == nil {
-               return 0
-       }
-       return *u.DiskUsage
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (u *User) GetEmail() string {
-       if u == nil || u.Email == nil {
-               return ""
-       }
-       return *u.Email
-}
-
-// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
-func (u *User) GetEventsURL() string {
-       if u == nil || u.EventsURL == nil {
-               return ""
-       }
-       return *u.EventsURL
-}
-
-// GetFollowers returns the Followers field if it's non-nil, zero value otherwise.
-func (u *User) GetFollowers() int {
-       if u == nil || u.Followers == nil {
-               return 0
-       }
-       return *u.Followers
-}
-
-// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise.
-func (u *User) GetFollowersURL() string {
-       if u == nil || u.FollowersURL == nil {
-               return ""
-       }
-       return *u.FollowersURL
-}
-
-// GetFollowing returns the Following field if it's non-nil, zero value otherwise.
-func (u *User) GetFollowing() int {
-       if u == nil || u.Following == nil {
-               return 0
-       }
-       return *u.Following
-}
-
-// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise.
-func (u *User) GetFollowingURL() string {
-       if u == nil || u.FollowingURL == nil {
-               return ""
-       }
-       return *u.FollowingURL
-}
-
-// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise.
-func (u *User) GetGistsURL() string {
-       if u == nil || u.GistsURL == nil {
-               return ""
-       }
-       return *u.GistsURL
-}
-
-// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise.
-func (u *User) GetGravatarID() string {
-       if u == nil || u.GravatarID == nil {
-               return ""
-       }
-       return *u.GravatarID
-}
-
-// GetHireable returns the Hireable field if it's non-nil, zero value otherwise.
-func (u *User) GetHireable() bool {
-       if u == nil || u.Hireable == nil {
-               return false
-       }
-       return *u.Hireable
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (u *User) GetHTMLURL() string {
-       if u == nil || u.HTMLURL == nil {
-               return ""
-       }
-       return *u.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (u *User) GetID() int64 {
-       if u == nil || u.ID == nil {
-               return 0
-       }
-       return *u.ID
-}
-
-// GetLdapDn returns the LdapDn field if it's non-nil, zero value otherwise.
-func (u *User) GetLdapDn() string {
-       if u == nil || u.LdapDn == nil {
-               return ""
-       }
-       return *u.LdapDn
-}
-
-// GetLocation returns the Location field if it's non-nil, zero value otherwise.
-func (u *User) GetLocation() string {
-       if u == nil || u.Location == nil {
-               return ""
-       }
-       return *u.Location
-}
-
-// GetLogin returns the Login field if it's non-nil, zero value otherwise.
-func (u *User) GetLogin() string {
-       if u == nil || u.Login == nil {
-               return ""
-       }
-       return *u.Login
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (u *User) GetName() string {
-       if u == nil || u.Name == nil {
-               return ""
-       }
-       return *u.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (u *User) GetNodeID() string {
-       if u == nil || u.NodeID == nil {
-               return ""
-       }
-       return *u.NodeID
-}
-
-// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise.
-func (u *User) GetOrganizationsURL() string {
-       if u == nil || u.OrganizationsURL == nil {
-               return ""
-       }
-       return *u.OrganizationsURL
-}
-
-// GetOwnedPrivateRepos returns the OwnedPrivateRepos field if it's non-nil, zero value otherwise.
-func (u *User) GetOwnedPrivateRepos() int {
-       if u == nil || u.OwnedPrivateRepos == nil {
-               return 0
-       }
-       return *u.OwnedPrivateRepos
-}
-
-// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise.
-func (u *User) GetPermissions() map[string]bool {
-       if u == nil || u.Permissions == nil {
-               return map[string]bool{}
-       }
-       return *u.Permissions
-}
-
-// GetPlan returns the Plan field.
-func (u *User) GetPlan() *Plan {
-       if u == nil {
-               return nil
-       }
-       return u.Plan
-}
-
-// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise.
-func (u *User) GetPrivateGists() int {
-       if u == nil || u.PrivateGists == nil {
-               return 0
-       }
-       return *u.PrivateGists
-}
-
-// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise.
-func (u *User) GetPublicGists() int {
-       if u == nil || u.PublicGists == nil {
-               return 0
-       }
-       return *u.PublicGists
-}
-
-// GetPublicRepos returns the PublicRepos field if it's non-nil, zero value otherwise.
-func (u *User) GetPublicRepos() int {
-       if u == nil || u.PublicRepos == nil {
-               return 0
-       }
-       return *u.PublicRepos
-}
-
-// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise.
-func (u *User) GetReceivedEventsURL() string {
-       if u == nil || u.ReceivedEventsURL == nil {
-               return ""
-       }
-       return *u.ReceivedEventsURL
-}
-
-// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise.
-func (u *User) GetReposURL() string {
-       if u == nil || u.ReposURL == nil {
-               return ""
-       }
-       return *u.ReposURL
-}
-
-// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise.
-func (u *User) GetSiteAdmin() bool {
-       if u == nil || u.SiteAdmin == nil {
-               return false
-       }
-       return *u.SiteAdmin
-}
-
-// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise.
-func (u *User) GetStarredURL() string {
-       if u == nil || u.StarredURL == nil {
-               return ""
-       }
-       return *u.StarredURL
-}
-
-// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise.
-func (u *User) GetSubscriptionsURL() string {
-       if u == nil || u.SubscriptionsURL == nil {
-               return ""
-       }
-       return *u.SubscriptionsURL
-}
-
-// GetSuspendedAt returns the SuspendedAt field if it's non-nil, zero value otherwise.
-func (u *User) GetSuspendedAt() Timestamp {
-       if u == nil || u.SuspendedAt == nil {
-               return Timestamp{}
-       }
-       return *u.SuspendedAt
-}
-
-// GetTotalPrivateRepos returns the TotalPrivateRepos field if it's non-nil, zero value otherwise.
-func (u *User) GetTotalPrivateRepos() int {
-       if u == nil || u.TotalPrivateRepos == nil {
-               return 0
-       }
-       return *u.TotalPrivateRepos
-}
-
-// GetTwitterUsername returns the TwitterUsername field if it's non-nil, zero value otherwise.
-func (u *User) GetTwitterUsername() string {
-       if u == nil || u.TwitterUsername == nil {
-               return ""
-       }
-       return *u.TwitterUsername
-}
-
-// GetTwoFactorAuthentication returns the TwoFactorAuthentication field if it's non-nil, zero value otherwise.
-func (u *User) GetTwoFactorAuthentication() bool {
-       if u == nil || u.TwoFactorAuthentication == nil {
-               return false
-       }
-       return *u.TwoFactorAuthentication
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (u *User) GetType() string {
-       if u == nil || u.Type == nil {
-               return ""
-       }
-       return *u.Type
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (u *User) GetUpdatedAt() Timestamp {
-       if u == nil || u.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *u.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (u *User) GetURL() string {
-       if u == nil || u.URL == nil {
-               return ""
-       }
-       return *u.URL
-}
-
-// GetApp returns the App field.
-func (u *UserAuthorization) GetApp() *OAuthAPP {
-       if u == nil {
-               return nil
-       }
-       return u.App
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (u *UserAuthorization) GetCreatedAt() Timestamp {
-       if u == nil || u.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *u.CreatedAt
-}
-
-// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise.
-func (u *UserAuthorization) GetFingerprint() string {
-       if u == nil || u.Fingerprint == nil {
-               return ""
-       }
-       return *u.Fingerprint
-}
-
-// GetHashedToken returns the HashedToken field if it's non-nil, zero value otherwise.
-func (u *UserAuthorization) GetHashedToken() string {
-       if u == nil || u.HashedToken == nil {
-               return ""
-       }
-       return *u.HashedToken
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (u *UserAuthorization) GetID() int64 {
-       if u == nil || u.ID == nil {
-               return 0
-       }
-       return *u.ID
-}
-
-// GetNote returns the Note field if it's non-nil, zero value otherwise.
-func (u *UserAuthorization) GetNote() string {
-       if u == nil || u.Note == nil {
-               return ""
-       }
-       return *u.Note
-}
-
-// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise.
-func (u *UserAuthorization) GetNoteURL() string {
-       if u == nil || u.NoteURL == nil {
-               return ""
-       }
-       return *u.NoteURL
-}
-
-// GetToken returns the Token field if it's non-nil, zero value otherwise.
-func (u *UserAuthorization) GetToken() string {
-       if u == nil || u.Token == nil {
-               return ""
-       }
-       return *u.Token
-}
-
-// GetTokenLastEight returns the TokenLastEight field if it's non-nil, zero value otherwise.
-func (u *UserAuthorization) GetTokenLastEight() string {
-       if u == nil || u.TokenLastEight == nil {
-               return ""
-       }
-       return *u.TokenLastEight
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (u *UserAuthorization) GetUpdatedAt() Timestamp {
-       if u == nil || u.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *u.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (u *UserAuthorization) GetURL() string {
-       if u == nil || u.URL == nil {
-               return ""
-       }
-       return *u.URL
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (u *UserContext) GetMessage() string {
-       if u == nil || u.Message == nil {
-               return ""
-       }
-       return *u.Message
-}
-
-// GetOcticon returns the Octicon field if it's non-nil, zero value otherwise.
-func (u *UserContext) GetOcticon() string {
-       if u == nil || u.Octicon == nil {
-               return ""
-       }
-       return *u.Octicon
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (u *UserEmail) GetEmail() string {
-       if u == nil || u.Email == nil {
-               return ""
-       }
-       return *u.Email
-}
-
-// GetPrimary returns the Primary field if it's non-nil, zero value otherwise.
-func (u *UserEmail) GetPrimary() bool {
-       if u == nil || u.Primary == nil {
-               return false
-       }
-       return *u.Primary
-}
-
-// GetVerified returns the Verified field if it's non-nil, zero value otherwise.
-func (u *UserEmail) GetVerified() bool {
-       if u == nil || u.Verified == nil {
-               return false
-       }
-       return *u.Verified
-}
-
-// GetVisibility returns the Visibility field if it's non-nil, zero value otherwise.
-func (u *UserEmail) GetVisibility() string {
-       if u == nil || u.Visibility == nil {
-               return ""
-       }
-       return *u.Visibility
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (u *UserEvent) GetAction() string {
-       if u == nil || u.Action == nil {
-               return ""
-       }
-       return *u.Action
-}
-
-// GetEnterprise returns the Enterprise field.
-func (u *UserEvent) GetEnterprise() *Enterprise {
-       if u == nil {
-               return nil
-       }
-       return u.Enterprise
-}
-
-// GetSender returns the Sender field.
-func (u *UserEvent) GetSender() *User {
-       if u == nil {
-               return nil
-       }
-       return u.Sender
-}
-
-// GetUser returns the User field.
-func (u *UserEvent) GetUser() *User {
-       if u == nil {
-               return nil
-       }
-       return u.User
-}
-
-// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetAvatarURL() string {
-       if u == nil || u.AvatarURL == nil {
-               return ""
-       }
-       return *u.AvatarURL
-}
-
-// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetEventsURL() string {
-       if u == nil || u.EventsURL == nil {
-               return ""
-       }
-       return *u.EventsURL
-}
-
-// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetFollowersURL() string {
-       if u == nil || u.FollowersURL == nil {
-               return ""
-       }
-       return *u.FollowersURL
-}
-
-// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetFollowingURL() string {
-       if u == nil || u.FollowingURL == nil {
-               return ""
-       }
-       return *u.FollowingURL
-}
-
-// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetGistsURL() string {
-       if u == nil || u.GistsURL == nil {
-               return ""
-       }
-       return *u.GistsURL
-}
-
-// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetGravatarID() string {
-       if u == nil || u.GravatarID == nil {
-               return ""
-       }
-       return *u.GravatarID
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetID() int64 {
-       if u == nil || u.ID == nil {
-               return 0
-       }
-       return *u.ID
-}
-
-// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetLDAPDN() string {
-       if u == nil || u.LDAPDN == nil {
-               return ""
-       }
-       return *u.LDAPDN
-}
-
-// GetLogin returns the Login field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetLogin() string {
-       if u == nil || u.Login == nil {
-               return ""
-       }
-       return *u.Login
-}
-
-// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetOrganizationsURL() string {
-       if u == nil || u.OrganizationsURL == nil {
-               return ""
-       }
-       return *u.OrganizationsURL
-}
-
-// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetReceivedEventsURL() string {
-       if u == nil || u.ReceivedEventsURL == nil {
-               return ""
-       }
-       return *u.ReceivedEventsURL
-}
-
-// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetReposURL() string {
-       if u == nil || u.ReposURL == nil {
-               return ""
-       }
-       return *u.ReposURL
-}
-
-// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetSiteAdmin() bool {
-       if u == nil || u.SiteAdmin == nil {
-               return false
-       }
-       return *u.SiteAdmin
-}
-
-// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetStarredURL() string {
-       if u == nil || u.StarredURL == nil {
-               return ""
-       }
-       return *u.StarredURL
-}
-
-// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetSubscriptionsURL() string {
-       if u == nil || u.SubscriptionsURL == nil {
-               return ""
-       }
-       return *u.SubscriptionsURL
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetType() string {
-       if u == nil || u.Type == nil {
-               return ""
-       }
-       return *u.Type
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (u *UserLDAPMapping) GetURL() string {
-       if u == nil || u.URL == nil {
-               return ""
-       }
-       return *u.URL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (u *UserMigration) GetCreatedAt() string {
-       if u == nil || u.CreatedAt == nil {
-               return ""
-       }
-       return *u.CreatedAt
-}
-
-// GetExcludeAttachments returns the ExcludeAttachments field if it's non-nil, zero value otherwise.
-func (u *UserMigration) GetExcludeAttachments() bool {
-       if u == nil || u.ExcludeAttachments == nil {
-               return false
-       }
-       return *u.ExcludeAttachments
-}
-
-// GetGUID returns the GUID field if it's non-nil, zero value otherwise.
-func (u *UserMigration) GetGUID() string {
-       if u == nil || u.GUID == nil {
-               return ""
-       }
-       return *u.GUID
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (u *UserMigration) GetID() int64 {
-       if u == nil || u.ID == nil {
-               return 0
-       }
-       return *u.ID
-}
-
-// GetLockRepositories returns the LockRepositories field if it's non-nil, zero value otherwise.
-func (u *UserMigration) GetLockRepositories() bool {
-       if u == nil || u.LockRepositories == nil {
-               return false
-       }
-       return *u.LockRepositories
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (u *UserMigration) GetState() string {
-       if u == nil || u.State == nil {
-               return ""
-       }
-       return *u.State
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (u *UserMigration) GetUpdatedAt() string {
-       if u == nil || u.UpdatedAt == nil {
-               return ""
-       }
-       return *u.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (u *UserMigration) GetURL() string {
-       if u == nil || u.URL == nil {
-               return ""
-       }
-       return *u.URL
-}
-
-// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
-func (u *UsersSearchResult) GetIncompleteResults() bool {
-       if u == nil || u.IncompleteResults == nil {
-               return false
-       }
-       return *u.IncompleteResults
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (u *UsersSearchResult) GetTotal() int {
-       if u == nil || u.Total == nil {
-               return 0
-       }
-       return *u.Total
-}
-
-// GetAdminUsers returns the AdminUsers field if it's non-nil, zero value otherwise.
-func (u *UserStats) GetAdminUsers() int {
-       if u == nil || u.AdminUsers == nil {
-               return 0
-       }
-       return *u.AdminUsers
-}
-
-// GetSuspendedUsers returns the SuspendedUsers field if it's non-nil, zero value otherwise.
-func (u *UserStats) GetSuspendedUsers() int {
-       if u == nil || u.SuspendedUsers == nil {
-               return 0
-       }
-       return *u.SuspendedUsers
-}
-
-// GetTotalUsers returns the TotalUsers field if it's non-nil, zero value otherwise.
-func (u *UserStats) GetTotalUsers() int {
-       if u == nil || u.TotalUsers == nil {
-               return 0
-       }
-       return *u.TotalUsers
-}
-
-// GetReason returns the Reason field if it's non-nil, zero value otherwise.
-func (u *UserSuspendOptions) GetReason() string {
-       if u == nil || u.Reason == nil {
-               return ""
-       }
-       return *u.Reason
-}
-
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (w *WatchEvent) GetAction() string {
-       if w == nil || w.Action == nil {
-               return ""
-       }
-       return *w.Action
-}
-
-// GetInstallation returns the Installation field.
-func (w *WatchEvent) GetInstallation() *Installation {
-       if w == nil {
-               return nil
-       }
-       return w.Installation
-}
-
-// GetRepo returns the Repo field.
-func (w *WatchEvent) GetRepo() *Repository {
-       if w == nil {
-               return nil
-       }
-       return w.Repo
-}
-
-// GetSender returns the Sender field.
-func (w *WatchEvent) GetSender() *User {
-       if w == nil {
-               return nil
-       }
-       return w.Sender
-}
-
-// GetEmail returns the Email field if it's non-nil, zero value otherwise.
-func (w *WebHookAuthor) GetEmail() string {
-       if w == nil || w.Email == nil {
-               return ""
-       }
-       return *w.Email
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (w *WebHookAuthor) GetName() string {
-       if w == nil || w.Name == nil {
-               return ""
-       }
-       return *w.Name
-}
-
-// GetUsername returns the Username field if it's non-nil, zero value otherwise.
-func (w *WebHookAuthor) GetUsername() string {
-       if w == nil || w.Username == nil {
-               return ""
-       }
-       return *w.Username
-}
-
-// GetAuthor returns the Author field.
-func (w *WebHookCommit) GetAuthor() *WebHookAuthor {
-       if w == nil {
-               return nil
-       }
-       return w.Author
-}
-
-// GetCommitter returns the Committer field.
-func (w *WebHookCommit) GetCommitter() *WebHookAuthor {
-       if w == nil {
-               return nil
-       }
-       return w.Committer
-}
-
-// GetDistinct returns the Distinct field if it's non-nil, zero value otherwise.
-func (w *WebHookCommit) GetDistinct() bool {
-       if w == nil || w.Distinct == nil {
-               return false
-       }
-       return *w.Distinct
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (w *WebHookCommit) GetID() string {
-       if w == nil || w.ID == nil {
-               return ""
-       }
-       return *w.ID
-}
-
-// GetMessage returns the Message field if it's non-nil, zero value otherwise.
-func (w *WebHookCommit) GetMessage() string {
-       if w == nil || w.Message == nil {
-               return ""
-       }
-       return *w.Message
-}
-
-// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise.
-func (w *WebHookCommit) GetTimestamp() time.Time {
-       if w == nil || w.Timestamp == nil {
-               return time.Time{}
-       }
-       return *w.Timestamp
-}
-
-// GetAfter returns the After field if it's non-nil, zero value otherwise.
-func (w *WebHookPayload) GetAfter() string {
-       if w == nil || w.After == nil {
-               return ""
-       }
-       return *w.After
-}
-
-// GetBefore returns the Before field if it's non-nil, zero value otherwise.
-func (w *WebHookPayload) GetBefore() string {
-       if w == nil || w.Before == nil {
-               return ""
-       }
-       return *w.Before
-}
-
-// GetCompare returns the Compare field if it's non-nil, zero value otherwise.
-func (w *WebHookPayload) GetCompare() string {
-       if w == nil || w.Compare == nil {
-               return ""
-       }
-       return *w.Compare
-}
-
-// GetCreated returns the Created field if it's non-nil, zero value otherwise.
-func (w *WebHookPayload) GetCreated() bool {
-       if w == nil || w.Created == nil {
-               return false
-       }
-       return *w.Created
-}
-
-// GetDeleted returns the Deleted field if it's non-nil, zero value otherwise.
-func (w *WebHookPayload) GetDeleted() bool {
-       if w == nil || w.Deleted == nil {
-               return false
-       }
-       return *w.Deleted
-}
-
-// GetForced returns the Forced field if it's non-nil, zero value otherwise.
-func (w *WebHookPayload) GetForced() bool {
-       if w == nil || w.Forced == nil {
-               return false
-       }
-       return *w.Forced
-}
-
-// GetHeadCommit returns the HeadCommit field.
-func (w *WebHookPayload) GetHeadCommit() *WebHookCommit {
-       if w == nil {
-               return nil
-       }
-       return w.HeadCommit
-}
-
-// GetPusher returns the Pusher field.
-func (w *WebHookPayload) GetPusher() *User {
-       if w == nil {
-               return nil
-       }
-       return w.Pusher
-}
-
-// GetRef returns the Ref field if it's non-nil, zero value otherwise.
-func (w *WebHookPayload) GetRef() string {
-       if w == nil || w.Ref == nil {
-               return ""
-       }
-       return *w.Ref
-}
-
-// GetRepo returns the Repo field.
-func (w *WebHookPayload) GetRepo() *Repository {
-       if w == nil {
-               return nil
-       }
-       return w.Repo
-}
-
-// GetSender returns the Sender field.
-func (w *WebHookPayload) GetSender() *User {
-       if w == nil {
-               return nil
-       }
-       return w.Sender
-}
-
-// GetTotal returns the Total field if it's non-nil, zero value otherwise.
-func (w *WeeklyCommitActivity) GetTotal() int {
-       if w == nil || w.Total == nil {
-               return 0
-       }
-       return *w.Total
-}
-
-// GetWeek returns the Week field if it's non-nil, zero value otherwise.
-func (w *WeeklyCommitActivity) GetWeek() Timestamp {
-       if w == nil || w.Week == nil {
-               return Timestamp{}
-       }
-       return *w.Week
-}
-
-// GetAdditions returns the Additions field if it's non-nil, zero value otherwise.
-func (w *WeeklyStats) GetAdditions() int {
-       if w == nil || w.Additions == nil {
-               return 0
-       }
-       return *w.Additions
-}
-
-// GetCommits returns the Commits field if it's non-nil, zero value otherwise.
-func (w *WeeklyStats) GetCommits() int {
-       if w == nil || w.Commits == nil {
-               return 0
-       }
-       return *w.Commits
-}
-
-// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise.
-func (w *WeeklyStats) GetDeletions() int {
-       if w == nil || w.Deletions == nil {
-               return 0
-       }
-       return *w.Deletions
-}
-
-// GetWeek returns the Week field if it's non-nil, zero value otherwise.
-func (w *WeeklyStats) GetWeek() Timestamp {
-       if w == nil || w.Week == nil {
-               return Timestamp{}
-       }
-       return *w.Week
-}
-
-// GetBadgeURL returns the BadgeURL field if it's non-nil, zero value otherwise.
-func (w *Workflow) GetBadgeURL() string {
-       if w == nil || w.BadgeURL == nil {
-               return ""
-       }
-       return *w.BadgeURL
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (w *Workflow) GetCreatedAt() Timestamp {
-       if w == nil || w.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *w.CreatedAt
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (w *Workflow) GetHTMLURL() string {
-       if w == nil || w.HTMLURL == nil {
-               return ""
-       }
-       return *w.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (w *Workflow) GetID() int64 {
-       if w == nil || w.ID == nil {
-               return 0
-       }
-       return *w.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (w *Workflow) GetName() string {
-       if w == nil || w.Name == nil {
-               return ""
-       }
-       return *w.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (w *Workflow) GetNodeID() string {
-       if w == nil || w.NodeID == nil {
-               return ""
-       }
-       return *w.NodeID
-}
-
-// GetPath returns the Path field if it's non-nil, zero value otherwise.
-func (w *Workflow) GetPath() string {
-       if w == nil || w.Path == nil {
-               return ""
-       }
-       return *w.Path
-}
-
-// GetState returns the State field if it's non-nil, zero value otherwise.
-func (w *Workflow) GetState() string {
-       if w == nil || w.State == nil {
-               return ""
-       }
-       return *w.State
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (w *Workflow) GetUpdatedAt() Timestamp {
-       if w == nil || w.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *w.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (w *Workflow) GetURL() string {
-       if w == nil || w.URL == nil {
-               return ""
-       }
-       return *w.URL
-}
-
-// GetTotalMS returns the TotalMS field if it's non-nil, zero value otherwise.
-func (w *WorkflowBill) GetTotalMS() int64 {
-       if w == nil || w.TotalMS == nil {
-               return 0
-       }
-       return *w.TotalMS
-}
-
-// GetMacOS returns the MacOS field.
-func (w *WorkflowEnvironment) GetMacOS() *WorkflowBill {
-       if w == nil {
-               return nil
-       }
-       return w.MacOS
-}
-
-// GetUbuntu returns the Ubuntu field.
-func (w *WorkflowEnvironment) GetUbuntu() *WorkflowBill {
-       if w == nil {
-               return nil
-       }
-       return w.Ubuntu
-}
-
-// GetWindows returns the Windows field.
-func (w *WorkflowEnvironment) GetWindows() *WorkflowBill {
-       if w == nil {
-               return nil
-       }
-       return w.Windows
-}
-
-// GetCheckRunURL returns the CheckRunURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetCheckRunURL() string {
-       if w == nil || w.CheckRunURL == nil {
-               return ""
-       }
-       return *w.CheckRunURL
-}
-
-// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetCompletedAt() Timestamp {
-       if w == nil || w.CompletedAt == nil {
-               return Timestamp{}
-       }
-       return *w.CompletedAt
-}
-
-// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetConclusion() string {
-       if w == nil || w.Conclusion == nil {
-               return ""
-       }
-       return *w.Conclusion
-}
-
-// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetHeadSHA() string {
-       if w == nil || w.HeadSHA == nil {
-               return ""
-       }
-       return *w.HeadSHA
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetHTMLURL() string {
-       if w == nil || w.HTMLURL == nil {
-               return ""
-       }
-       return *w.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetID() int64 {
-       if w == nil || w.ID == nil {
-               return 0
-       }
-       return *w.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetName() string {
-       if w == nil || w.Name == nil {
-               return ""
-       }
-       return *w.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetNodeID() string {
-       if w == nil || w.NodeID == nil {
-               return ""
-       }
-       return *w.NodeID
-}
-
-// GetRunID returns the RunID field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetRunID() int64 {
-       if w == nil || w.RunID == nil {
-               return 0
-       }
-       return *w.RunID
-}
-
-// GetRunURL returns the RunURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetRunURL() string {
-       if w == nil || w.RunURL == nil {
-               return ""
-       }
-       return *w.RunURL
-}
-
-// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetStartedAt() Timestamp {
-       if w == nil || w.StartedAt == nil {
-               return Timestamp{}
-       }
-       return *w.StartedAt
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetStatus() string {
-       if w == nil || w.Status == nil {
-               return ""
-       }
-       return *w.Status
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (w *WorkflowJob) GetURL() string {
-       if w == nil || w.URL == nil {
-               return ""
-       }
-       return *w.URL
-}
-
-// GetArtifactsURL returns the ArtifactsURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetArtifactsURL() string {
-       if w == nil || w.ArtifactsURL == nil {
-               return ""
-       }
-       return *w.ArtifactsURL
-}
-
-// GetCancelURL returns the CancelURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetCancelURL() string {
-       if w == nil || w.CancelURL == nil {
-               return ""
-       }
-       return *w.CancelURL
-}
-
-// GetCheckSuiteURL returns the CheckSuiteURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetCheckSuiteURL() string {
-       if w == nil || w.CheckSuiteURL == nil {
-               return ""
-       }
-       return *w.CheckSuiteURL
-}
-
-// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetConclusion() string {
-       if w == nil || w.Conclusion == nil {
-               return ""
-       }
-       return *w.Conclusion
-}
-
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetCreatedAt() Timestamp {
-       if w == nil || w.CreatedAt == nil {
-               return Timestamp{}
-       }
-       return *w.CreatedAt
-}
-
-// GetEvent returns the Event field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetEvent() string {
-       if w == nil || w.Event == nil {
-               return ""
-       }
-       return *w.Event
-}
-
-// GetHeadBranch returns the HeadBranch field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetHeadBranch() string {
-       if w == nil || w.HeadBranch == nil {
-               return ""
-       }
-       return *w.HeadBranch
-}
-
-// GetHeadCommit returns the HeadCommit field.
-func (w *WorkflowRun) GetHeadCommit() *HeadCommit {
-       if w == nil {
-               return nil
-       }
-       return w.HeadCommit
-}
-
-// GetHeadRepository returns the HeadRepository field.
-func (w *WorkflowRun) GetHeadRepository() *Repository {
-       if w == nil {
-               return nil
-       }
-       return w.HeadRepository
-}
-
-// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetHeadSHA() string {
-       if w == nil || w.HeadSHA == nil {
-               return ""
-       }
-       return *w.HeadSHA
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetHTMLURL() string {
-       if w == nil || w.HTMLURL == nil {
-               return ""
-       }
-       return *w.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetID() int64 {
-       if w == nil || w.ID == nil {
-               return 0
-       }
-       return *w.ID
-}
-
-// GetJobsURL returns the JobsURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetJobsURL() string {
-       if w == nil || w.JobsURL == nil {
-               return ""
-       }
-       return *w.JobsURL
-}
-
-// GetLogsURL returns the LogsURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetLogsURL() string {
-       if w == nil || w.LogsURL == nil {
-               return ""
-       }
-       return *w.LogsURL
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetNodeID() string {
-       if w == nil || w.NodeID == nil {
-               return ""
-       }
-       return *w.NodeID
-}
-
-// GetRepository returns the Repository field.
-func (w *WorkflowRun) GetRepository() *Repository {
-       if w == nil {
-               return nil
-       }
-       return w.Repository
-}
-
-// GetRerunURL returns the RerunURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetRerunURL() string {
-       if w == nil || w.RerunURL == nil {
-               return ""
-       }
-       return *w.RerunURL
-}
-
-// GetRunNumber returns the RunNumber field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetRunNumber() int {
-       if w == nil || w.RunNumber == nil {
-               return 0
-       }
-       return *w.RunNumber
-}
-
-// GetStatus returns the Status field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetStatus() string {
-       if w == nil || w.Status == nil {
-               return ""
-       }
-       return *w.Status
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetUpdatedAt() Timestamp {
-       if w == nil || w.UpdatedAt == nil {
-               return Timestamp{}
-       }
-       return *w.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetURL() string {
-       if w == nil || w.URL == nil {
-               return ""
-       }
-       return *w.URL
-}
-
-// GetWorkflowID returns the WorkflowID field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetWorkflowID() int64 {
-       if w == nil || w.WorkflowID == nil {
-               return 0
-       }
-       return *w.WorkflowID
-}
-
-// GetWorkflowURL returns the WorkflowURL field if it's non-nil, zero value otherwise.
-func (w *WorkflowRun) GetWorkflowURL() string {
-       if w == nil || w.WorkflowURL == nil {
-               return ""
-       }
-       return *w.WorkflowURL
-}
-
-// GetJobs returns the Jobs field if it's non-nil, zero value otherwise.
-func (w *WorkflowRunBill) GetJobs() int {
-       if w == nil || w.Jobs == nil {
-               return 0
-       }
-       return *w.Jobs
-}
-
-// GetTotalMS returns the TotalMS field if it's non-nil, zero value otherwise.
-func (w *WorkflowRunBill) GetTotalMS() int64 {
-       if w == nil || w.TotalMS == nil {
-               return 0
-       }
-       return *w.TotalMS
-}
-
-// GetMacOS returns the MacOS field.
-func (w *WorkflowRunEnvironment) GetMacOS() *WorkflowRunBill {
-       if w == nil {
-               return nil
-       }
-       return w.MacOS
-}
-
-// GetUbuntu returns the Ubuntu field.
-func (w *WorkflowRunEnvironment) GetUbuntu() *WorkflowRunBill {
-       if w == nil {
-               return nil
-       }
-       return w.Ubuntu
-}
-
-// GetWindows returns the Windows field.
-func (w *WorkflowRunEnvironment) GetWindows() *WorkflowRunBill {
-       if w == nil {
-               return nil
-       }
-       return w.Windows
-}
-
-// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
-func (w *WorkflowRuns) GetTotalCount() int {
-       if w == nil || w.TotalCount == nil {
-               return 0
-       }
-       return *w.TotalCount
-}
-
-// GetBillable returns the Billable field.
-func (w *WorkflowRunUsage) GetBillable() *WorkflowRunEnvironment {
-       if w == nil {
-               return nil
-       }
-       return w.Billable
-}
-
-// GetRunDurationMS returns the RunDurationMS field if it's non-nil, zero value otherwise.
-func (w *WorkflowRunUsage) GetRunDurationMS() int64 {
-       if w == nil || w.RunDurationMS == nil {
-               return 0
-       }
-       return *w.RunDurationMS
-}
-
-// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
-func (w *Workflows) GetTotalCount() int {
-       if w == nil || w.TotalCount == nil {
-               return 0
-       }
-       return *w.TotalCount
-}
-
-// GetBillable returns the Billable field.
-func (w *WorkflowUsage) GetBillable() *WorkflowEnvironment {
-       if w == nil {
-               return nil
-       }
-       return w.Billable
-}
diff --git a/vendor/github.com/google/go-github/v32/github/github.go b/vendor/github.com/google/go-github/v32/github/github.go
deleted file mode 100644 (file)
index c68a80c..0000000
+++ /dev/null
@@ -1,1076 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:generate go run gen-accessors.go
-//go:generate go run gen-stringify-test.go
-
-package github
-
-import (
-       "bytes"
-       "context"
-       "encoding/json"
-       "errors"
-       "fmt"
-       "io"
-       "io/ioutil"
-       "net/http"
-       "net/url"
-       "reflect"
-       "strconv"
-       "strings"
-       "sync"
-       "time"
-
-       "github.com/google/go-querystring/query"
-)
-
-const (
-       defaultBaseURL = "https://api.github.com/"
-       uploadBaseURL  = "https://uploads.github.com/"
-       userAgent      = "go-github"
-
-       headerRateLimit     = "X-RateLimit-Limit"
-       headerRateRemaining = "X-RateLimit-Remaining"
-       headerRateReset     = "X-RateLimit-Reset"
-       headerOTP           = "X-GitHub-OTP"
-
-       mediaTypeV3                = "application/vnd.github.v3+json"
-       defaultMediaType           = "application/octet-stream"
-       mediaTypeV3SHA             = "application/vnd.github.v3.sha"
-       mediaTypeV3Diff            = "application/vnd.github.v3.diff"
-       mediaTypeV3Patch           = "application/vnd.github.v3.patch"
-       mediaTypeOrgPermissionRepo = "application/vnd.github.v3.repository+json"
-
-       // Media Type values to access preview APIs
-
-       // https://developer.github.com/changes/2014-12-09-new-attributes-for-stars-api/
-       mediaTypeStarringPreview = "application/vnd.github.v3.star+json"
-
-       // https://help.github.com/enterprise/2.4/admin/guides/migrations/exporting-the-github-com-organization-s-repositories/
-       mediaTypeMigrationsPreview = "application/vnd.github.wyandotte-preview+json"
-
-       // https://developer.github.com/changes/2016-04-06-deployment-and-deployment-status-enhancements/
-       mediaTypeDeploymentStatusPreview = "application/vnd.github.ant-man-preview+json"
-
-       // https://developer.github.com/changes/2018-10-16-deployments-environments-states-and-auto-inactive-updates/
-       mediaTypeExpandDeploymentStatusPreview = "application/vnd.github.flash-preview+json"
-
-       // https://developer.github.com/changes/2016-05-12-reactions-api-preview/
-       mediaTypeReactionsPreview = "application/vnd.github.squirrel-girl-preview"
-
-       // https://developer.github.com/changes/2016-05-23-timeline-preview-api/
-       mediaTypeTimelinePreview = "application/vnd.github.mockingbird-preview+json"
-
-       // https://developer.github.com/changes/2016-09-14-projects-api/
-       mediaTypeProjectsPreview = "application/vnd.github.inertia-preview+json"
-
-       // https://developer.github.com/changes/2016-09-14-Integrations-Early-Access/
-       mediaTypeIntegrationPreview = "application/vnd.github.machine-man-preview+json"
-
-       // https://developer.github.com/changes/2017-01-05-commit-search-api/
-       mediaTypeCommitSearchPreview = "application/vnd.github.cloak-preview+json"
-
-       // https://developer.github.com/changes/2017-02-28-user-blocking-apis-and-webhook/
-       mediaTypeBlockUsersPreview = "application/vnd.github.giant-sentry-fist-preview+json"
-
-       // https://developer.github.com/changes/2017-02-09-community-health/
-       mediaTypeRepositoryCommunityHealthMetricsPreview = "application/vnd.github.black-panther-preview+json"
-
-       // https://developer.github.com/changes/2017-05-23-coc-api/
-       mediaTypeCodesOfConductPreview = "application/vnd.github.scarlet-witch-preview+json"
-
-       // https://developer.github.com/changes/2017-07-17-update-topics-on-repositories/
-       mediaTypeTopicsPreview = "application/vnd.github.mercy-preview+json"
-
-       // https://developer.github.com/changes/2018-03-16-protected-branches-required-approving-reviews/
-       mediaTypeRequiredApprovingReviewsPreview = "application/vnd.github.luke-cage-preview+json"
-
-       // https://developer.github.com/changes/2018-01-10-lock-reason-api-preview/
-       mediaTypeLockReasonPreview = "application/vnd.github.sailor-v-preview+json"
-
-       // https://developer.github.com/changes/2018-05-07-new-checks-api-public-beta/
-       mediaTypeCheckRunsPreview = "application/vnd.github.antiope-preview+json"
-
-       // https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/
-       mediaTypePreReceiveHooksPreview = "application/vnd.github.eye-scream-preview"
-
-       // https://developer.github.com/changes/2018-02-22-protected-branches-required-signatures/
-       mediaTypeSignaturePreview = "application/vnd.github.zzzax-preview+json"
-
-       // https://developer.github.com/changes/2018-09-05-project-card-events/
-       mediaTypeProjectCardDetailsPreview = "application/vnd.github.starfox-preview+json"
-
-       // https://developer.github.com/changes/2018-12-18-interactions-preview/
-       mediaTypeInteractionRestrictionsPreview = "application/vnd.github.sombra-preview+json"
-
-       // https://developer.github.com/changes/2019-03-14-enabling-disabling-pages/
-       mediaTypeEnablePagesAPIPreview = "application/vnd.github.switcheroo-preview+json"
-
-       // https://developer.github.com/changes/2019-04-24-vulnerability-alerts/
-       mediaTypeRequiredVulnerabilityAlertsPreview = "application/vnd.github.dorian-preview+json"
-
-       // https://developer.github.com/changes/2019-06-04-automated-security-fixes/
-       mediaTypeRequiredAutomatedSecurityFixesPreview = "application/vnd.github.london-preview+json"
-
-       // https://developer.github.com/changes/2019-05-29-update-branch-api/
-       mediaTypeUpdatePullRequestBranchPreview = "application/vnd.github.lydian-preview+json"
-
-       // https://developer.github.com/changes/2019-04-11-pulls-branches-for-commit/
-       mediaTypeListPullsOrBranchesForCommitPreview = "application/vnd.github.groot-preview+json"
-
-       // https://developer.github.com/v3/previews/#repository-creation-permissions
-       mediaTypeMemberAllowedRepoCreationTypePreview = "application/vnd.github.surtur-preview+json"
-
-       // https://developer.github.com/v3/previews/#create-and-use-repository-templates
-       mediaTypeRepositoryTemplatePreview = "application/vnd.github.baptiste-preview+json"
-
-       // https://developer.github.com/changes/2019-10-03-multi-line-comments/
-       mediaTypeMultiLineCommentsPreview = "application/vnd.github.comfort-fade-preview+json"
-
-       // https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api/
-       mediaTypeOAuthAppPreview = "application/vnd.github.doctor-strange-preview+json"
-
-       // https://developer.github.com/changes/2019-12-03-internal-visibility-changes/
-       mediaTypeRepositoryVisibilityPreview = "application/vnd.github.nebula-preview+json"
-)
-
-// A Client manages communication with the GitHub API.
-type Client struct {
-       clientMu sync.Mutex   // clientMu protects the client during calls that modify the CheckRedirect func.
-       client   *http.Client // HTTP client used to communicate with the API.
-
-       // Base URL for API requests. Defaults to the public GitHub API, but can be
-       // set to a domain endpoint to use with GitHub Enterprise. BaseURL should
-       // always be specified with a trailing slash.
-       BaseURL *url.URL
-
-       // Base URL for uploading files.
-       UploadURL *url.URL
-
-       // User agent used when communicating with the GitHub API.
-       UserAgent string
-
-       rateMu     sync.Mutex
-       rateLimits [categories]Rate // Rate limits for the client as determined by the most recent API calls.
-
-       common service // Reuse a single struct instead of allocating one for each service on the heap.
-
-       // Services used for talking to different parts of the GitHub API.
-       Actions        *ActionsService
-       Activity       *ActivityService
-       Admin          *AdminService
-       Apps           *AppsService
-       Authorizations *AuthorizationsService
-       Checks         *ChecksService
-       CodeScanning   *CodeScanningService
-       Gists          *GistsService
-       Git            *GitService
-       Gitignores     *GitignoresService
-       Interactions   *InteractionsService
-       Issues         *IssuesService
-       Licenses       *LicensesService
-       Marketplace    *MarketplaceService
-       Migrations     *MigrationService
-       Organizations  *OrganizationsService
-       Projects       *ProjectsService
-       PullRequests   *PullRequestsService
-       Reactions      *ReactionsService
-       Repositories   *RepositoriesService
-       Search         *SearchService
-       Teams          *TeamsService
-       Users          *UsersService
-}
-
-type service struct {
-       client *Client
-}
-
-// ListOptions specifies the optional parameters to various List methods that
-// support offset pagination.
-type ListOptions struct {
-       // For paginated result sets, page of results to retrieve.
-       Page int `url:"page,omitempty"`
-
-       // For paginated result sets, the number of results to include per page.
-       PerPage int `url:"per_page,omitempty"`
-}
-
-// ListCursorOptions specifies the optional parameters to various List methods that
-// support cursor pagination.
-type ListCursorOptions struct {
-       // For paginated result sets, page of results to retrieve.
-       Page string `url:"page,omitempty"`
-
-       // For paginated result sets, the number of results to include per page.
-       PerPage int `url:"per_page,omitempty"`
-}
-
-// UploadOptions specifies the parameters to methods that support uploads.
-type UploadOptions struct {
-       Name      string `url:"name,omitempty"`
-       Label     string `url:"label,omitempty"`
-       MediaType string `url:"-"`
-}
-
-// RawType represents type of raw format of a request instead of JSON.
-type RawType uint8
-
-const (
-       // Diff format.
-       Diff RawType = 1 + iota
-       // Patch format.
-       Patch
-)
-
-// RawOptions specifies parameters when user wants to get raw format of
-// a response instead of JSON.
-type RawOptions struct {
-       Type RawType
-}
-
-// addOptions adds the parameters in opts as URL query parameters to s. opts
-// must be a struct whose fields may contain "url" tags.
-func addOptions(s string, opts interface{}) (string, error) {
-       v := reflect.ValueOf(opts)
-       if v.Kind() == reflect.Ptr && v.IsNil() {
-               return s, nil
-       }
-
-       u, err := url.Parse(s)
-       if err != nil {
-               return s, err
-       }
-
-       qs, err := query.Values(opts)
-       if err != nil {
-               return s, err
-       }
-
-       u.RawQuery = qs.Encode()
-       return u.String(), nil
-}
-
-// NewClient returns a new GitHub API client. If a nil httpClient is
-// provided, a new http.Client will be used. To use API methods which require
-// authentication, provide an http.Client that will perform the authentication
-// for you (such as that provided by the golang.org/x/oauth2 library).
-func NewClient(httpClient *http.Client) *Client {
-       if httpClient == nil {
-               httpClient = &http.Client{}
-       }
-       baseURL, _ := url.Parse(defaultBaseURL)
-       uploadURL, _ := url.Parse(uploadBaseURL)
-
-       c := &Client{client: httpClient, BaseURL: baseURL, UserAgent: userAgent, UploadURL: uploadURL}
-       c.common.client = c
-       c.Actions = (*ActionsService)(&c.common)
-       c.Activity = (*ActivityService)(&c.common)
-       c.Admin = (*AdminService)(&c.common)
-       c.Apps = (*AppsService)(&c.common)
-       c.Authorizations = (*AuthorizationsService)(&c.common)
-       c.Checks = (*ChecksService)(&c.common)
-       c.CodeScanning = (*CodeScanningService)(&c.common)
-       c.Gists = (*GistsService)(&c.common)
-       c.Git = (*GitService)(&c.common)
-       c.Gitignores = (*GitignoresService)(&c.common)
-       c.Interactions = (*InteractionsService)(&c.common)
-       c.Issues = (*IssuesService)(&c.common)
-       c.Licenses = (*LicensesService)(&c.common)
-       c.Marketplace = &MarketplaceService{client: c}
-       c.Migrations = (*MigrationService)(&c.common)
-       c.Organizations = (*OrganizationsService)(&c.common)
-       c.Projects = (*ProjectsService)(&c.common)
-       c.PullRequests = (*PullRequestsService)(&c.common)
-       c.Reactions = (*ReactionsService)(&c.common)
-       c.Repositories = (*RepositoriesService)(&c.common)
-       c.Search = (*SearchService)(&c.common)
-       c.Teams = (*TeamsService)(&c.common)
-       c.Users = (*UsersService)(&c.common)
-       return c
-}
-
-// NewEnterpriseClient returns a new GitHub API client with provided
-// base URL and upload URL (often is your GitHub Enterprise hostname).
-// If the base URL does not have the suffix "/api/v3/", it will be added automatically.
-// If the upload URL does not have the suffix "/api/uploads", it will be added automatically.
-// If a nil httpClient is provided, a new http.Client will be used.
-//
-// Note that NewEnterpriseClient is a convenience helper only;
-// its behavior is equivalent to using NewClient, followed by setting
-// the BaseURL and UploadURL fields.
-//
-// Another important thing is that by default, the GitHub Enterprise URL format
-// should be http(s)://[hostname]/api/v3/ or you will always receive the 406 status code.
-// The upload URL format should be http(s)://[hostname]/api/uploads/.
-func NewEnterpriseClient(baseURL, uploadURL string, httpClient *http.Client) (*Client, error) {
-       baseEndpoint, err := url.Parse(baseURL)
-       if err != nil {
-               return nil, err
-       }
-       if !strings.HasSuffix(baseEndpoint.Path, "/") {
-               baseEndpoint.Path += "/"
-       }
-       if !strings.HasSuffix(baseEndpoint.Path, "/api/v3/") {
-               baseEndpoint.Path += "api/v3/"
-       }
-
-       uploadEndpoint, err := url.Parse(uploadURL)
-       if err != nil {
-               return nil, err
-       }
-       if !strings.HasSuffix(uploadEndpoint.Path, "/") {
-               uploadEndpoint.Path += "/"
-       }
-       if !strings.HasSuffix(uploadEndpoint.Path, "/api/uploads/") {
-               uploadEndpoint.Path += "api/uploads/"
-       }
-
-       c := NewClient(httpClient)
-       c.BaseURL = baseEndpoint
-       c.UploadURL = uploadEndpoint
-       return c, nil
-}
-
-// NewRequest creates an API request. A relative URL can be provided in urlStr,
-// in which case it is resolved relative to the BaseURL of the Client.
-// Relative URLs should always be specified without a preceding slash. If
-// specified, the value pointed to by body is JSON encoded and included as the
-// request body.
-func (c *Client) NewRequest(method, urlStr string, body interface{}) (*http.Request, error) {
-       if !strings.HasSuffix(c.BaseURL.Path, "/") {
-               return nil, fmt.Errorf("BaseURL must have a trailing slash, but %q does not", c.BaseURL)
-       }
-       u, err := c.BaseURL.Parse(urlStr)
-       if err != nil {
-               return nil, err
-       }
-
-       var buf io.ReadWriter
-       if body != nil {
-               buf = &bytes.Buffer{}
-               enc := json.NewEncoder(buf)
-               enc.SetEscapeHTML(false)
-               err := enc.Encode(body)
-               if err != nil {
-                       return nil, err
-               }
-       }
-
-       req, err := http.NewRequest(method, u.String(), buf)
-       if err != nil {
-               return nil, err
-       }
-
-       if body != nil {
-               req.Header.Set("Content-Type", "application/json")
-       }
-       req.Header.Set("Accept", mediaTypeV3)
-       if c.UserAgent != "" {
-               req.Header.Set("User-Agent", c.UserAgent)
-       }
-       return req, nil
-}
-
-// NewUploadRequest creates an upload request. A relative URL can be provided in
-// urlStr, in which case it is resolved relative to the UploadURL of the Client.
-// Relative URLs should always be specified without a preceding slash.
-func (c *Client) NewUploadRequest(urlStr string, reader io.Reader, size int64, mediaType string) (*http.Request, error) {
-       if !strings.HasSuffix(c.UploadURL.Path, "/") {
-               return nil, fmt.Errorf("UploadURL must have a trailing slash, but %q does not", c.UploadURL)
-       }
-       u, err := c.UploadURL.Parse(urlStr)
-       if err != nil {
-               return nil, err
-       }
-
-       req, err := http.NewRequest("POST", u.String(), reader)
-       if err != nil {
-               return nil, err
-       }
-       req.ContentLength = size
-
-       if mediaType == "" {
-               mediaType = defaultMediaType
-       }
-       req.Header.Set("Content-Type", mediaType)
-       req.Header.Set("Accept", mediaTypeV3)
-       req.Header.Set("User-Agent", c.UserAgent)
-       return req, nil
-}
-
-// Response is a GitHub API response. This wraps the standard http.Response
-// returned from GitHub and provides convenient access to things like
-// pagination links.
-type Response struct {
-       *http.Response
-
-       // These fields provide the page values for paginating through a set of
-       // results. Any or all of these may be set to the zero value for
-       // responses that are not part of a paginated set, or for which there
-       // are no additional pages.
-       //
-       // These fields support what is called "offset pagination" and should
-       // be used with the ListOptions struct.
-       NextPage  int
-       PrevPage  int
-       FirstPage int
-       LastPage  int
-
-       // Additionally, some APIs support "cursor pagination" instead of offset.
-       // This means that a token points directly to the next record which
-       // can lead to O(1) performance compared to O(n) performance provided
-       // by offset pagination.
-       //
-       // For APIs that support cursor pagination (such as
-       // TeamsService.ListIDPGroupsInOrganization), the following field
-       // will be populated to point to the next page.
-       //
-       // To use this token, set ListCursorOptions.Page to this value before
-       // calling the endpoint again.
-       NextPageToken string
-
-       // Explicitly specify the Rate type so Rate's String() receiver doesn't
-       // propagate to Response.
-       Rate Rate
-}
-
-// newResponse creates a new Response for the provided http.Response.
-// r must not be nil.
-func newResponse(r *http.Response) *Response {
-       response := &Response{Response: r}
-       response.populatePageValues()
-       response.Rate = parseRate(r)
-       return response
-}
-
-// populatePageValues parses the HTTP Link response headers and populates the
-// various pagination link values in the Response.
-func (r *Response) populatePageValues() {
-       if links, ok := r.Response.Header["Link"]; ok && len(links) > 0 {
-               for _, link := range strings.Split(links[0], ",") {
-                       segments := strings.Split(strings.TrimSpace(link), ";")
-
-                       // link must at least have href and rel
-                       if len(segments) < 2 {
-                               continue
-                       }
-
-                       // ensure href is properly formatted
-                       if !strings.HasPrefix(segments[0], "<") || !strings.HasSuffix(segments[0], ">") {
-                               continue
-                       }
-
-                       // try to pull out page parameter
-                       url, err := url.Parse(segments[0][1 : len(segments[0])-1])
-                       if err != nil {
-                               continue
-                       }
-                       page := url.Query().Get("page")
-                       if page == "" {
-                               continue
-                       }
-
-                       for _, segment := range segments[1:] {
-                               switch strings.TrimSpace(segment) {
-                               case `rel="next"`:
-                                       if r.NextPage, err = strconv.Atoi(page); err != nil {
-                                               r.NextPageToken = page
-                                       }
-                               case `rel="prev"`:
-                                       r.PrevPage, _ = strconv.Atoi(page)
-                               case `rel="first"`:
-                                       r.FirstPage, _ = strconv.Atoi(page)
-                               case `rel="last"`:
-                                       r.LastPage, _ = strconv.Atoi(page)
-                               }
-
-                       }
-               }
-       }
-}
-
-// parseRate parses the rate related headers.
-func parseRate(r *http.Response) Rate {
-       var rate Rate
-       if limit := r.Header.Get(headerRateLimit); limit != "" {
-               rate.Limit, _ = strconv.Atoi(limit)
-       }
-       if remaining := r.Header.Get(headerRateRemaining); remaining != "" {
-               rate.Remaining, _ = strconv.Atoi(remaining)
-       }
-       if reset := r.Header.Get(headerRateReset); reset != "" {
-               if v, _ := strconv.ParseInt(reset, 10, 64); v != 0 {
-                       rate.Reset = Timestamp{time.Unix(v, 0)}
-               }
-       }
-       return rate
-}
-
-// Do sends an API request and returns the API response. The API response is
-// JSON decoded and stored in the value pointed to by v, or returned as an
-// error if an API error has occurred. If v implements the io.Writer
-// interface, the raw response body will be written to v, without attempting to
-// first decode it. If rate limit is exceeded and reset time is in the future,
-// Do returns *RateLimitError immediately without making a network API call.
-//
-// The provided ctx must be non-nil, if it is nil an error is returned. If it is canceled or times out,
-// ctx.Err() will be returned.
-func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*Response, error) {
-       if ctx == nil {
-               return nil, errors.New("context must be non-nil")
-       }
-       req = withContext(ctx, req)
-
-       rateLimitCategory := category(req.URL.Path)
-
-       // If we've hit rate limit, don't make further requests before Reset time.
-       if err := c.checkRateLimitBeforeDo(req, rateLimitCategory); err != nil {
-               return &Response{
-                       Response: err.Response,
-                       Rate:     err.Rate,
-               }, err
-       }
-
-       resp, err := c.client.Do(req)
-       if err != nil {
-               // If we got an error, and the context has been canceled,
-               // the context's error is probably more useful.
-               select {
-               case <-ctx.Done():
-                       return nil, ctx.Err()
-               default:
-               }
-
-               // If the error type is *url.Error, sanitize its URL before returning.
-               if e, ok := err.(*url.Error); ok {
-                       if url, err := url.Parse(e.URL); err == nil {
-                               e.URL = sanitizeURL(url).String()
-                               return nil, e
-                       }
-               }
-
-               return nil, err
-       }
-       defer resp.Body.Close()
-
-       response := newResponse(resp)
-
-       c.rateMu.Lock()
-       c.rateLimits[rateLimitCategory] = response.Rate
-       c.rateMu.Unlock()
-
-       err = CheckResponse(resp)
-       if err != nil {
-               // Special case for AcceptedErrors. If an AcceptedError
-               // has been encountered, the response's payload will be
-               // added to the AcceptedError and returned.
-               //
-               // Issue #1022
-               aerr, ok := err.(*AcceptedError)
-               if ok {
-                       b, readErr := ioutil.ReadAll(resp.Body)
-                       if readErr != nil {
-                               return response, readErr
-                       }
-
-                       aerr.Raw = b
-                       return response, aerr
-               }
-
-               return response, err
-       }
-
-       if v != nil {
-               if w, ok := v.(io.Writer); ok {
-                       io.Copy(w, resp.Body)
-               } else {
-                       decErr := json.NewDecoder(resp.Body).Decode(v)
-                       if decErr == io.EOF {
-                               decErr = nil // ignore EOF errors caused by empty response body
-                       }
-                       if decErr != nil {
-                               err = decErr
-                       }
-               }
-       }
-
-       return response, err
-}
-
-// checkRateLimitBeforeDo does not make any network calls, but uses existing knowledge from
-// current client state in order to quickly check if *RateLimitError can be immediately returned
-// from Client.Do, and if so, returns it so that Client.Do can skip making a network API call unnecessarily.
-// Otherwise it returns nil, and Client.Do should proceed normally.
-func (c *Client) checkRateLimitBeforeDo(req *http.Request, rateLimitCategory rateLimitCategory) *RateLimitError {
-       c.rateMu.Lock()
-       rate := c.rateLimits[rateLimitCategory]
-       c.rateMu.Unlock()
-       if !rate.Reset.Time.IsZero() && rate.Remaining == 0 && time.Now().Before(rate.Reset.Time) {
-               // Create a fake response.
-               resp := &http.Response{
-                       Status:     http.StatusText(http.StatusForbidden),
-                       StatusCode: http.StatusForbidden,
-                       Request:    req,
-                       Header:     make(http.Header),
-                       Body:       ioutil.NopCloser(strings.NewReader("")),
-               }
-               return &RateLimitError{
-                       Rate:     rate,
-                       Response: resp,
-                       Message:  fmt.Sprintf("API rate limit of %v still exceeded until %v, not making remote request.", rate.Limit, rate.Reset.Time),
-               }
-       }
-
-       return nil
-}
-
-/*
-An ErrorResponse reports one or more errors caused by an API request.
-
-GitHub API docs: https://developer.github.com/v3/#client-errors
-*/
-type ErrorResponse struct {
-       Response *http.Response // HTTP response that caused this error
-       Message  string         `json:"message"` // error message
-       Errors   []Error        `json:"errors"`  // more detail on individual errors
-       // Block is only populated on certain types of errors such as code 451.
-       // See https://developer.github.com/changes/2016-03-17-the-451-status-code-is-now-supported/
-       // for more information.
-       Block *struct {
-               Reason    string     `json:"reason,omitempty"`
-               CreatedAt *Timestamp `json:"created_at,omitempty"`
-       } `json:"block,omitempty"`
-       // Most errors will also include a documentation_url field pointing
-       // to some content that might help you resolve the error, see
-       // https://developer.github.com/v3/#client-errors
-       DocumentationURL string `json:"documentation_url,omitempty"`
-}
-
-func (r *ErrorResponse) Error() string {
-       return fmt.Sprintf("%v %v: %d %v %+v",
-               r.Response.Request.Method, sanitizeURL(r.Response.Request.URL),
-               r.Response.StatusCode, r.Message, r.Errors)
-}
-
-// TwoFactorAuthError occurs when using HTTP Basic Authentication for a user
-// that has two-factor authentication enabled. The request can be reattempted
-// by providing a one-time password in the request.
-type TwoFactorAuthError ErrorResponse
-
-func (r *TwoFactorAuthError) Error() string { return (*ErrorResponse)(r).Error() }
-
-// RateLimitError occurs when GitHub returns 403 Forbidden response with a rate limit
-// remaining value of 0.
-type RateLimitError struct {
-       Rate     Rate           // Rate specifies last known rate limit for the client
-       Response *http.Response // HTTP response that caused this error
-       Message  string         `json:"message"` // error message
-}
-
-func (r *RateLimitError) Error() string {
-       return fmt.Sprintf("%v %v: %d %v %v",
-               r.Response.Request.Method, sanitizeURL(r.Response.Request.URL),
-               r.Response.StatusCode, r.Message, formatRateReset(time.Until(r.Rate.Reset.Time)))
-}
-
-// AcceptedError occurs when GitHub returns 202 Accepted response with an
-// empty body, which means a job was scheduled on the GitHub side to process
-// the information needed and cache it.
-// Technically, 202 Accepted is not a real error, it's just used to
-// indicate that results are not ready yet, but should be available soon.
-// The request can be repeated after some time.
-type AcceptedError struct {
-       // Raw contains the response body.
-       Raw []byte
-}
-
-func (*AcceptedError) Error() string {
-       return "job scheduled on GitHub side; try again later"
-}
-
-// AbuseRateLimitError occurs when GitHub returns 403 Forbidden response with the
-// "documentation_url" field value equal to "https://developer.github.com/v3/#abuse-rate-limits".
-type AbuseRateLimitError struct {
-       Response *http.Response // HTTP response that caused this error
-       Message  string         `json:"message"` // error message
-
-       // RetryAfter is provided with some abuse rate limit errors. If present,
-       // it is the amount of time that the client should wait before retrying.
-       // Otherwise, the client should try again later (after an unspecified amount of time).
-       RetryAfter *time.Duration
-}
-
-func (r *AbuseRateLimitError) Error() string {
-       return fmt.Sprintf("%v %v: %d %v",
-               r.Response.Request.Method, sanitizeURL(r.Response.Request.URL),
-               r.Response.StatusCode, r.Message)
-}
-
-// sanitizeURL redacts the client_secret parameter from the URL which may be
-// exposed to the user.
-func sanitizeURL(uri *url.URL) *url.URL {
-       if uri == nil {
-               return nil
-       }
-       params := uri.Query()
-       if len(params.Get("client_secret")) > 0 {
-               params.Set("client_secret", "REDACTED")
-               uri.RawQuery = params.Encode()
-       }
-       return uri
-}
-
-/*
-An Error reports more details on an individual error in an ErrorResponse.
-These are the possible validation error codes:
-
-    missing:
-        resource does not exist
-    missing_field:
-        a required field on a resource has not been set
-    invalid:
-        the formatting of a field is invalid
-    already_exists:
-        another resource has the same valid as this field
-    custom:
-        some resources return this (e.g. github.User.CreateKey()), additional
-        information is set in the Message field of the Error
-
-GitHub error responses structure are often undocumented and inconsistent.
-Sometimes error is just a simple string (Issue #540).
-In such cases, Message represents an error message as a workaround.
-
-GitHub API docs: https://developer.github.com/v3/#client-errors
-*/
-type Error struct {
-       Resource string `json:"resource"` // resource on which the error occurred
-       Field    string `json:"field"`    // field on which the error occurred
-       Code     string `json:"code"`     // validation error code
-       Message  string `json:"message"`  // Message describing the error. Errors with Code == "custom" will always have this set.
-}
-
-func (e *Error) Error() string {
-       return fmt.Sprintf("%v error caused by %v field on %v resource",
-               e.Code, e.Field, e.Resource)
-}
-
-func (e *Error) UnmarshalJSON(data []byte) error {
-       type aliasError Error // avoid infinite recursion by using type alias.
-       if err := json.Unmarshal(data, (*aliasError)(e)); err != nil {
-               return json.Unmarshal(data, &e.Message) // data can be json string.
-       }
-       return nil
-}
-
-// CheckResponse checks the API response for errors, and returns them if
-// present. A response is considered an error if it has a status code outside
-// the 200 range or equal to 202 Accepted.
-// API error responses are expected to have response
-// body, and a JSON response body that maps to ErrorResponse.
-//
-// The error type will be *RateLimitError for rate limit exceeded errors,
-// *AcceptedError for 202 Accepted status codes,
-// and *TwoFactorAuthError for two-factor authentication errors.
-func CheckResponse(r *http.Response) error {
-       if r.StatusCode == http.StatusAccepted {
-               return &AcceptedError{}
-       }
-       if c := r.StatusCode; 200 <= c && c <= 299 {
-               return nil
-       }
-       errorResponse := &ErrorResponse{Response: r}
-       data, err := ioutil.ReadAll(r.Body)
-       if err == nil && data != nil {
-               json.Unmarshal(data, errorResponse)
-       }
-       // Re-populate error response body because GitHub error responses are often
-       // undocumented and inconsistent.
-       // Issue #1136, #540.
-       r.Body = ioutil.NopCloser(bytes.NewBuffer(data))
-       switch {
-       case r.StatusCode == http.StatusUnauthorized && strings.HasPrefix(r.Header.Get(headerOTP), "required"):
-               return (*TwoFactorAuthError)(errorResponse)
-       case r.StatusCode == http.StatusForbidden && r.Header.Get(headerRateRemaining) == "0":
-               return &RateLimitError{
-                       Rate:     parseRate(r),
-                       Response: errorResponse.Response,
-                       Message:  errorResponse.Message,
-               }
-       case r.StatusCode == http.StatusForbidden && strings.HasSuffix(errorResponse.DocumentationURL, "/v3/#abuse-rate-limits"):
-               abuseRateLimitError := &AbuseRateLimitError{
-                       Response: errorResponse.Response,
-                       Message:  errorResponse.Message,
-               }
-               if v := r.Header["Retry-After"]; len(v) > 0 {
-                       // According to GitHub support, the "Retry-After" header value will be
-                       // an integer which represents the number of seconds that one should
-                       // wait before resuming making requests.
-                       retryAfterSeconds, _ := strconv.ParseInt(v[0], 10, 64) // Error handling is noop.
-                       retryAfter := time.Duration(retryAfterSeconds) * time.Second
-                       abuseRateLimitError.RetryAfter = &retryAfter
-               }
-               return abuseRateLimitError
-       default:
-               return errorResponse
-       }
-}
-
-// parseBoolResponse determines the boolean result from a GitHub API response.
-// Several GitHub API methods return boolean responses indicated by the HTTP
-// status code in the response (true indicated by a 204, false indicated by a
-// 404). This helper function will determine that result and hide the 404
-// error if present. Any other error will be returned through as-is.
-func parseBoolResponse(err error) (bool, error) {
-       if err == nil {
-               return true, nil
-       }
-
-       if err, ok := err.(*ErrorResponse); ok && err.Response.StatusCode == http.StatusNotFound {
-               // Simply false. In this one case, we do not pass the error through.
-               return false, nil
-       }
-
-       // some other real error occurred
-       return false, err
-}
-
-// Rate represents the rate limit for the current client.
-type Rate struct {
-       // The number of requests per hour the client is currently limited to.
-       Limit int `json:"limit"`
-
-       // The number of remaining requests the client can make this hour.
-       Remaining int `json:"remaining"`
-
-       // The time at which the current rate limit will reset.
-       Reset Timestamp `json:"reset"`
-}
-
-func (r Rate) String() string {
-       return Stringify(r)
-}
-
-// RateLimits represents the rate limits for the current client.
-type RateLimits struct {
-       // The rate limit for non-search API requests. Unauthenticated
-       // requests are limited to 60 per hour. Authenticated requests are
-       // limited to 5,000 per hour.
-       //
-       // GitHub API docs: https://developer.github.com/v3/#rate-limiting
-       Core *Rate `json:"core"`
-
-       // The rate limit for search API requests. Unauthenticated requests
-       // are limited to 10 requests per minutes. Authenticated requests are
-       // limited to 30 per minute.
-       //
-       // GitHub API docs: https://developer.github.com/v3/search/#rate-limit
-       Search *Rate `json:"search"`
-}
-
-func (r RateLimits) String() string {
-       return Stringify(r)
-}
-
-type rateLimitCategory uint8
-
-const (
-       coreCategory rateLimitCategory = iota
-       searchCategory
-
-       categories // An array of this length will be able to contain all rate limit categories.
-)
-
-// category returns the rate limit category of the endpoint, determined by Request.URL.Path.
-func category(path string) rateLimitCategory {
-       switch {
-       default:
-               return coreCategory
-       case strings.HasPrefix(path, "/search/"):
-               return searchCategory
-       }
-}
-
-// RateLimits returns the rate limits for the current client.
-func (c *Client) RateLimits(ctx context.Context) (*RateLimits, *Response, error) {
-       req, err := c.NewRequest("GET", "rate_limit", nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       response := new(struct {
-               Resources *RateLimits `json:"resources"`
-       })
-       resp, err := c.Do(ctx, req, response)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       if response.Resources != nil {
-               c.rateMu.Lock()
-               if response.Resources.Core != nil {
-                       c.rateLimits[coreCategory] = *response.Resources.Core
-               }
-               if response.Resources.Search != nil {
-                       c.rateLimits[searchCategory] = *response.Resources.Search
-               }
-               c.rateMu.Unlock()
-       }
-
-       return response.Resources, resp, nil
-}
-
-func setCredentialsAsHeaders(req *http.Request, id, secret string) *http.Request {
-       // To set extra headers, we must make a copy of the Request so
-       // that we don't modify the Request we were given. This is required by the
-       // specification of http.RoundTripper.
-       //
-       // Since we are going to modify only req.Header here, we only need a deep copy
-       // of req.Header.
-       convertedRequest := new(http.Request)
-       *convertedRequest = *req
-       convertedRequest.Header = make(http.Header, len(req.Header))
-
-       for k, s := range req.Header {
-               convertedRequest.Header[k] = append([]string(nil), s...)
-       }
-       convertedRequest.SetBasicAuth(id, secret)
-       return convertedRequest
-}
-
-/*
-UnauthenticatedRateLimitedTransport allows you to make unauthenticated calls
-that need to use a higher rate limit associated with your OAuth application.
-
-       t := &github.UnauthenticatedRateLimitedTransport{
-               ClientID:     "your app's client ID",
-               ClientSecret: "your app's client secret",
-       }
-       client := github.NewClient(t.Client())
-
-This will add the client id and secret as a base64-encoded string in the format
-ClientID:ClientSecret and apply it as an "Authorization": "Basic" header.
-
-See https://developer.github.com/v3/#unauthenticated-rate-limited-requests for
-more information.
-*/
-type UnauthenticatedRateLimitedTransport struct {
-       // ClientID is the GitHub OAuth client ID of the current application, which
-       // can be found by selecting its entry in the list at
-       // https://github.com/settings/applications.
-       ClientID string
-
-       // ClientSecret is the GitHub OAuth client secret of the current
-       // application.
-       ClientSecret string
-
-       // Transport is the underlying HTTP transport to use when making requests.
-       // It will default to http.DefaultTransport if nil.
-       Transport http.RoundTripper
-}
-
-// RoundTrip implements the RoundTripper interface.
-func (t *UnauthenticatedRateLimitedTransport) RoundTrip(req *http.Request) (*http.Response, error) {
-       if t.ClientID == "" {
-               return nil, errors.New("t.ClientID is empty")
-       }
-       if t.ClientSecret == "" {
-               return nil, errors.New("t.ClientSecret is empty")
-       }
-
-       req2 := setCredentialsAsHeaders(req, t.ClientID, t.ClientSecret)
-       // Make the HTTP request.
-       return t.transport().RoundTrip(req2)
-}
-
-// Client returns an *http.Client that makes requests which are subject to the
-// rate limit of your OAuth application.
-func (t *UnauthenticatedRateLimitedTransport) Client() *http.Client {
-       return &http.Client{Transport: t}
-}
-
-func (t *UnauthenticatedRateLimitedTransport) transport() http.RoundTripper {
-       if t.Transport != nil {
-               return t.Transport
-       }
-       return http.DefaultTransport
-}
-
-// BasicAuthTransport is an http.RoundTripper that authenticates all requests
-// using HTTP Basic Authentication with the provided username and password. It
-// additionally supports users who have two-factor authentication enabled on
-// their GitHub account.
-type BasicAuthTransport struct {
-       Username string // GitHub username
-       Password string // GitHub password
-       OTP      string // one-time password for users with two-factor auth enabled
-
-       // Transport is the underlying HTTP transport to use when making requests.
-       // It will default to http.DefaultTransport if nil.
-       Transport http.RoundTripper
-}
-
-// RoundTrip implements the RoundTripper interface.
-func (t *BasicAuthTransport) RoundTrip(req *http.Request) (*http.Response, error) {
-       req2 := setCredentialsAsHeaders(req, t.Username, t.Password)
-       if t.OTP != "" {
-               req2.Header.Set(headerOTP, t.OTP)
-       }
-       return t.transport().RoundTrip(req2)
-}
-
-// Client returns an *http.Client that makes requests that are authenticated
-// using HTTP Basic Authentication.
-func (t *BasicAuthTransport) Client() *http.Client {
-       return &http.Client{Transport: t}
-}
-
-func (t *BasicAuthTransport) transport() http.RoundTripper {
-       if t.Transport != nil {
-               return t.Transport
-       }
-       return http.DefaultTransport
-}
-
-// formatRateReset formats d to look like "[rate reset in 2s]" or
-// "[rate reset in 87m02s]" for the positive durations. And like "[rate limit was reset 87m02s ago]"
-// for the negative cases.
-func formatRateReset(d time.Duration) string {
-       isNegative := d < 0
-       if isNegative {
-               d *= -1
-       }
-       secondsTotal := int(0.5 + d.Seconds())
-       minutes := secondsTotal / 60
-       seconds := secondsTotal - minutes*60
-
-       var timeString string
-       if minutes > 0 {
-               timeString = fmt.Sprintf("%dm%02ds", minutes, seconds)
-       } else {
-               timeString = fmt.Sprintf("%ds", seconds)
-       }
-
-       if isNegative {
-               return fmt.Sprintf("[rate limit was reset %v ago]", timeString)
-       }
-       return fmt.Sprintf("[rate reset in %v]", timeString)
-}
-
-// Bool is a helper routine that allocates a new bool value
-// to store v and returns a pointer to it.
-func Bool(v bool) *bool { return &v }
-
-// Int is a helper routine that allocates a new int value
-// to store v and returns a pointer to it.
-func Int(v int) *int { return &v }
-
-// Int64 is a helper routine that allocates a new int64 value
-// to store v and returns a pointer to it.
-func Int64(v int64) *int64 { return &v }
-
-// String is a helper routine that allocates a new string value
-// to store v and returns a pointer to it.
-func String(v string) *string { return &v }
diff --git a/vendor/github.com/google/go-github/v32/github/gitignore.go b/vendor/github.com/google/go-github/v32/github/gitignore.go
deleted file mode 100644 (file)
index 5d03f05..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// GitignoresService provides access to the gitignore related functions in the
-// GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/gitignore/
-type GitignoresService service
-
-// Gitignore represents a .gitignore file as returned by the GitHub API.
-type Gitignore struct {
-       Name   *string `json:"name,omitempty"`
-       Source *string `json:"source,omitempty"`
-}
-
-func (g Gitignore) String() string {
-       return Stringify(g)
-}
-
-// List all available Gitignore templates.
-//
-// GitHub API docs: https://developer.github.com/v3/gitignore/#listing-available-templates
-func (s *GitignoresService) List(ctx context.Context) ([]string, *Response, error) {
-       req, err := s.client.NewRequest("GET", "gitignore/templates", nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var availableTemplates []string
-       resp, err := s.client.Do(ctx, req, &availableTemplates)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return availableTemplates, resp, nil
-}
-
-// Get a Gitignore by name.
-//
-// GitHub API docs: https://developer.github.com/v3/gitignore/#get-a-gitignore-template
-func (s *GitignoresService) Get(ctx context.Context, name string) (*Gitignore, *Response, error) {
-       u := fmt.Sprintf("gitignore/templates/%v", name)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       gitignore := new(Gitignore)
-       resp, err := s.client.Do(ctx, req, gitignore)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return gitignore, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/interactions.go b/vendor/github.com/google/go-github/v32/github/interactions.go
deleted file mode 100644 (file)
index b996549..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2018 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-// InteractionsService handles communication with the repository and organization related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/interactions/
-type InteractionsService service
-
-// InteractionRestriction represents the interaction restrictions for repository and organization.
-type InteractionRestriction struct {
-       // Specifies the group of GitHub users who can
-       // comment, open issues, or create pull requests for the given repository.
-       // Possible values are: "existing_users", "contributors_only" and "collaborators_only".
-       Limit *string `json:"limit,omitempty"`
-
-       // Origin specifies the type of the resource to interact with.
-       // Possible values are: "repository" and "organization".
-       Origin *string `json:"origin,omitempty"`
-
-       // ExpiresAt specifies the time after which the interaction restrictions expire.
-       // The default expiry time is 24 hours from the time restriction is created.
-       ExpiresAt *Timestamp `json:"expires_at,omitempty"`
-}
diff --git a/vendor/github.com/google/go-github/v32/github/interactions_orgs.go b/vendor/github.com/google/go-github/v32/github/interactions_orgs.go
deleted file mode 100644 (file)
index e2fcabb..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2019 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// GetRestrictionsForOrg fetches the interaction restrictions for an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/interactions/orgs/#get-interaction-restrictions-for-an-organization
-func (s *InteractionsService) GetRestrictionsForOrg(ctx context.Context, organization string) (*InteractionRestriction, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/interaction-limits", organization)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
-
-       organizationInteractions := new(InteractionRestriction)
-
-       resp, err := s.client.Do(ctx, req, organizationInteractions)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return organizationInteractions, resp, nil
-}
-
-// UpdateRestrictionsForOrg adds or updates the interaction restrictions for an organization.
-//
-// limit specifies the group of GitHub users who can comment, open issues, or create pull requests
-// in public repositories for the given organization.
-// Possible values are: "existing_users", "contributors_only", "collaborators_only".
-//
-// GitHub API docs: https://developer.github.com/v3/interactions/orgs/#set-interaction-restrictions-for-an-organization
-func (s *InteractionsService) UpdateRestrictionsForOrg(ctx context.Context, organization, limit string) (*InteractionRestriction, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/interaction-limits", organization)
-
-       interaction := &InteractionRestriction{Limit: String(limit)}
-
-       req, err := s.client.NewRequest("PUT", u, interaction)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
-
-       organizationInteractions := new(InteractionRestriction)
-
-       resp, err := s.client.Do(ctx, req, organizationInteractions)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return organizationInteractions, resp, nil
-}
-
-// RemoveRestrictionsFromOrg removes the interaction restrictions for an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/interactions/orgs/#remove-interaction-restrictions-for-an-organization
-func (s *InteractionsService) RemoveRestrictionsFromOrg(ctx context.Context, organization string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/interaction-limits", organization)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/interactions_repos.go b/vendor/github.com/google/go-github/v32/github/interactions_repos.go
deleted file mode 100644 (file)
index 74f4ec4..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2018 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// GetRestrictionsForRepo fetches the interaction restrictions for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/interactions/repos/#get-interaction-restrictions-for-a-repository
-func (s *InteractionsService) GetRestrictionsForRepo(ctx context.Context, owner, repo string) (*InteractionRestriction, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/interaction-limits", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
-
-       repositoryInteractions := new(InteractionRestriction)
-
-       resp, err := s.client.Do(ctx, req, repositoryInteractions)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repositoryInteractions, resp, nil
-}
-
-// UpdateRestrictionsForRepo adds or updates the interaction restrictions for a repository.
-//
-// limit specifies the group of GitHub users who can comment, open issues, or create pull requests
-// for the given repository.
-// Possible values are: "existing_users", "contributors_only", "collaborators_only".
-//
-// GitHub API docs: https://developer.github.com/v3/interactions/repos/#set-interaction-restrictions-for-a-repository
-func (s *InteractionsService) UpdateRestrictionsForRepo(ctx context.Context, owner, repo, limit string) (*InteractionRestriction, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/interaction-limits", owner, repo)
-
-       interaction := &InteractionRestriction{Limit: String(limit)}
-
-       req, err := s.client.NewRequest("PUT", u, interaction)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
-
-       repositoryInteractions := new(InteractionRestriction)
-
-       resp, err := s.client.Do(ctx, req, repositoryInteractions)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repositoryInteractions, resp, nil
-}
-
-// RemoveRestrictionsFromRepo removes the interaction restrictions for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/interactions/repos/#remove-interaction-restrictions-for-a-repository
-func (s *InteractionsService) RemoveRestrictionsFromRepo(ctx context.Context, owner, repo string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/interaction-limits", owner, repo)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/issues.go b/vendor/github.com/google/go-github/v32/github/issues.go
deleted file mode 100644 (file)
index ccce80a..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "strings"
-       "time"
-)
-
-// IssuesService handles communication with the issue related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/
-type IssuesService service
-
-// Issue represents a GitHub issue on a repository.
-//
-// Note: As far as the GitHub API is concerned, every pull request is an issue,
-// but not every issue is a pull request. Some endpoints, events, and webhooks
-// may also return pull requests via this struct. If PullRequestLinks is nil,
-// this is an issue, and if PullRequestLinks is not nil, this is a pull request.
-// The IsPullRequest helper method can be used to check that.
-type Issue struct {
-       ID                *int64            `json:"id,omitempty"`
-       Number            *int              `json:"number,omitempty"`
-       State             *string           `json:"state,omitempty"`
-       Locked            *bool             `json:"locked,omitempty"`
-       Title             *string           `json:"title,omitempty"`
-       Body              *string           `json:"body,omitempty"`
-       AuthorAssociation *string           `json:"author_association,omitempty"`
-       User              *User             `json:"user,omitempty"`
-       Labels            []*Label          `json:"labels,omitempty"`
-       Assignee          *User             `json:"assignee,omitempty"`
-       Comments          *int              `json:"comments,omitempty"`
-       ClosedAt          *time.Time        `json:"closed_at,omitempty"`
-       CreatedAt         *time.Time        `json:"created_at,omitempty"`
-       UpdatedAt         *time.Time        `json:"updated_at,omitempty"`
-       ClosedBy          *User             `json:"closed_by,omitempty"`
-       URL               *string           `json:"url,omitempty"`
-       HTMLURL           *string           `json:"html_url,omitempty"`
-       CommentsURL       *string           `json:"comments_url,omitempty"`
-       EventsURL         *string           `json:"events_url,omitempty"`
-       LabelsURL         *string           `json:"labels_url,omitempty"`
-       RepositoryURL     *string           `json:"repository_url,omitempty"`
-       Milestone         *Milestone        `json:"milestone,omitempty"`
-       PullRequestLinks  *PullRequestLinks `json:"pull_request,omitempty"`
-       Repository        *Repository       `json:"repository,omitempty"`
-       Reactions         *Reactions        `json:"reactions,omitempty"`
-       Assignees         []*User           `json:"assignees,omitempty"`
-       NodeID            *string           `json:"node_id,omitempty"`
-
-       // TextMatches is only populated from search results that request text matches
-       // See: search.go and https://developer.github.com/v3/search/#text-match-metadata
-       TextMatches []*TextMatch `json:"text_matches,omitempty"`
-
-       // ActiveLockReason is populated only when LockReason is provided while locking the issue.
-       // Possible values are: "off-topic", "too heated", "resolved", and "spam".
-       ActiveLockReason *string `json:"active_lock_reason,omitempty"`
-}
-
-func (i Issue) String() string {
-       return Stringify(i)
-}
-
-// IsPullRequest reports whether the issue is also a pull request. It uses the
-// method recommended by GitHub's API documentation, which is to check whether
-// PullRequestLinks is non-nil.
-func (i Issue) IsPullRequest() bool {
-       return i.PullRequestLinks != nil
-}
-
-// IssueRequest represents a request to create/edit an issue.
-// It is separate from Issue above because otherwise Labels
-// and Assignee fail to serialize to the correct JSON.
-type IssueRequest struct {
-       Title     *string   `json:"title,omitempty"`
-       Body      *string   `json:"body,omitempty"`
-       Labels    *[]string `json:"labels,omitempty"`
-       Assignee  *string   `json:"assignee,omitempty"`
-       State     *string   `json:"state,omitempty"`
-       Milestone *int      `json:"milestone,omitempty"`
-       Assignees *[]string `json:"assignees,omitempty"`
-}
-
-// IssueListOptions specifies the optional parameters to the IssuesService.List
-// and IssuesService.ListByOrg methods.
-type IssueListOptions struct {
-       // Filter specifies which issues to list. Possible values are: assigned,
-       // created, mentioned, subscribed, all. Default is "assigned".
-       Filter string `url:"filter,omitempty"`
-
-       // State filters issues based on their state. Possible values are: open,
-       // closed, all. Default is "open".
-       State string `url:"state,omitempty"`
-
-       // Labels filters issues based on their label.
-       Labels []string `url:"labels,comma,omitempty"`
-
-       // Sort specifies how to sort issues. Possible values are: created, updated,
-       // and comments. Default value is "created".
-       Sort string `url:"sort,omitempty"`
-
-       // Direction in which to sort issues. Possible values are: asc, desc.
-       // Default is "desc".
-       Direction string `url:"direction,omitempty"`
-
-       // Since filters issues by time.
-       Since time.Time `url:"since,omitempty"`
-
-       ListOptions
-}
-
-// PullRequestLinks object is added to the Issue object when it's an issue included
-// in the IssueCommentEvent webhook payload, if the webhook is fired by a comment on a PR.
-type PullRequestLinks struct {
-       URL      *string `json:"url,omitempty"`
-       HTMLURL  *string `json:"html_url,omitempty"`
-       DiffURL  *string `json:"diff_url,omitempty"`
-       PatchURL *string `json:"patch_url,omitempty"`
-}
-
-// List the issues for the authenticated user. If all is true, list issues
-// across all the user's visible repositories including owned, member, and
-// organization repositories; if false, list only owned and member
-// repositories.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/#list-issues-assigned-to-the-authenticated-user
-// GitHub API docs: https://developer.github.com/v3/issues/#list-user-account-issues-assigned-to-the-authenticated-user
-func (s *IssuesService) List(ctx context.Context, all bool, opts *IssueListOptions) ([]*Issue, *Response, error) {
-       var u string
-       if all {
-               u = "issues"
-       } else {
-               u = "user/issues"
-       }
-       return s.listIssues(ctx, u, opts)
-}
-
-// ListByOrg fetches the issues in the specified organization for the
-// authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/#list-organization-issues-assigned-to-the-authenticated-user
-func (s *IssuesService) ListByOrg(ctx context.Context, org string, opts *IssueListOptions) ([]*Issue, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/issues", org)
-       return s.listIssues(ctx, u, opts)
-}
-
-func (s *IssuesService) listIssues(ctx context.Context, u string, opts *IssueListOptions) ([]*Issue, *Response, error) {
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeLockReasonPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var issues []*Issue
-       resp, err := s.client.Do(ctx, req, &issues)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return issues, resp, nil
-}
-
-// IssueListByRepoOptions specifies the optional parameters to the
-// IssuesService.ListByRepo method.
-type IssueListByRepoOptions struct {
-       // Milestone limits issues for the specified milestone. Possible values are
-       // a milestone number, "none" for issues with no milestone, "*" for issues
-       // with any milestone.
-       Milestone string `url:"milestone,omitempty"`
-
-       // State filters issues based on their state. Possible values are: open,
-       // closed, all. Default is "open".
-       State string `url:"state,omitempty"`
-
-       // Assignee filters issues based on their assignee. Possible values are a
-       // user name, "none" for issues that are not assigned, "*" for issues with
-       // any assigned user.
-       Assignee string `url:"assignee,omitempty"`
-
-       // Creator filters issues based on their creator.
-       Creator string `url:"creator,omitempty"`
-
-       // Mentioned filters issues to those mentioned a specific user.
-       Mentioned string `url:"mentioned,omitempty"`
-
-       // Labels filters issues based on their label.
-       Labels []string `url:"labels,omitempty,comma"`
-
-       // Sort specifies how to sort issues. Possible values are: created, updated,
-       // and comments. Default value is "created".
-       Sort string `url:"sort,omitempty"`
-
-       // Direction in which to sort issues. Possible values are: asc, desc.
-       // Default is "desc".
-       Direction string `url:"direction,omitempty"`
-
-       // Since filters issues by time.
-       Since time.Time `url:"since,omitempty"`
-
-       ListOptions
-}
-
-// ListByRepo lists the issues for the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/#list-repository-issues
-func (s *IssuesService) ListByRepo(ctx context.Context, owner string, repo string, opts *IssueListByRepoOptions) ([]*Issue, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeIntegrationPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var issues []*Issue
-       resp, err := s.client.Do(ctx, req, &issues)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return issues, resp, nil
-}
-
-// Get a single issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/#get-an-issue
-func (s *IssuesService) Get(ctx context.Context, owner string, repo string, number int) (*Issue, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%d", owner, repo, number)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeLockReasonPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       issue := new(Issue)
-       resp, err := s.client.Do(ctx, req, issue)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return issue, resp, nil
-}
-
-// Create a new issue on the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/#create-an-issue
-func (s *IssuesService) Create(ctx context.Context, owner string, repo string, issue *IssueRequest) (*Issue, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues", owner, repo)
-       req, err := s.client.NewRequest("POST", u, issue)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       i := new(Issue)
-       resp, err := s.client.Do(ctx, req, i)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return i, resp, nil
-}
-
-// Edit an issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/#update-an-issue
-func (s *IssuesService) Edit(ctx context.Context, owner string, repo string, number int, issue *IssueRequest) (*Issue, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%d", owner, repo, number)
-       req, err := s.client.NewRequest("PATCH", u, issue)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       i := new(Issue)
-       resp, err := s.client.Do(ctx, req, i)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return i, resp, nil
-}
-
-// LockIssueOptions specifies the optional parameters to the
-// IssuesService.Lock method.
-type LockIssueOptions struct {
-       // LockReason specifies the reason to lock this issue.
-       // Providing a lock reason can help make it clearer to contributors why an issue
-       // was locked. Possible values are: "off-topic", "too heated", "resolved", and "spam".
-       LockReason string `json:"lock_reason,omitempty"`
-}
-
-// Lock an issue's conversation.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/#lock-an-issue
-func (s *IssuesService) Lock(ctx context.Context, owner string, repo string, number int, opts *LockIssueOptions) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%d/lock", owner, repo, number)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       if opts != nil {
-               req.Header.Set("Accept", mediaTypeLockReasonPreview)
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// Unlock an issue's conversation.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/#unlock-an-issue
-func (s *IssuesService) Unlock(ctx context.Context, owner string, repo string, number int) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%d/lock", owner, repo, number)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/issues_assignees.go b/vendor/github.com/google/go-github/v32/github/issues_assignees.go
deleted file mode 100644 (file)
index fedb351..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListAssignees fetches all available assignees (owners and collaborators) to
-// which issues may be assigned.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/assignees/#list-assignees
-func (s *IssuesService) ListAssignees(ctx context.Context, owner, repo string, opts *ListOptions) ([]*User, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/assignees", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-       var assignees []*User
-       resp, err := s.client.Do(ctx, req, &assignees)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return assignees, resp, nil
-}
-
-// IsAssignee checks if a user is an assignee for the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/assignees/#check-if-a-user-can-be-assigned
-func (s *IssuesService) IsAssignee(ctx context.Context, owner, repo, user string) (bool, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/assignees/%v", owner, repo, user)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-       resp, err := s.client.Do(ctx, req, nil)
-       assignee, err := parseBoolResponse(err)
-       return assignee, resp, err
-}
-
-// AddAssignees adds the provided GitHub users as assignees to the issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/assignees/#add-assignees-to-an-issue
-func (s *IssuesService) AddAssignees(ctx context.Context, owner, repo string, number int, assignees []string) (*Issue, *Response, error) {
-       users := &struct {
-               Assignees []string `json:"assignees,omitempty"`
-       }{Assignees: assignees}
-       u := fmt.Sprintf("repos/%v/%v/issues/%v/assignees", owner, repo, number)
-       req, err := s.client.NewRequest("POST", u, users)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       issue := &Issue{}
-       resp, err := s.client.Do(ctx, req, issue)
-       return issue, resp, err
-}
-
-// RemoveAssignees removes the provided GitHub users as assignees from the issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/assignees/#remove-assignees-from-an-issue
-func (s *IssuesService) RemoveAssignees(ctx context.Context, owner, repo string, number int, assignees []string) (*Issue, *Response, error) {
-       users := &struct {
-               Assignees []string `json:"assignees,omitempty"`
-       }{Assignees: assignees}
-       u := fmt.Sprintf("repos/%v/%v/issues/%v/assignees", owner, repo, number)
-       req, err := s.client.NewRequest("DELETE", u, users)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       issue := &Issue{}
-       resp, err := s.client.Do(ctx, req, issue)
-       return issue, resp, err
-}
diff --git a/vendor/github.com/google/go-github/v32/github/issues_comments.go b/vendor/github.com/google/go-github/v32/github/issues_comments.go
deleted file mode 100644 (file)
index fc67511..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// IssueComment represents a comment left on an issue.
-type IssueComment struct {
-       ID        *int64     `json:"id,omitempty"`
-       NodeID    *string    `json:"node_id,omitempty"`
-       Body      *string    `json:"body,omitempty"`
-       User      *User      `json:"user,omitempty"`
-       Reactions *Reactions `json:"reactions,omitempty"`
-       CreatedAt *time.Time `json:"created_at,omitempty"`
-       UpdatedAt *time.Time `json:"updated_at,omitempty"`
-       // AuthorAssociation is the comment author's relationship to the issue's repository.
-       // Possible values are "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIMER", "FIRST_TIME_CONTRIBUTOR", "MEMBER", "OWNER", or "NONE".
-       AuthorAssociation *string `json:"author_association,omitempty"`
-       URL               *string `json:"url,omitempty"`
-       HTMLURL           *string `json:"html_url,omitempty"`
-       IssueURL          *string `json:"issue_url,omitempty"`
-}
-
-func (i IssueComment) String() string {
-       return Stringify(i)
-}
-
-// IssueListCommentsOptions specifies the optional parameters to the
-// IssuesService.ListComments method.
-type IssueListCommentsOptions struct {
-       // Sort specifies how to sort comments. Possible values are: created, updated.
-       Sort *string `url:"sort,omitempty"`
-
-       // Direction in which to sort comments. Possible values are: asc, desc.
-       Direction *string `url:"direction,omitempty"`
-
-       // Since filters comments by time.
-       Since *time.Time `url:"since,omitempty"`
-
-       ListOptions
-}
-
-// ListComments lists all comments on the specified issue. Specifying an issue
-// number of 0 will return all comments on all issues for the repository.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/comments/#list-issue-comments
-// GitHub API docs: https://developer.github.com/v3/issues/comments/#list-issue-comments-for-a-repository
-func (s *IssuesService) ListComments(ctx context.Context, owner string, repo string, number int, opts *IssueListCommentsOptions) ([]*IssueComment, *Response, error) {
-       var u string
-       if number == 0 {
-               u = fmt.Sprintf("repos/%v/%v/issues/comments", owner, repo)
-       } else {
-               u = fmt.Sprintf("repos/%v/%v/issues/%d/comments", owner, repo, number)
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       var comments []*IssueComment
-       resp, err := s.client.Do(ctx, req, &comments)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comments, resp, nil
-}
-
-// GetComment fetches the specified issue comment.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/comments/#get-an-issue-comment
-func (s *IssuesService) GetComment(ctx context.Context, owner string, repo string, commentID int64) (*IssueComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       comment := new(IssueComment)
-       resp, err := s.client.Do(ctx, req, comment)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comment, resp, nil
-}
-
-// CreateComment creates a new comment on the specified issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/comments/#create-an-issue-comment
-func (s *IssuesService) CreateComment(ctx context.Context, owner string, repo string, number int, comment *IssueComment) (*IssueComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%d/comments", owner, repo, number)
-       req, err := s.client.NewRequest("POST", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-       c := new(IssueComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// EditComment updates an issue comment.
-// A non-nil comment.Body must be provided. Other comment fields should be left nil.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/comments/#update-an-issue-comment
-func (s *IssuesService) EditComment(ctx context.Context, owner string, repo string, commentID int64, comment *IssueComment) (*IssueComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID)
-       req, err := s.client.NewRequest("PATCH", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-       c := new(IssueComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// DeleteComment deletes an issue comment.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/comments/#delete-an-issue-comment
-func (s *IssuesService) DeleteComment(ctx context.Context, owner string, repo string, commentID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/issues_events.go b/vendor/github.com/google/go-github/v32/github/issues_events.go
deleted file mode 100644 (file)
index 8d3dd86..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2014 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "strings"
-       "time"
-)
-
-// IssueEvent represents an event that occurred around an Issue or Pull Request.
-type IssueEvent struct {
-       ID  *int64  `json:"id,omitempty"`
-       URL *string `json:"url,omitempty"`
-
-       // The User that generated this event.
-       Actor *User `json:"actor,omitempty"`
-
-       // Event identifies the actual type of Event that occurred. Possible
-       // values are:
-       //
-       //     closed
-       //       The Actor closed the issue.
-       //       If the issue was closed by commit message, CommitID holds the SHA1 hash of the commit.
-       //
-       //     merged
-       //       The Actor merged into master a branch containing a commit mentioning the issue.
-       //       CommitID holds the SHA1 of the merge commit.
-       //
-       //     referenced
-       //       The Actor committed to master a commit mentioning the issue in its commit message.
-       //       CommitID holds the SHA1 of the commit.
-       //
-       //     reopened, unlocked
-       //       The Actor did that to the issue.
-       //
-       //     locked
-       //       The Actor locked the issue.
-       //       LockReason holds the reason of locking the issue (if provided while locking).
-       //
-       //     renamed
-       //       The Actor changed the issue title from Rename.From to Rename.To.
-       //
-       //     mentioned
-       //       Someone unspecified @mentioned the Actor [sic] in an issue comment body.
-       //
-       //     assigned, unassigned
-       //       The Assigner assigned the issue to or removed the assignment from the Assignee.
-       //
-       //     labeled, unlabeled
-       //       The Actor added or removed the Label from the issue.
-       //
-       //     milestoned, demilestoned
-       //       The Actor added or removed the issue from the Milestone.
-       //
-       //     subscribed, unsubscribed
-       //       The Actor subscribed to or unsubscribed from notifications for an issue.
-       //
-       //     head_ref_deleted, head_ref_restored
-       //       The pull request’s branch was deleted or restored.
-       //
-       //    review_dismissed
-       //       The review was dismissed and `DismissedReview` will be populated below.
-       //
-       Event *string `json:"event,omitempty"`
-
-       CreatedAt *time.Time `json:"created_at,omitempty"`
-       Issue     *Issue     `json:"issue,omitempty"`
-
-       // Only present on certain events; see above.
-       Assignee        *User            `json:"assignee,omitempty"`
-       Assigner        *User            `json:"assigner,omitempty"`
-       CommitID        *string          `json:"commit_id,omitempty"`
-       Milestone       *Milestone       `json:"milestone,omitempty"`
-       Label           *Label           `json:"label,omitempty"`
-       Rename          *Rename          `json:"rename,omitempty"`
-       LockReason      *string          `json:"lock_reason,omitempty"`
-       ProjectCard     *ProjectCard     `json:"project_card,omitempty"`
-       DismissedReview *DismissedReview `json:"dismissed_review,omitempty"`
-}
-
-// DismissedReview represents details for 'dismissed_review' events.
-type DismissedReview struct {
-       // State represents the state of the dismissed review.
-       // Possible values are: "commented", "approved", and "changes_requested".
-       State             *string `json:"state,omitempty"`
-       ReviewID          *int64  `json:"review_id,omitempty"`
-       DismissalMessage  *string `json:"dismissal_message,omitempty"`
-       DismissalCommitID *string `json:"dismissal_commit_id,omitempty"`
-}
-
-// ListIssueEvents lists events for the specified issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/events/#list-issue-events
-func (s *IssuesService) ListIssueEvents(ctx context.Context, owner, repo string, number int, opts *ListOptions) ([]*IssueEvent, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%v/events", owner, repo, number)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       acceptHeaders := []string{mediaTypeLockReasonPreview, mediaTypeProjectCardDetailsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var events []*IssueEvent
-       resp, err := s.client.Do(ctx, req, &events)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return events, resp, nil
-}
-
-// ListRepositoryEvents lists events for the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/events/#list-issue-events-for-a-repository
-func (s *IssuesService) ListRepositoryEvents(ctx context.Context, owner, repo string, opts *ListOptions) ([]*IssueEvent, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/events", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var events []*IssueEvent
-       resp, err := s.client.Do(ctx, req, &events)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return events, resp, nil
-}
-
-// GetEvent returns the specified issue event.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/events/#get-an-issue-event
-func (s *IssuesService) GetEvent(ctx context.Context, owner, repo string, id int64) (*IssueEvent, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/events/%v", owner, repo, id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       event := new(IssueEvent)
-       resp, err := s.client.Do(ctx, req, event)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return event, resp, nil
-}
-
-// Rename contains details for 'renamed' events.
-type Rename struct {
-       From *string `json:"from,omitempty"`
-       To   *string `json:"to,omitempty"`
-}
-
-func (r Rename) String() string {
-       return Stringify(r)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/issues_labels.go b/vendor/github.com/google/go-github/v32/github/issues_labels.go
deleted file mode 100644 (file)
index 12a8741..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// Label represents a GitHub label on an Issue
-type Label struct {
-       ID          *int64  `json:"id,omitempty"`
-       URL         *string `json:"url,omitempty"`
-       Name        *string `json:"name,omitempty"`
-       Color       *string `json:"color,omitempty"`
-       Description *string `json:"description,omitempty"`
-       Default     *bool   `json:"default,omitempty"`
-       NodeID      *string `json:"node_id,omitempty"`
-}
-
-func (l Label) String() string {
-       return Stringify(l)
-}
-
-// ListLabels lists all labels for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#list-labels-for-a-repository
-func (s *IssuesService) ListLabels(ctx context.Context, owner string, repo string, opts *ListOptions) ([]*Label, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/labels", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var labels []*Label
-       resp, err := s.client.Do(ctx, req, &labels)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return labels, resp, nil
-}
-
-// GetLabel gets a single label.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#get-a-label
-func (s *IssuesService) GetLabel(ctx context.Context, owner string, repo string, name string) (*Label, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       label := new(Label)
-       resp, err := s.client.Do(ctx, req, label)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return label, resp, nil
-}
-
-// CreateLabel creates a new label on the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#create-a-label
-func (s *IssuesService) CreateLabel(ctx context.Context, owner string, repo string, label *Label) (*Label, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/labels", owner, repo)
-       req, err := s.client.NewRequest("POST", u, label)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       l := new(Label)
-       resp, err := s.client.Do(ctx, req, l)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return l, resp, nil
-}
-
-// EditLabel edits a label.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#update-a-label
-func (s *IssuesService) EditLabel(ctx context.Context, owner string, repo string, name string, label *Label) (*Label, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name)
-       req, err := s.client.NewRequest("PATCH", u, label)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       l := new(Label)
-       resp, err := s.client.Do(ctx, req, l)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return l, resp, nil
-}
-
-// DeleteLabel deletes a label.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#delete-a-label
-func (s *IssuesService) DeleteLabel(ctx context.Context, owner string, repo string, name string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListLabelsByIssue lists all labels for an issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#list-labels-for-an-issue
-func (s *IssuesService) ListLabelsByIssue(ctx context.Context, owner string, repo string, number int, opts *ListOptions) ([]*Label, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var labels []*Label
-       resp, err := s.client.Do(ctx, req, &labels)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return labels, resp, nil
-}
-
-// AddLabelsToIssue adds labels to an issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue
-func (s *IssuesService) AddLabelsToIssue(ctx context.Context, owner string, repo string, number int, labels []string) ([]*Label, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number)
-       req, err := s.client.NewRequest("POST", u, labels)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var l []*Label
-       resp, err := s.client.Do(ctx, req, &l)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return l, resp, nil
-}
-
-// RemoveLabelForIssue removes a label for an issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue
-func (s *IssuesService) RemoveLabelForIssue(ctx context.Context, owner string, repo string, number int, label string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%d/labels/%v", owner, repo, number, label)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ReplaceLabelsForIssue replaces all labels for an issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#set-labels-for-an-issue
-func (s *IssuesService) ReplaceLabelsForIssue(ctx context.Context, owner string, repo string, number int, labels []string) ([]*Label, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number)
-       req, err := s.client.NewRequest("PUT", u, labels)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var l []*Label
-       resp, err := s.client.Do(ctx, req, &l)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return l, resp, nil
-}
-
-// RemoveLabelsForIssue removes all labels for an issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#remove-all-labels-from-an-issue
-func (s *IssuesService) RemoveLabelsForIssue(ctx context.Context, owner string, repo string, number int) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListLabelsForMilestone lists labels for every issue in a milestone.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/labels/#list-labels-for-issues-in-a-milestone
-func (s *IssuesService) ListLabelsForMilestone(ctx context.Context, owner string, repo string, number int, opts *ListOptions) ([]*Label, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/milestones/%d/labels", owner, repo, number)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var labels []*Label
-       resp, err := s.client.Do(ctx, req, &labels)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return labels, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/issues_milestones.go b/vendor/github.com/google/go-github/v32/github/issues_milestones.go
deleted file mode 100644 (file)
index ed3a7c5..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright 2014 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// Milestone represents a GitHub repository milestone.
-type Milestone struct {
-       URL          *string    `json:"url,omitempty"`
-       HTMLURL      *string    `json:"html_url,omitempty"`
-       LabelsURL    *string    `json:"labels_url,omitempty"`
-       ID           *int64     `json:"id,omitempty"`
-       Number       *int       `json:"number,omitempty"`
-       State        *string    `json:"state,omitempty"`
-       Title        *string    `json:"title,omitempty"`
-       Description  *string    `json:"description,omitempty"`
-       Creator      *User      `json:"creator,omitempty"`
-       OpenIssues   *int       `json:"open_issues,omitempty"`
-       ClosedIssues *int       `json:"closed_issues,omitempty"`
-       CreatedAt    *time.Time `json:"created_at,omitempty"`
-       UpdatedAt    *time.Time `json:"updated_at,omitempty"`
-       ClosedAt     *time.Time `json:"closed_at,omitempty"`
-       DueOn        *time.Time `json:"due_on,omitempty"`
-       NodeID       *string    `json:"node_id,omitempty"`
-}
-
-func (m Milestone) String() string {
-       return Stringify(m)
-}
-
-// MilestoneListOptions specifies the optional parameters to the
-// IssuesService.ListMilestones method.
-type MilestoneListOptions struct {
-       // State filters milestones based on their state. Possible values are:
-       // open, closed, all. Default is "open".
-       State string `url:"state,omitempty"`
-
-       // Sort specifies how to sort milestones. Possible values are: due_on, completeness.
-       // Default value is "due_on".
-       Sort string `url:"sort,omitempty"`
-
-       // Direction in which to sort milestones. Possible values are: asc, desc.
-       // Default is "asc".
-       Direction string `url:"direction,omitempty"`
-
-       ListOptions
-}
-
-// ListMilestones lists all milestones for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/milestones/#list-milestones
-func (s *IssuesService) ListMilestones(ctx context.Context, owner string, repo string, opts *MilestoneListOptions) ([]*Milestone, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/milestones", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var milestones []*Milestone
-       resp, err := s.client.Do(ctx, req, &milestones)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return milestones, resp, nil
-}
-
-// GetMilestone gets a single milestone.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/milestones/#get-a-milestone
-func (s *IssuesService) GetMilestone(ctx context.Context, owner string, repo string, number int) (*Milestone, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       milestone := new(Milestone)
-       resp, err := s.client.Do(ctx, req, milestone)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return milestone, resp, nil
-}
-
-// CreateMilestone creates a new milestone on the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/milestones/#create-a-milestone
-func (s *IssuesService) CreateMilestone(ctx context.Context, owner string, repo string, milestone *Milestone) (*Milestone, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/milestones", owner, repo)
-       req, err := s.client.NewRequest("POST", u, milestone)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       m := new(Milestone)
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// EditMilestone edits a milestone.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/milestones/#update-a-milestone
-func (s *IssuesService) EditMilestone(ctx context.Context, owner string, repo string, number int, milestone *Milestone) (*Milestone, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number)
-       req, err := s.client.NewRequest("PATCH", u, milestone)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       m := new(Milestone)
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// DeleteMilestone deletes a milestone.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/milestones/#delete-a-milestone
-func (s *IssuesService) DeleteMilestone(ctx context.Context, owner string, repo string, number int) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/issues_timeline.go b/vendor/github.com/google/go-github/v32/github/issues_timeline.go
deleted file mode 100644 (file)
index 6a88af8..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "strings"
-       "time"
-)
-
-// Timeline represents an event that occurred around an Issue or Pull Request.
-//
-// It is similar to an IssueEvent but may contain more information.
-// GitHub API docs: https://developer.github.com/v3/issues/timeline/
-type Timeline struct {
-       ID        *int64  `json:"id,omitempty"`
-       URL       *string `json:"url,omitempty"`
-       CommitURL *string `json:"commit_url,omitempty"`
-
-       // The User object that generated the event.
-       Actor *User `json:"actor,omitempty"`
-
-       // Event identifies the actual type of Event that occurred. Possible values
-       // are:
-       //
-       //     assigned
-       //       The issue was assigned to the assignee.
-       //
-       //     closed
-       //       The issue was closed by the actor. When the commit_id is present, it
-       //       identifies the commit that closed the issue using "closes / fixes #NN"
-       //       syntax.
-       //
-       //     commented
-       //       A comment was added to the issue.
-       //
-       //     committed
-       //       A commit was added to the pull request's 'HEAD' branch. Only provided
-       //       for pull requests.
-       //
-       //     cross-referenced
-       //       The issue was referenced from another issue. The 'source' attribute
-       //       contains the 'id', 'actor', and 'url' of the reference's source.
-       //
-       //     demilestoned
-       //       The issue was removed from a milestone.
-       //
-       //     head_ref_deleted
-       //       The pull request's branch was deleted.
-       //
-       //     head_ref_restored
-       //       The pull request's branch was restored.
-       //
-       //     labeled
-       //       A label was added to the issue.
-       //
-       //     locked
-       //       The issue was locked by the actor.
-       //
-       //     mentioned
-       //       The actor was @mentioned in an issue body.
-       //
-       //     merged
-       //       The issue was merged by the actor. The 'commit_id' attribute is the
-       //       SHA1 of the HEAD commit that was merged.
-       //
-       //     milestoned
-       //       The issue was added to a milestone.
-       //
-       //     referenced
-       //       The issue was referenced from a commit message. The 'commit_id'
-       //       attribute is the commit SHA1 of where that happened.
-       //
-       //     renamed
-       //       The issue title was changed.
-       //
-       //     reopened
-       //       The issue was reopened by the actor.
-       //
-       //     subscribed
-       //       The actor subscribed to receive notifications for an issue.
-       //
-       //     unassigned
-       //       The assignee was unassigned from the issue.
-       //
-       //     unlabeled
-       //       A label was removed from the issue.
-       //
-       //     unlocked
-       //       The issue was unlocked by the actor.
-       //
-       //     unsubscribed
-       //       The actor unsubscribed to stop receiving notifications for an issue.
-       //
-       Event *string `json:"event,omitempty"`
-
-       // The string SHA of a commit that referenced this Issue or Pull Request.
-       CommitID *string `json:"commit_id,omitempty"`
-       // The timestamp indicating when the event occurred.
-       CreatedAt *time.Time `json:"created_at,omitempty"`
-       // The Label object including `name` and `color` attributes. Only provided for
-       // 'labeled' and 'unlabeled' events.
-       Label *Label `json:"label,omitempty"`
-       // The User object which was assigned to (or unassigned from) this Issue or
-       // Pull Request. Only provided for 'assigned' and 'unassigned' events.
-       Assignee *User `json:"assignee,omitempty"`
-       // The Milestone object including a 'title' attribute.
-       // Only provided for 'milestoned' and 'demilestoned' events.
-       Milestone *Milestone `json:"milestone,omitempty"`
-       // The 'id', 'actor', and 'url' for the source of a reference from another issue.
-       // Only provided for 'cross-referenced' events.
-       Source *Source `json:"source,omitempty"`
-       // An object containing rename details including 'from' and 'to' attributes.
-       // Only provided for 'renamed' events.
-       Rename      *Rename      `json:"rename,omitempty"`
-       ProjectCard *ProjectCard `json:"project_card,omitempty"`
-}
-
-// Source represents a reference's source.
-type Source struct {
-       ID    *int64  `json:"id,omitempty"`
-       URL   *string `json:"url,omitempty"`
-       Actor *User   `json:"actor,omitempty"`
-       Type  *string `json:"type,omitempty"`
-       Issue *Issue  `json:"issue,omitempty"`
-}
-
-// ListIssueTimeline lists events for the specified issue.
-//
-// GitHub API docs: https://developer.github.com/v3/issues/timeline/#list-timeline-events-for-an-issue
-func (s *IssuesService) ListIssueTimeline(ctx context.Context, owner, repo string, number int, opts *ListOptions) ([]*Timeline, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%v/timeline", owner, repo, number)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeTimelinePreview, mediaTypeProjectCardDetailsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var events []*Timeline
-       resp, err := s.client.Do(ctx, req, &events)
-       return events, resp, err
-}
diff --git a/vendor/github.com/google/go-github/v32/github/licenses.go b/vendor/github.com/google/go-github/v32/github/licenses.go
deleted file mode 100644 (file)
index 55885f2..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// LicensesService handles communication with the license related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/licenses/
-type LicensesService service
-
-// RepositoryLicense represents the license for a repository.
-type RepositoryLicense struct {
-       Name *string `json:"name,omitempty"`
-       Path *string `json:"path,omitempty"`
-
-       SHA         *string  `json:"sha,omitempty"`
-       Size        *int     `json:"size,omitempty"`
-       URL         *string  `json:"url,omitempty"`
-       HTMLURL     *string  `json:"html_url,omitempty"`
-       GitURL      *string  `json:"git_url,omitempty"`
-       DownloadURL *string  `json:"download_url,omitempty"`
-       Type        *string  `json:"type,omitempty"`
-       Content     *string  `json:"content,omitempty"`
-       Encoding    *string  `json:"encoding,omitempty"`
-       License     *License `json:"license,omitempty"`
-}
-
-func (l RepositoryLicense) String() string {
-       return Stringify(l)
-}
-
-// License represents an open source license.
-type License struct {
-       Key  *string `json:"key,omitempty"`
-       Name *string `json:"name,omitempty"`
-       URL  *string `json:"url,omitempty"`
-
-       SPDXID         *string   `json:"spdx_id,omitempty"`
-       HTMLURL        *string   `json:"html_url,omitempty"`
-       Featured       *bool     `json:"featured,omitempty"`
-       Description    *string   `json:"description,omitempty"`
-       Implementation *string   `json:"implementation,omitempty"`
-       Permissions    *[]string `json:"permissions,omitempty"`
-       Conditions     *[]string `json:"conditions,omitempty"`
-       Limitations    *[]string `json:"limitations,omitempty"`
-       Body           *string   `json:"body,omitempty"`
-}
-
-func (l License) String() string {
-       return Stringify(l)
-}
-
-// List popular open source licenses.
-//
-// GitHub API docs: https://developer.github.com/v3/licenses/#list-all-licenses
-func (s *LicensesService) List(ctx context.Context) ([]*License, *Response, error) {
-       req, err := s.client.NewRequest("GET", "licenses", nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var licenses []*License
-       resp, err := s.client.Do(ctx, req, &licenses)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return licenses, resp, nil
-}
-
-// Get extended metadata for one license.
-//
-// GitHub API docs: https://developer.github.com/v3/licenses/#get-a-license
-func (s *LicensesService) Get(ctx context.Context, licenseName string) (*License, *Response, error) {
-       u := fmt.Sprintf("licenses/%s", licenseName)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       license := new(License)
-       resp, err := s.client.Do(ctx, req, license)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return license, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/messages.go b/vendor/github.com/google/go-github/v32/github/messages.go
deleted file mode 100644 (file)
index 2c1c7a7..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file provides functions for validating payloads from GitHub Webhooks.
-// GitHub API docs: https://developer.github.com/webhooks/securing/#validating-payloads-from-github
-
-package github
-
-import (
-       "crypto/hmac"
-       "crypto/sha1"
-       "crypto/sha256"
-       "crypto/sha512"
-       "encoding/hex"
-       "encoding/json"
-       "errors"
-       "fmt"
-       "hash"
-       "io/ioutil"
-       "net/http"
-       "net/url"
-       "strings"
-)
-
-const (
-       // sha1Prefix is the prefix used by GitHub before the HMAC hexdigest.
-       sha1Prefix = "sha1"
-       // sha256Prefix and sha512Prefix are provided for future compatibility.
-       sha256Prefix = "sha256"
-       sha512Prefix = "sha512"
-       // signatureHeader is the GitHub header key used to pass the HMAC hexdigest.
-       signatureHeader = "X-Hub-Signature"
-       // eventTypeHeader is the GitHub header key used to pass the event type.
-       eventTypeHeader = "X-Github-Event"
-       // deliveryIDHeader is the GitHub header key used to pass the unique ID for the webhook event.
-       deliveryIDHeader = "X-Github-Delivery"
-)
-
-var (
-       // eventTypeMapping maps webhooks types to their corresponding go-github struct types.
-       eventTypeMapping = map[string]string{
-               "check_run":                      "CheckRunEvent",
-               "check_suite":                    "CheckSuiteEvent",
-               "commit_comment":                 "CommitCommentEvent",
-               "create":                         "CreateEvent",
-               "delete":                         "DeleteEvent",
-               "deploy_key":                     "DeployKeyEvent",
-               "deployment":                     "DeploymentEvent",
-               "deployment_status":              "DeploymentStatusEvent",
-               "fork":                           "ForkEvent",
-               "github_app_authorization":       "GitHubAppAuthorizationEvent",
-               "gollum":                         "GollumEvent",
-               "installation":                   "InstallationEvent",
-               "installation_repositories":      "InstallationRepositoriesEvent",
-               "issue_comment":                  "IssueCommentEvent",
-               "issues":                         "IssuesEvent",
-               "label":                          "LabelEvent",
-               "marketplace_purchase":           "MarketplacePurchaseEvent",
-               "member":                         "MemberEvent",
-               "membership":                     "MembershipEvent",
-               "meta":                           "MetaEvent",
-               "milestone":                      "MilestoneEvent",
-               "organization":                   "OrganizationEvent",
-               "org_block":                      "OrgBlockEvent",
-               "package":                        "PackageEvent",
-               "page_build":                     "PageBuildEvent",
-               "ping":                           "PingEvent",
-               "project":                        "ProjectEvent",
-               "project_card":                   "ProjectCardEvent",
-               "project_column":                 "ProjectColumnEvent",
-               "public":                         "PublicEvent",
-               "pull_request_review":            "PullRequestReviewEvent",
-               "pull_request_review_comment":    "PullRequestReviewCommentEvent",
-               "pull_request":                   "PullRequestEvent",
-               "push":                           "PushEvent",
-               "repository":                     "RepositoryEvent",
-               "repository_dispatch":            "RepositoryDispatchEvent",
-               "repository_vulnerability_alert": "RepositoryVulnerabilityAlertEvent",
-               "release":                        "ReleaseEvent",
-               "star":                           "StarEvent",
-               "status":                         "StatusEvent",
-               "team":                           "TeamEvent",
-               "team_add":                       "TeamAddEvent",
-               "user":                           "UserEvent",
-               "watch":                          "WatchEvent",
-       }
-)
-
-// genMAC generates the HMAC signature for a message provided the secret key
-// and hashFunc.
-func genMAC(message, key []byte, hashFunc func() hash.Hash) []byte {
-       mac := hmac.New(hashFunc, key)
-       mac.Write(message)
-       return mac.Sum(nil)
-}
-
-// checkMAC reports whether messageMAC is a valid HMAC tag for message.
-func checkMAC(message, messageMAC, key []byte, hashFunc func() hash.Hash) bool {
-       expectedMAC := genMAC(message, key, hashFunc)
-       return hmac.Equal(messageMAC, expectedMAC)
-}
-
-// messageMAC returns the hex-decoded HMAC tag from the signature and its
-// corresponding hash function.
-func messageMAC(signature string) ([]byte, func() hash.Hash, error) {
-       if signature == "" {
-               return nil, nil, errors.New("missing signature")
-       }
-       sigParts := strings.SplitN(signature, "=", 2)
-       if len(sigParts) != 2 {
-               return nil, nil, fmt.Errorf("error parsing signature %q", signature)
-       }
-
-       var hashFunc func() hash.Hash
-       switch sigParts[0] {
-       case sha1Prefix:
-               hashFunc = sha1.New
-       case sha256Prefix:
-               hashFunc = sha256.New
-       case sha512Prefix:
-               hashFunc = sha512.New
-       default:
-               return nil, nil, fmt.Errorf("unknown hash type prefix: %q", sigParts[0])
-       }
-
-       buf, err := hex.DecodeString(sigParts[1])
-       if err != nil {
-               return nil, nil, fmt.Errorf("error decoding signature %q: %v", signature, err)
-       }
-       return buf, hashFunc, nil
-}
-
-// ValidatePayload validates an incoming GitHub Webhook event request
-// and returns the (JSON) payload.
-// The Content-Type header of the payload can be "application/json" or "application/x-www-form-urlencoded".
-// If the Content-Type is neither then an error is returned.
-// secretToken is the GitHub Webhook secret token.
-// If your webhook does not contain a secret token, you can pass nil or an empty slice.
-// This is intended for local development purposes only and all webhooks should ideally set up a secret token.
-//
-// Example usage:
-//
-//     func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) {
-//       payload, err := github.ValidatePayload(r, s.webhookSecretKey)
-//       if err != nil { ... }
-//       // Process payload...
-//     }
-//
-func ValidatePayload(r *http.Request, secretToken []byte) (payload []byte, err error) {
-       var body []byte // Raw body that GitHub uses to calculate the signature.
-
-       switch ct := r.Header.Get("Content-Type"); ct {
-       case "application/json":
-               var err error
-               if body, err = ioutil.ReadAll(r.Body); err != nil {
-                       return nil, err
-               }
-
-               // If the content type is application/json,
-               // the JSON payload is just the original body.
-               payload = body
-
-       case "application/x-www-form-urlencoded":
-               // payloadFormParam is the name of the form parameter that the JSON payload
-               // will be in if a webhook has its content type set to application/x-www-form-urlencoded.
-               const payloadFormParam = "payload"
-
-               var err error
-               if body, err = ioutil.ReadAll(r.Body); err != nil {
-                       return nil, err
-               }
-
-               // If the content type is application/x-www-form-urlencoded,
-               // the JSON payload will be under the "payload" form param.
-               form, err := url.ParseQuery(string(body))
-               if err != nil {
-                       return nil, err
-               }
-               payload = []byte(form.Get(payloadFormParam))
-
-       default:
-               return nil, fmt.Errorf("Webhook request has unsupported Content-Type %q", ct)
-       }
-
-       // Only validate the signature if a secret token exists. This is intended for
-       // local development only and all webhooks should ideally set up a secret token.
-       if len(secretToken) > 0 {
-               sig := r.Header.Get(signatureHeader)
-               if err := ValidateSignature(sig, body, secretToken); err != nil {
-                       return nil, err
-               }
-       }
-
-       return payload, nil
-}
-
-// ValidateSignature validates the signature for the given payload.
-// signature is the GitHub hash signature delivered in the X-Hub-Signature header.
-// payload is the JSON payload sent by GitHub Webhooks.
-// secretToken is the GitHub Webhook secret token.
-//
-// GitHub API docs: https://developer.github.com/webhooks/securing/#validating-payloads-from-github
-func ValidateSignature(signature string, payload, secretToken []byte) error {
-       messageMAC, hashFunc, err := messageMAC(signature)
-       if err != nil {
-               return err
-       }
-       if !checkMAC(payload, messageMAC, secretToken, hashFunc) {
-               return errors.New("payload signature check failed")
-       }
-       return nil
-}
-
-// WebHookType returns the event type of webhook request r.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/hooks/#webhook-headers
-func WebHookType(r *http.Request) string {
-       return r.Header.Get(eventTypeHeader)
-}
-
-// DeliveryID returns the unique delivery ID of webhook request r.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/hooks/#webhook-headers
-func DeliveryID(r *http.Request) string {
-       return r.Header.Get(deliveryIDHeader)
-}
-
-// ParseWebHook parses the event payload. For recognized event types, a
-// value of the corresponding struct type will be returned (as returned
-// by Event.ParsePayload()). An error will be returned for unrecognized event
-// types.
-//
-// Example usage:
-//
-//     func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) {
-//       payload, err := github.ValidatePayload(r, s.webhookSecretKey)
-//       if err != nil { ... }
-//       event, err := github.ParseWebHook(github.WebHookType(r), payload)
-//       if err != nil { ... }
-//       switch event := event.(type) {
-//       case *github.CommitCommentEvent:
-//           processCommitCommentEvent(event)
-//       case *github.CreateEvent:
-//           processCreateEvent(event)
-//       ...
-//       }
-//     }
-//
-func ParseWebHook(messageType string, payload []byte) (interface{}, error) {
-       eventType, ok := eventTypeMapping[messageType]
-       if !ok {
-               return nil, fmt.Errorf("unknown X-Github-Event in message: %v", messageType)
-       }
-
-       event := Event{
-               Type:       &eventType,
-               RawPayload: (*json.RawMessage)(&payload),
-       }
-       return event.ParsePayload()
-}
diff --git a/vendor/github.com/google/go-github/v32/github/migrations.go b/vendor/github.com/google/go-github/v32/github/migrations.go
deleted file mode 100644 (file)
index fae0c6e..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "errors"
-       "fmt"
-       "net/http"
-       "strings"
-)
-
-// MigrationService provides access to the migration related functions
-// in the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/migration/
-type MigrationService service
-
-// Migration represents a GitHub migration (archival).
-type Migration struct {
-       ID   *int64  `json:"id,omitempty"`
-       GUID *string `json:"guid,omitempty"`
-       // State is the current state of a migration.
-       // Possible values are:
-       //     "pending" which means the migration hasn't started yet,
-       //     "exporting" which means the migration is in progress,
-       //     "exported" which means the migration finished successfully, or
-       //     "failed" which means the migration failed.
-       State *string `json:"state,omitempty"`
-       // LockRepositories indicates whether repositories are locked (to prevent
-       // manipulation) while migrating data.
-       LockRepositories *bool `json:"lock_repositories,omitempty"`
-       // ExcludeAttachments indicates whether attachments should be excluded from
-       // the migration (to reduce migration archive file size).
-       ExcludeAttachments *bool         `json:"exclude_attachments,omitempty"`
-       URL                *string       `json:"url,omitempty"`
-       CreatedAt          *string       `json:"created_at,omitempty"`
-       UpdatedAt          *string       `json:"updated_at,omitempty"`
-       Repositories       []*Repository `json:"repositories,omitempty"`
-}
-
-func (m Migration) String() string {
-       return Stringify(m)
-}
-
-// MigrationOptions specifies the optional parameters to Migration methods.
-type MigrationOptions struct {
-       // LockRepositories indicates whether repositories should be locked (to prevent
-       // manipulation) while migrating data.
-       LockRepositories bool
-
-       // ExcludeAttachments indicates whether attachments should be excluded from
-       // the migration (to reduce migration archive file size).
-       ExcludeAttachments bool
-}
-
-// startMigration represents the body of a StartMigration request.
-type startMigration struct {
-       // Repositories is a slice of repository names to migrate.
-       Repositories []string `json:"repositories,omitempty"`
-
-       // LockRepositories indicates whether repositories should be locked (to prevent
-       // manipulation) while migrating data.
-       LockRepositories *bool `json:"lock_repositories,omitempty"`
-
-       // ExcludeAttachments indicates whether attachments should be excluded from
-       // the migration (to reduce migration archive file size).
-       ExcludeAttachments *bool `json:"exclude_attachments,omitempty"`
-}
-
-// StartMigration starts the generation of a migration archive.
-// repos is a slice of repository names to migrate.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/orgs/#start-an-organization-migration
-func (s *MigrationService) StartMigration(ctx context.Context, org string, repos []string, opts *MigrationOptions) (*Migration, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/migrations", org)
-
-       body := &startMigration{Repositories: repos}
-       if opts != nil {
-               body.LockRepositories = Bool(opts.LockRepositories)
-               body.ExcludeAttachments = Bool(opts.ExcludeAttachments)
-       }
-
-       req, err := s.client.NewRequest("POST", u, body)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       m := &Migration{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// ListMigrations lists the most recent migrations.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/orgs/#list-organization-migrations
-func (s *MigrationService) ListMigrations(ctx context.Context, org string, opts *ListOptions) ([]*Migration, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/migrations", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       var m []*Migration
-       resp, err := s.client.Do(ctx, req, &m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// MigrationStatus gets the status of a specific migration archive.
-// id is the migration ID.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/orgs/#get-an-organization-migration-status
-func (s *MigrationService) MigrationStatus(ctx context.Context, org string, id int64) (*Migration, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/migrations/%v", org, id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       m := &Migration{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// MigrationArchiveURL fetches a migration archive URL.
-// id is the migration ID.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/orgs/#download-an-organization-migration-archive
-func (s *MigrationService) MigrationArchiveURL(ctx context.Context, org string, id int64) (url string, err error) {
-       u := fmt.Sprintf("orgs/%v/migrations/%v/archive", org, id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return "", err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       s.client.clientMu.Lock()
-       defer s.client.clientMu.Unlock()
-
-       // Disable the redirect mechanism because AWS fails if the GitHub auth token is provided.
-       var loc string
-       saveRedirect := s.client.client.CheckRedirect
-       s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
-               loc = req.URL.String()
-               return errors.New("disable redirect")
-       }
-       defer func() { s.client.client.CheckRedirect = saveRedirect }()
-
-       _, err = s.client.Do(ctx, req, nil) // expect error from disable redirect
-       if err == nil {
-               return "", errors.New("expected redirect, none provided")
-       }
-       if !strings.Contains(err.Error(), "disable redirect") {
-               return "", err
-       }
-       return loc, nil
-}
-
-// DeleteMigration deletes a previous migration archive.
-// id is the migration ID.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/orgs/#delete-an-organization-migration-archive
-func (s *MigrationService) DeleteMigration(ctx context.Context, org string, id int64) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/migrations/%v/archive", org, id)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// UnlockRepo unlocks a repository that was locked for migration.
-// id is the migration ID.
-// You should unlock each migrated repository and delete them when the migration
-// is complete and you no longer need the source data.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/orgs/#unlock-an-organization-repository
-func (s *MigrationService) UnlockRepo(ctx context.Context, org string, id int64, repo string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/migrations/%v/repos/%v/lock", org, id, repo)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/migrations_source_import.go b/vendor/github.com/google/go-github/v32/github/migrations_source_import.go
deleted file mode 100644 (file)
index 7a46d0e..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// Import represents a repository import request.
-type Import struct {
-       // The URL of the originating repository.
-       VCSURL *string `json:"vcs_url,omitempty"`
-       // The originating VCS type. Can be one of 'subversion', 'git',
-       // 'mercurial', or 'tfvc'. Without this parameter, the import job will
-       // take additional time to detect the VCS type before beginning the
-       // import. This detection step will be reflected in the response.
-       VCS *string `json:"vcs,omitempty"`
-       // VCSUsername and VCSPassword are only used for StartImport calls that
-       // are importing a password-protected repository.
-       VCSUsername *string `json:"vcs_username,omitempty"`
-       VCSPassword *string `json:"vcs_password,omitempty"`
-       // For a tfvc import, the name of the project that is being imported.
-       TFVCProject *string `json:"tfvc_project,omitempty"`
-
-       // LFS related fields that may be preset in the Import Progress response
-
-       // Describes whether the import has been opted in or out of using Git
-       // LFS. The value can be 'opt_in', 'opt_out', or 'undecided' if no
-       // action has been taken.
-       UseLFS *string `json:"use_lfs,omitempty"`
-       // Describes whether files larger than 100MB were found during the
-       // importing step.
-       HasLargeFiles *bool `json:"has_large_files,omitempty"`
-       // The total size in gigabytes of files larger than 100MB found in the
-       // originating repository.
-       LargeFilesSize *int `json:"large_files_size,omitempty"`
-       // The total number of files larger than 100MB found in the originating
-       // repository. To see a list of these files, call LargeFiles.
-       LargeFilesCount *int `json:"large_files_count,omitempty"`
-
-       // Identifies the current status of an import. An import that does not
-       // have errors will progress through these steps:
-       //
-       //     detecting - the "detection" step of the import is in progress
-       //         because the request did not include a VCS parameter. The
-       //         import is identifying the type of source control present at
-       //         the URL.
-       //     importing - the "raw" step of the import is in progress. This is
-       //         where commit data is fetched from the original repository.
-       //         The import progress response will include CommitCount (the
-       //         total number of raw commits that will be imported) and
-       //         Percent (0 - 100, the current progress through the import).
-       //     mapping - the "rewrite" step of the import is in progress. This
-       //         is where SVN branches are converted to Git branches, and
-       //         where author updates are applied. The import progress
-       //         response does not include progress information.
-       //     pushing - the "push" step of the import is in progress. This is
-       //         where the importer updates the repository on GitHub. The
-       //         import progress response will include PushPercent, which is
-       //         the percent value reported by git push when it is "Writing
-       //         objects".
-       //     complete - the import is complete, and the repository is ready
-       //         on GitHub.
-       //
-       // If there are problems, you will see one of these in the status field:
-       //
-       //     auth_failed - the import requires authentication in order to
-       //         connect to the original repository. Make an UpdateImport
-       //         request, and include VCSUsername and VCSPassword.
-       //     error - the import encountered an error. The import progress
-       //         response will include the FailedStep and an error message.
-       //         Contact GitHub support for more information.
-       //     detection_needs_auth - the importer requires authentication for
-       //         the originating repository to continue detection. Make an
-       //         UpdatImport request, and include VCSUsername and
-       //         VCSPassword.
-       //     detection_found_nothing - the importer didn't recognize any
-       //         source control at the URL.
-       //     detection_found_multiple - the importer found several projects
-       //         or repositories at the provided URL. When this is the case,
-       //         the Import Progress response will also include a
-       //         ProjectChoices field with the possible project choices as
-       //         values. Make an UpdateImport request, and include VCS and
-       //         (if applicable) TFVCProject.
-       Status        *string `json:"status,omitempty"`
-       CommitCount   *int    `json:"commit_count,omitempty"`
-       StatusText    *string `json:"status_text,omitempty"`
-       AuthorsCount  *int    `json:"authors_count,omitempty"`
-       Percent       *int    `json:"percent,omitempty"`
-       PushPercent   *int    `json:"push_percent,omitempty"`
-       URL           *string `json:"url,omitempty"`
-       HTMLURL       *string `json:"html_url,omitempty"`
-       AuthorsURL    *string `json:"authors_url,omitempty"`
-       RepositoryURL *string `json:"repository_url,omitempty"`
-       Message       *string `json:"message,omitempty"`
-       FailedStep    *string `json:"failed_step,omitempty"`
-
-       // Human readable display name, provided when the Import appears as
-       // part of ProjectChoices.
-       HumanName *string `json:"human_name,omitempty"`
-
-       // When the importer finds several projects or repositories at the
-       // provided URLs, this will identify the available choices. Call
-       // UpdateImport with the selected Import value.
-       ProjectChoices []*Import `json:"project_choices,omitempty"`
-}
-
-func (i Import) String() string {
-       return Stringify(i)
-}
-
-// SourceImportAuthor identifies an author imported from a source repository.
-//
-// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-commit-authors
-type SourceImportAuthor struct {
-       ID         *int64  `json:"id,omitempty"`
-       RemoteID   *string `json:"remote_id,omitempty"`
-       RemoteName *string `json:"remote_name,omitempty"`
-       Email      *string `json:"email,omitempty"`
-       Name       *string `json:"name,omitempty"`
-       URL        *string `json:"url,omitempty"`
-       ImportURL  *string `json:"import_url,omitempty"`
-}
-
-func (a SourceImportAuthor) String() string {
-       return Stringify(a)
-}
-
-// LargeFile identifies a file larger than 100MB found during a repository import.
-//
-// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-large-files
-type LargeFile struct {
-       RefName *string `json:"ref_name,omitempty"`
-       Path    *string `json:"path,omitempty"`
-       OID     *string `json:"oid,omitempty"`
-       Size    *int    `json:"size,omitempty"`
-}
-
-func (f LargeFile) String() string {
-       return Stringify(f)
-}
-
-// StartImport initiates a repository import.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/source_imports/#start-an-import
-func (s *MigrationService) StartImport(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/import", owner, repo)
-       req, err := s.client.NewRequest("PUT", u, in)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       out := new(Import)
-       resp, err := s.client.Do(ctx, req, out)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return out, resp, nil
-}
-
-// ImportProgress queries for the status and progress of an ongoing repository import.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/source_imports/#get-an-import-status
-func (s *MigrationService) ImportProgress(ctx context.Context, owner, repo string) (*Import, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/import", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       out := new(Import)
-       resp, err := s.client.Do(ctx, req, out)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return out, resp, nil
-}
-
-// UpdateImport initiates a repository import.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/source_imports/#update-an-import
-func (s *MigrationService) UpdateImport(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/import", owner, repo)
-       req, err := s.client.NewRequest("PATCH", u, in)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       out := new(Import)
-       resp, err := s.client.Do(ctx, req, out)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return out, resp, nil
-}
-
-// CommitAuthors gets the authors mapped from the original repository.
-//
-// Each type of source control system represents authors in a different way.
-// For example, a Git commit author has a display name and an email address,
-// but a Subversion commit author just has a username. The GitHub Importer will
-// make the author information valid, but the author might not be correct. For
-// example, it will change the bare Subversion username "hubot" into something
-// like "hubot <hubot@12341234-abab-fefe-8787-fedcba987654>".
-//
-// This method and MapCommitAuthor allow you to provide correct Git author
-// information.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/source_imports/#get-commit-authors
-func (s *MigrationService) CommitAuthors(ctx context.Context, owner, repo string) ([]*SourceImportAuthor, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/import/authors", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var authors []*SourceImportAuthor
-       resp, err := s.client.Do(ctx, req, &authors)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return authors, resp, nil
-}
-
-// MapCommitAuthor updates an author's identity for the import. Your
-// application can continue updating authors any time before you push new
-// commits to the repository.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/source_imports/#map-a-commit-author
-func (s *MigrationService) MapCommitAuthor(ctx context.Context, owner, repo string, id int64, author *SourceImportAuthor) (*SourceImportAuthor, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/import/authors/%v", owner, repo, id)
-       req, err := s.client.NewRequest("PATCH", u, author)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       out := new(SourceImportAuthor)
-       resp, err := s.client.Do(ctx, req, out)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return out, resp, nil
-}
-
-// SetLFSPreference sets whether imported repositories should use Git LFS for
-// files larger than 100MB. Only the UseLFS field on the provided Import is
-// used.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/source_imports/#update-git-lfs-preference
-func (s *MigrationService) SetLFSPreference(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/import/lfs", owner, repo)
-       req, err := s.client.NewRequest("PATCH", u, in)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       out := new(Import)
-       resp, err := s.client.Do(ctx, req, out)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return out, resp, nil
-}
-
-// LargeFiles lists files larger than 100MB found during the import.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/source_imports/#get-large-files
-func (s *MigrationService) LargeFiles(ctx context.Context, owner, repo string) ([]*LargeFile, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/import/large_files", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var files []*LargeFile
-       resp, err := s.client.Do(ctx, req, &files)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return files, resp, nil
-}
-
-// CancelImport stops an import for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/source_imports/#cancel-an-import
-func (s *MigrationService) CancelImport(ctx context.Context, owner, repo string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/import", owner, repo)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/migrations_user.go b/vendor/github.com/google/go-github/v32/github/migrations_user.go
deleted file mode 100644 (file)
index d03bfe7..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright 2018 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "errors"
-       "fmt"
-       "net/http"
-)
-
-// UserMigration represents a GitHub migration (archival).
-type UserMigration struct {
-       ID   *int64  `json:"id,omitempty"`
-       GUID *string `json:"guid,omitempty"`
-       // State is the current state of a migration.
-       // Possible values are:
-       //     "pending" which means the migration hasn't started yet,
-       //     "exporting" which means the migration is in progress,
-       //     "exported" which means the migration finished successfully, or
-       //     "failed" which means the migration failed.
-       State *string `json:"state,omitempty"`
-       // LockRepositories indicates whether repositories are locked (to prevent
-       // manipulation) while migrating data.
-       LockRepositories *bool `json:"lock_repositories,omitempty"`
-       // ExcludeAttachments indicates whether attachments should be excluded from
-       // the migration (to reduce migration archive file size).
-       ExcludeAttachments *bool         `json:"exclude_attachments,omitempty"`
-       URL                *string       `json:"url,omitempty"`
-       CreatedAt          *string       `json:"created_at,omitempty"`
-       UpdatedAt          *string       `json:"updated_at,omitempty"`
-       Repositories       []*Repository `json:"repositories,omitempty"`
-}
-
-func (m UserMigration) String() string {
-       return Stringify(m)
-}
-
-// UserMigrationOptions specifies the optional parameters to Migration methods.
-type UserMigrationOptions struct {
-       // LockRepositories indicates whether repositories should be locked (to prevent
-       // manipulation) while migrating data.
-       LockRepositories bool
-
-       // ExcludeAttachments indicates whether attachments should be excluded from
-       // the migration (to reduce migration archive file size).
-       ExcludeAttachments bool
-}
-
-// startUserMigration represents the body of a StartMigration request.
-type startUserMigration struct {
-       // Repositories is a slice of repository names to migrate.
-       Repositories []string `json:"repositories,omitempty"`
-
-       // LockRepositories indicates whether repositories should be locked (to prevent
-       // manipulation) while migrating data.
-       LockRepositories *bool `json:"lock_repositories,omitempty"`
-
-       // ExcludeAttachments indicates whether attachments should be excluded from
-       // the migration (to reduce migration archive file size).
-       ExcludeAttachments *bool `json:"exclude_attachments,omitempty"`
-}
-
-// StartUserMigration starts the generation of a migration archive.
-// repos is a slice of repository names to migrate.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/users/#start-a-user-migration
-func (s *MigrationService) StartUserMigration(ctx context.Context, repos []string, opts *UserMigrationOptions) (*UserMigration, *Response, error) {
-       u := "user/migrations"
-
-       body := &startUserMigration{Repositories: repos}
-       if opts != nil {
-               body.LockRepositories = Bool(opts.LockRepositories)
-               body.ExcludeAttachments = Bool(opts.ExcludeAttachments)
-       }
-
-       req, err := s.client.NewRequest("POST", u, body)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       m := &UserMigration{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// ListUserMigrations lists the most recent migrations.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/users/#list-user-migrations
-func (s *MigrationService) ListUserMigrations(ctx context.Context) ([]*UserMigration, *Response, error) {
-       u := "user/migrations"
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       var m []*UserMigration
-       resp, err := s.client.Do(ctx, req, &m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// UserMigrationStatus gets the status of a specific migration archive.
-// id is the migration ID.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/users/#get-a-user-migration-status
-func (s *MigrationService) UserMigrationStatus(ctx context.Context, id int64) (*UserMigration, *Response, error) {
-       u := fmt.Sprintf("user/migrations/%v", id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       m := &UserMigration{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// UserMigrationArchiveURL gets the URL for a specific migration archive.
-// id is the migration ID.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/users/#download-a-user-migration-archive
-func (s *MigrationService) UserMigrationArchiveURL(ctx context.Context, id int64) (string, error) {
-       url := fmt.Sprintf("user/migrations/%v/archive", id)
-
-       req, err := s.client.NewRequest("GET", url, nil)
-       if err != nil {
-               return "", err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       m := &UserMigration{}
-
-       var loc string
-       originalRedirect := s.client.client.CheckRedirect
-       s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
-               loc = req.URL.String()
-               return http.ErrUseLastResponse
-       }
-       defer func() {
-               s.client.client.CheckRedirect = originalRedirect
-       }()
-       resp, err := s.client.Do(ctx, req, m)
-       if err == nil {
-               return "", errors.New("expected redirect, none provided")
-       }
-       loc = resp.Header.Get("Location")
-       return loc, nil
-}
-
-// DeleteUserMigration will delete a previous migration archive.
-// id is the migration ID.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/users/#delete-a-user-migration-archive
-func (s *MigrationService) DeleteUserMigration(ctx context.Context, id int64) (*Response, error) {
-       url := fmt.Sprintf("user/migrations/%v/archive", id)
-
-       req, err := s.client.NewRequest("DELETE", url, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// UnlockUserRepo will unlock a repo that was locked for migration.
-// id is migration ID.
-// You should unlock each migrated repository and delete them when the migration
-// is complete and you no longer need the source data.
-//
-// GitHub API docs: https://developer.github.com/v3/migrations/users/#unlock-a-user-repository
-func (s *MigrationService) UnlockUserRepo(ctx context.Context, id int64, repo string) (*Response, error) {
-       url := fmt.Sprintf("user/migrations/%v/repos/%v/lock", id, repo)
-
-       req, err := s.client.NewRequest("DELETE", url, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMigrationsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/misc.go b/vendor/github.com/google/go-github/v32/github/misc.go
deleted file mode 100644 (file)
index 139a0dc..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-// Copyright 2014 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "bytes"
-       "context"
-       "fmt"
-       "net/url"
-)
-
-// MarkdownOptions specifies optional parameters to the Markdown method.
-type MarkdownOptions struct {
-       // Mode identifies the rendering mode. Possible values are:
-       //   markdown - render a document as plain Markdown, just like
-       //   README files are rendered.
-       //
-       //   gfm - to render a document as user-content, e.g. like user
-       //   comments or issues are rendered. In GFM mode, hard line breaks are
-       //   always taken into account, and issue and user mentions are linked
-       //   accordingly.
-       //
-       // Default is "markdown".
-       Mode string
-
-       // Context identifies the repository context. Only taken into account
-       // when rendering as "gfm".
-       Context string
-}
-
-type markdownRequest struct {
-       Text    *string `json:"text,omitempty"`
-       Mode    *string `json:"mode,omitempty"`
-       Context *string `json:"context,omitempty"`
-}
-
-// Markdown renders an arbitrary Markdown document.
-//
-// GitHub API docs: https://developer.github.com/v3/markdown/
-func (c *Client) Markdown(ctx context.Context, text string, opts *MarkdownOptions) (string, *Response, error) {
-       request := &markdownRequest{Text: String(text)}
-       if opts != nil {
-               if opts.Mode != "" {
-                       request.Mode = String(opts.Mode)
-               }
-               if opts.Context != "" {
-                       request.Context = String(opts.Context)
-               }
-       }
-
-       req, err := c.NewRequest("POST", "markdown", request)
-       if err != nil {
-               return "", nil, err
-       }
-
-       buf := new(bytes.Buffer)
-       resp, err := c.Do(ctx, req, buf)
-       if err != nil {
-               return "", resp, err
-       }
-
-       return buf.String(), resp, nil
-}
-
-// ListEmojis returns the emojis available to use on GitHub.
-//
-// GitHub API docs: https://developer.github.com/v3/emojis/
-func (c *Client) ListEmojis(ctx context.Context) (map[string]string, *Response, error) {
-       req, err := c.NewRequest("GET", "emojis", nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var emoji map[string]string
-       resp, err := c.Do(ctx, req, &emoji)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return emoji, resp, nil
-}
-
-// CodeOfConduct represents a code of conduct.
-type CodeOfConduct struct {
-       Name *string `json:"name,omitempty"`
-       Key  *string `json:"key,omitempty"`
-       URL  *string `json:"url,omitempty"`
-       Body *string `json:"body,omitempty"`
-}
-
-func (c *CodeOfConduct) String() string {
-       return Stringify(c)
-}
-
-// ListCodesOfConduct returns all codes of conduct.
-//
-// GitHub API docs: https://developer.github.com/v3/codes_of_conduct/#list-all-codes-of-conduct
-func (c *Client) ListCodesOfConduct(ctx context.Context) ([]*CodeOfConduct, *Response, error) {
-       req, err := c.NewRequest("GET", "codes_of_conduct", nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeCodesOfConductPreview)
-
-       var cs []*CodeOfConduct
-       resp, err := c.Do(ctx, req, &cs)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return cs, resp, nil
-}
-
-// GetCodeOfConduct returns an individual code of conduct.
-//
-// https://developer.github.com/v3/codes_of_conduct/#get-an-individual-code-of-conduct
-func (c *Client) GetCodeOfConduct(ctx context.Context, key string) (*CodeOfConduct, *Response, error) {
-       u := fmt.Sprintf("codes_of_conduct/%s", key)
-       req, err := c.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeCodesOfConductPreview)
-
-       coc := new(CodeOfConduct)
-       resp, err := c.Do(ctx, req, coc)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return coc, resp, nil
-}
-
-// APIMeta represents metadata about the GitHub API.
-type APIMeta struct {
-       // An Array of IP addresses in CIDR format specifying the addresses
-       // that incoming service hooks will originate from on GitHub.com.
-       Hooks []string `json:"hooks,omitempty"`
-
-       // An Array of IP addresses in CIDR format specifying the Git servers
-       // for GitHub.com.
-       Git []string `json:"git,omitempty"`
-
-       // Whether authentication with username and password is supported.
-       // (GitHub Enterprise instances using CAS or OAuth for authentication
-       // will return false. Features like Basic Authentication with a
-       // username and password, sudo mode, and two-factor authentication are
-       // not supported on these servers.)
-       VerifiablePasswordAuthentication *bool `json:"verifiable_password_authentication,omitempty"`
-
-       // An array of IP addresses in CIDR format specifying the addresses
-       // which serve GitHub Pages websites.
-       Pages []string `json:"pages,omitempty"`
-
-       // An Array of IP addresses specifying the addresses that source imports
-       // will originate from on GitHub.com.
-       Importer []string `json:"importer,omitempty"`
-}
-
-// APIMeta returns information about GitHub.com, the service. Or, if you access
-// this endpoint on your organization’s GitHub Enterprise installation, this
-// endpoint provides information about that installation.
-//
-// GitHub API docs: https://developer.github.com/v3/meta/
-func (c *Client) APIMeta(ctx context.Context) (*APIMeta, *Response, error) {
-       req, err := c.NewRequest("GET", "meta", nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       meta := new(APIMeta)
-       resp, err := c.Do(ctx, req, meta)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return meta, resp, nil
-}
-
-// Octocat returns an ASCII art octocat with the specified message in a speech
-// bubble. If message is empty, a random zen phrase is used.
-func (c *Client) Octocat(ctx context.Context, message string) (string, *Response, error) {
-       u := "octocat"
-       if message != "" {
-               u = fmt.Sprintf("%s?s=%s", u, url.QueryEscape(message))
-       }
-
-       req, err := c.NewRequest("GET", u, nil)
-       if err != nil {
-               return "", nil, err
-       }
-
-       buf := new(bytes.Buffer)
-       resp, err := c.Do(ctx, req, buf)
-       if err != nil {
-               return "", resp, err
-       }
-
-       return buf.String(), resp, nil
-}
-
-// Zen returns a random line from The Zen of GitHub.
-//
-// see also: http://warpspire.com/posts/taste/
-func (c *Client) Zen(ctx context.Context) (string, *Response, error) {
-       req, err := c.NewRequest("GET", "zen", nil)
-       if err != nil {
-               return "", nil, err
-       }
-
-       buf := new(bytes.Buffer)
-       resp, err := c.Do(ctx, req, buf)
-       if err != nil {
-               return "", resp, err
-       }
-
-       return buf.String(), resp, nil
-}
-
-// ServiceHook represents a hook that has configuration settings, a list of
-// available events, and default events.
-type ServiceHook struct {
-       Name            *string    `json:"name,omitempty"`
-       Events          []string   `json:"events,omitempty"`
-       SupportedEvents []string   `json:"supported_events,omitempty"`
-       Schema          [][]string `json:"schema,omitempty"`
-}
-
-func (s *ServiceHook) String() string {
-       return Stringify(s)
-}
-
-// ListServiceHooks lists all of the available service hooks.
-//
-// GitHub API docs: https://developer.github.com/webhooks/#services
-func (c *Client) ListServiceHooks(ctx context.Context) ([]*ServiceHook, *Response, error) {
-       u := "hooks"
-       req, err := c.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var hooks []*ServiceHook
-       resp, err := c.Do(ctx, req, &hooks)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return hooks, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/orgs.go b/vendor/github.com/google/go-github/v32/github/orgs.go
deleted file mode 100644 (file)
index 4fd6bbd..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// OrganizationsService provides access to the organization related functions
-// in the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/
-type OrganizationsService service
-
-// Organization represents a GitHub organization account.
-type Organization struct {
-       Login                       *string    `json:"login,omitempty"`
-       ID                          *int64     `json:"id,omitempty"`
-       NodeID                      *string    `json:"node_id,omitempty"`
-       AvatarURL                   *string    `json:"avatar_url,omitempty"`
-       HTMLURL                     *string    `json:"html_url,omitempty"`
-       Name                        *string    `json:"name,omitempty"`
-       Company                     *string    `json:"company,omitempty"`
-       Blog                        *string    `json:"blog,omitempty"`
-       Location                    *string    `json:"location,omitempty"`
-       Email                       *string    `json:"email,omitempty"`
-       TwitterUsername             *string    `json:"twitter_username,omitempty"`
-       Description                 *string    `json:"description,omitempty"`
-       PublicRepos                 *int       `json:"public_repos,omitempty"`
-       PublicGists                 *int       `json:"public_gists,omitempty"`
-       Followers                   *int       `json:"followers,omitempty"`
-       Following                   *int       `json:"following,omitempty"`
-       CreatedAt                   *time.Time `json:"created_at,omitempty"`
-       UpdatedAt                   *time.Time `json:"updated_at,omitempty"`
-       TotalPrivateRepos           *int       `json:"total_private_repos,omitempty"`
-       OwnedPrivateRepos           *int       `json:"owned_private_repos,omitempty"`
-       PrivateGists                *int       `json:"private_gists,omitempty"`
-       DiskUsage                   *int       `json:"disk_usage,omitempty"`
-       Collaborators               *int       `json:"collaborators,omitempty"`
-       BillingEmail                *string    `json:"billing_email,omitempty"`
-       Type                        *string    `json:"type,omitempty"`
-       Plan                        *Plan      `json:"plan,omitempty"`
-       TwoFactorRequirementEnabled *bool      `json:"two_factor_requirement_enabled,omitempty"`
-       IsVerified                  *bool      `json:"is_verified,omitempty"`
-       HasOrganizationProjects     *bool      `json:"has_organization_projects,omitempty"`
-       HasRepositoryProjects       *bool      `json:"has_repository_projects,omitempty"`
-
-       // DefaultRepoPermission can be one of: "read", "write", "admin", or "none". (Default: "read").
-       // It is only used in OrganizationsService.Edit.
-       DefaultRepoPermission *string `json:"default_repository_permission,omitempty"`
-       // DefaultRepoSettings can be one of: "read", "write", "admin", or "none". (Default: "read").
-       // It is only used in OrganizationsService.Get.
-       DefaultRepoSettings *string `json:"default_repository_settings,omitempty"`
-
-       // MembersCanCreateRepos default value is true and is only used in Organizations.Edit.
-       MembersCanCreateRepos *bool `json:"members_can_create_repositories,omitempty"`
-
-       // https://developer.github.com/changes/2019-12-03-internal-visibility-changes/#rest-v3-api
-       MembersCanCreatePublicRepos   *bool `json:"members_can_create_public_repositories,omitempty"`
-       MembersCanCreatePrivateRepos  *bool `json:"members_can_create_private_repositories,omitempty"`
-       MembersCanCreateInternalRepos *bool `json:"members_can_create_internal_repositories,omitempty"`
-
-       // MembersAllowedRepositoryCreationType denotes if organization members can create repositories
-       // and the type of repositories they can create. Possible values are: "all", "private", or "none".
-       //
-       // Deprecated: Use MembersCanCreatePublicRepos, MembersCanCreatePrivateRepos, MembersCanCreateInternalRepos
-       // instead. The new fields overrides the existing MembersAllowedRepositoryCreationType during 'edit'
-       // operation and does not consider 'internal' repositories during 'get' operation
-       MembersAllowedRepositoryCreationType *string `json:"members_allowed_repository_creation_type,omitempty"`
-
-       // API URLs
-       URL              *string `json:"url,omitempty"`
-       EventsURL        *string `json:"events_url,omitempty"`
-       HooksURL         *string `json:"hooks_url,omitempty"`
-       IssuesURL        *string `json:"issues_url,omitempty"`
-       MembersURL       *string `json:"members_url,omitempty"`
-       PublicMembersURL *string `json:"public_members_url,omitempty"`
-       ReposURL         *string `json:"repos_url,omitempty"`
-}
-
-// OrganizationInstallations represents GitHub app installations for an organization.
-type OrganizationInstallations struct {
-       TotalCount    *int            `json:"total_count,omitempty"`
-       Installations []*Installation `json:"installations,omitempty"`
-}
-
-func (o Organization) String() string {
-       return Stringify(o)
-}
-
-// Plan represents the payment plan for an account. See plans at https://github.com/plans.
-type Plan struct {
-       Name          *string `json:"name,omitempty"`
-       Space         *int    `json:"space,omitempty"`
-       Collaborators *int    `json:"collaborators,omitempty"`
-       PrivateRepos  *int    `json:"private_repos,omitempty"`
-       FilledSeats   *int    `json:"filled_seats,omitempty"`
-       Seats         *int    `json:"seats,omitempty"`
-}
-
-func (p Plan) String() string {
-       return Stringify(p)
-}
-
-// OrganizationsListOptions specifies the optional parameters to the
-// OrganizationsService.ListAll method.
-type OrganizationsListOptions struct {
-       // Since filters Organizations by ID.
-       Since int64 `url:"since,omitempty"`
-
-       // Note: Pagination is powered exclusively by the Since parameter,
-       // ListOptions.Page has no effect.
-       // ListOptions.PerPage controls an undocumented GitHub API parameter.
-       ListOptions
-}
-
-// ListAll lists all organizations, in the order that they were created on GitHub.
-//
-// Note: Pagination is powered exclusively by the since parameter. To continue
-// listing the next set of organizations, use the ID of the last-returned organization
-// as the opts.Since parameter for the next call.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/#list-organizations
-func (s *OrganizationsService) ListAll(ctx context.Context, opts *OrganizationsListOptions) ([]*Organization, *Response, error) {
-       u, err := addOptions("organizations", opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       orgs := []*Organization{}
-       resp, err := s.client.Do(ctx, req, &orgs)
-       if err != nil {
-               return nil, resp, err
-       }
-       return orgs, resp, nil
-}
-
-// List the organizations for a user. Passing the empty string will list
-// organizations for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/#oauth-scope-requirements
-// GitHub API docs: https://developer.github.com/v3/orgs/#list-organizations-for-a-user
-func (s *OrganizationsService) List(ctx context.Context, user string, opts *ListOptions) ([]*Organization, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v/orgs", user)
-       } else {
-               u = "user/orgs"
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var orgs []*Organization
-       resp, err := s.client.Do(ctx, req, &orgs)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return orgs, resp, nil
-}
-
-// Get fetches an organization by name.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/#get-an-organization
-func (s *OrganizationsService) Get(ctx context.Context, org string) (*Organization, *Response, error) {
-       u := fmt.Sprintf("orgs/%v", org)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMemberAllowedRepoCreationTypePreview)
-
-       organization := new(Organization)
-       resp, err := s.client.Do(ctx, req, organization)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return organization, resp, nil
-}
-
-// GetByID fetches an organization.
-//
-// Note: GetByID uses the undocumented GitHub API endpoint /organizations/:id.
-func (s *OrganizationsService) GetByID(ctx context.Context, id int64) (*Organization, *Response, error) {
-       u := fmt.Sprintf("organizations/%d", id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       organization := new(Organization)
-       resp, err := s.client.Do(ctx, req, organization)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return organization, resp, nil
-}
-
-// Edit an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/#members_can_create_repositories
-func (s *OrganizationsService) Edit(ctx context.Context, name string, org *Organization) (*Organization, *Response, error) {
-       u := fmt.Sprintf("orgs/%v", name)
-       req, err := s.client.NewRequest("PATCH", u, org)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeMemberAllowedRepoCreationTypePreview)
-
-       o := new(Organization)
-       resp, err := s.client.Do(ctx, req, o)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return o, resp, nil
-}
-
-// ListInstallations lists installations for an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/#list-app-installations-for-an-organization
-func (s *OrganizationsService) ListInstallations(ctx context.Context, org string, opts *ListOptions) (*OrganizationInstallations, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/installations", org)
-
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeIntegrationPreview)
-
-       result := new(OrganizationInstallations)
-       resp, err := s.client.Do(ctx, req, result)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return result, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/orgs_hooks.go b/vendor/github.com/google/go-github/v32/github/orgs_hooks.go
deleted file mode 100644 (file)
index a3a5f8d..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2015 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListHooks lists all Hooks for the specified organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#list-organization-webhooks
-func (s *OrganizationsService) ListHooks(ctx context.Context, org string, opts *ListOptions) ([]*Hook, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/hooks", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var hooks []*Hook
-       resp, err := s.client.Do(ctx, req, &hooks)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return hooks, resp, nil
-}
-
-// GetHook returns a single specified Hook.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#get-an-organization-webhook
-func (s *OrganizationsService) GetHook(ctx context.Context, org string, id int64) (*Hook, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/hooks/%d", org, id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-       hook := new(Hook)
-       resp, err := s.client.Do(ctx, req, hook)
-       return hook, resp, err
-}
-
-// CreateHook creates a Hook for the specified org.
-// Config is a required field.
-//
-// Note that only a subset of the hook fields are used and hook must
-// not be nil.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#create-an-organization-webhook
-func (s *OrganizationsService) CreateHook(ctx context.Context, org string, hook *Hook) (*Hook, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/hooks", org)
-
-       hookReq := &createHookRequest{
-               Name:   "web",
-               Events: hook.Events,
-               Active: hook.Active,
-               Config: hook.Config,
-       }
-
-       req, err := s.client.NewRequest("POST", u, hookReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       h := new(Hook)
-       resp, err := s.client.Do(ctx, req, h)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return h, resp, nil
-}
-
-// EditHook updates a specified Hook.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#update-an-organization-webhook
-func (s *OrganizationsService) EditHook(ctx context.Context, org string, id int64, hook *Hook) (*Hook, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/hooks/%d", org, id)
-       req, err := s.client.NewRequest("PATCH", u, hook)
-       if err != nil {
-               return nil, nil, err
-       }
-       h := new(Hook)
-       resp, err := s.client.Do(ctx, req, h)
-       return h, resp, err
-}
-
-// PingHook triggers a 'ping' event to be sent to the Hook.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#ping-an-organization-webhook
-func (s *OrganizationsService) PingHook(ctx context.Context, org string, id int64) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/hooks/%d/pings", org, id)
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// DeleteHook deletes a specified Hook.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#delete-an-organization-webhook
-func (s *OrganizationsService) DeleteHook(ctx context.Context, org string, id int64) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/hooks/%d", org, id)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/orgs_members.go b/vendor/github.com/google/go-github/v32/github/orgs_members.go
deleted file mode 100644 (file)
index e388a4c..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// Membership represents the status of a user's membership in an organization or team.
-type Membership struct {
-       URL *string `json:"url,omitempty"`
-
-       // State is the user's status within the organization or team.
-       // Possible values are: "active", "pending"
-       State *string `json:"state,omitempty"`
-
-       // Role identifies the user's role within the organization or team.
-       // Possible values for organization membership:
-       //     member - non-owner organization member
-       //     admin - organization owner
-       //
-       // Possible values for team membership are:
-       //     member - a normal member of the team
-       //     maintainer - a team maintainer. Able to add/remove other team
-       //                  members, promote other team members to team
-       //                  maintainer, and edit the team’s name and description
-       Role *string `json:"role,omitempty"`
-
-       // For organization membership, the API URL of the organization.
-       OrganizationURL *string `json:"organization_url,omitempty"`
-
-       // For organization membership, the organization the membership is for.
-       Organization *Organization `json:"organization,omitempty"`
-
-       // For organization membership, the user the membership is for.
-       User *User `json:"user,omitempty"`
-}
-
-func (m Membership) String() string {
-       return Stringify(m)
-}
-
-// ListMembersOptions specifies optional parameters to the
-// OrganizationsService.ListMembers method.
-type ListMembersOptions struct {
-       // If true (or if the authenticated user is not an owner of the
-       // organization), list only publicly visible members.
-       PublicOnly bool `url:"-"`
-
-       // Filter members returned in the list. Possible values are:
-       // 2fa_disabled, all. Default is "all".
-       Filter string `url:"filter,omitempty"`
-
-       // Role filters members returned by their role in the organization.
-       // Possible values are:
-       //     all - all members of the organization, regardless of role
-       //     admin - organization owners
-       //     member - non-owner organization members
-       //
-       // Default is "all".
-       Role string `url:"role,omitempty"`
-
-       ListOptions
-}
-
-// ListMembers lists the members for an organization. If the authenticated
-// user is an owner of the organization, this will return both concealed and
-// public members, otherwise it will only return public members.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-organization-members
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-public-organization-members
-func (s *OrganizationsService) ListMembers(ctx context.Context, org string, opts *ListMembersOptions) ([]*User, *Response, error) {
-       var u string
-       if opts != nil && opts.PublicOnly {
-               u = fmt.Sprintf("orgs/%v/public_members", org)
-       } else {
-               u = fmt.Sprintf("orgs/%v/members", org)
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var members []*User
-       resp, err := s.client.Do(ctx, req, &members)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return members, resp, nil
-}
-
-// IsMember checks if a user is a member of an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#check-organization-membership-for-a-user
-func (s *OrganizationsService) IsMember(ctx context.Context, org, user string) (bool, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/members/%v", org, user)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-
-       resp, err := s.client.Do(ctx, req, nil)
-       member, err := parseBoolResponse(err)
-       return member, resp, err
-}
-
-// IsPublicMember checks if a user is a public member of an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#check-public-organization-membership-for-a-user
-func (s *OrganizationsService) IsPublicMember(ctx context.Context, org, user string) (bool, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/public_members/%v", org, user)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-
-       resp, err := s.client.Do(ctx, req, nil)
-       member, err := parseBoolResponse(err)
-       return member, resp, err
-}
-
-// RemoveMember removes a user from all teams of an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#remove-an-organization-member
-func (s *OrganizationsService) RemoveMember(ctx context.Context, org, user string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/members/%v", org, user)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// PublicizeMembership publicizes a user's membership in an organization. (A
-// user cannot publicize the membership for another user.)
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#set-public-organization-membership-for-the-authenticated-user
-func (s *OrganizationsService) PublicizeMembership(ctx context.Context, org, user string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/public_members/%v", org, user)
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ConcealMembership conceals a user's membership in an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#remove-public-organization-membership-for-the-authenticated-user
-func (s *OrganizationsService) ConcealMembership(ctx context.Context, org, user string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/public_members/%v", org, user)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListOrgMembershipsOptions specifies optional parameters to the
-// OrganizationsService.ListOrgMemberships method.
-type ListOrgMembershipsOptions struct {
-       // Filter memberships to include only those with the specified state.
-       // Possible values are: "active", "pending".
-       State string `url:"state,omitempty"`
-
-       ListOptions
-}
-
-// ListOrgMemberships lists the organization memberships for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-organization-memberships-for-the-authenticated-user
-func (s *OrganizationsService) ListOrgMemberships(ctx context.Context, opts *ListOrgMembershipsOptions) ([]*Membership, *Response, error) {
-       u := "user/memberships/orgs"
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var memberships []*Membership
-       resp, err := s.client.Do(ctx, req, &memberships)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return memberships, resp, nil
-}
-
-// GetOrgMembership gets the membership for a user in a specified organization.
-// Passing an empty string for user will get the membership for the
-// authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#get-an-organization-membership-for-the-authenticated-user
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#get-organization-membership-for-a-user
-func (s *OrganizationsService) GetOrgMembership(ctx context.Context, user, org string) (*Membership, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("orgs/%v/memberships/%v", org, user)
-       } else {
-               u = fmt.Sprintf("user/memberships/orgs/%v", org)
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       membership := new(Membership)
-       resp, err := s.client.Do(ctx, req, membership)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return membership, resp, nil
-}
-
-// EditOrgMembership edits the membership for user in specified organization.
-// Passing an empty string for user will edit the membership for the
-// authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#update-an-organization-membership-for-the-authenticated-user
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#set-organization-membership-for-a-user
-func (s *OrganizationsService) EditOrgMembership(ctx context.Context, user, org string, membership *Membership) (*Membership, *Response, error) {
-       var u, method string
-       if user != "" {
-               u = fmt.Sprintf("orgs/%v/memberships/%v", org, user)
-               method = "PUT"
-       } else {
-               u = fmt.Sprintf("user/memberships/orgs/%v", org)
-               method = "PATCH"
-       }
-
-       req, err := s.client.NewRequest(method, u, membership)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       m := new(Membership)
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// RemoveOrgMembership removes user from the specified organization. If the
-// user has been invited to the organization, this will cancel their invitation.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#remove-organization-membership-for-a-user
-func (s *OrganizationsService) RemoveOrgMembership(ctx context.Context, user, org string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/memberships/%v", org, user)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListPendingOrgInvitations returns a list of pending invitations.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-pending-organization-invitations
-func (s *OrganizationsService) ListPendingOrgInvitations(ctx context.Context, org string, opts *ListOptions) ([]*Invitation, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/invitations", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var pendingInvitations []*Invitation
-       resp, err := s.client.Do(ctx, req, &pendingInvitations)
-       if err != nil {
-               return nil, resp, err
-       }
-       return pendingInvitations, resp, nil
-}
-
-// CreateOrgInvitationOptions specifies the parameters to the OrganizationService.Invite
-// method.
-type CreateOrgInvitationOptions struct {
-       // GitHub user ID for the person you are inviting. Not required if you provide Email.
-       InviteeID *int64 `json:"invitee_id,omitempty"`
-       // Email address of the person you are inviting, which can be an existing GitHub user.
-       // Not required if you provide InviteeID
-       Email *string `json:"email,omitempty"`
-       // Specify role for new member. Can be one of:
-       // * admin - Organization owners with full administrative rights to the
-       //       organization and complete access to all repositories and teams.
-       // * direct_member - Non-owner organization members with ability to see
-       //   other members and join teams by invitation.
-       // * billing_manager - Non-owner organization members with ability to
-       //   manage the billing settings of your organization.
-       // Default is "direct_member".
-       Role   *string `json:"role"`
-       TeamID []int64 `json:"team_ids"`
-}
-
-// CreateOrgInvitation invites people to an organization by using their GitHub user ID or their email address.
-// In order to create invitations in an organization,
-// the authenticated user must be an organization owner.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#create-an-organization-invitation
-func (s *OrganizationsService) CreateOrgInvitation(ctx context.Context, org string, opts *CreateOrgInvitationOptions) (*Invitation, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/invitations", org)
-
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var invitation *Invitation
-       resp, err := s.client.Do(ctx, req, &invitation)
-       if err != nil {
-               return nil, resp, err
-       }
-       return invitation, resp, nil
-}
-
-// ListOrgInvitationTeams lists all teams associated with an invitation. In order to see invitations in an organization,
-// the authenticated user must be an organization owner.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-organization-invitation-teams
-func (s *OrganizationsService) ListOrgInvitationTeams(ctx context.Context, org, invitationID string, opts *ListOptions) ([]*Team, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/invitations/%v/teams", org, invitationID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var orgInvitationTeams []*Team
-       resp, err := s.client.Do(ctx, req, &orgInvitationTeams)
-       if err != nil {
-               return nil, resp, err
-       }
-       return orgInvitationTeams, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/orgs_outside_collaborators.go b/vendor/github.com/google/go-github/v32/github/orgs_outside_collaborators.go
deleted file mode 100644 (file)
index 4dc3912..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListOutsideCollaboratorsOptions specifies optional parameters to the
-// OrganizationsService.ListOutsideCollaborators method.
-type ListOutsideCollaboratorsOptions struct {
-       // Filter outside collaborators returned in the list. Possible values are:
-       // 2fa_disabled, all.  Default is "all".
-       Filter string `url:"filter,omitempty"`
-
-       ListOptions
-}
-
-// ListOutsideCollaborators lists outside collaborators of organization's repositories.
-// This will only work if the authenticated
-// user is an owner of the organization.
-//
-// Warning: The API may change without advance notice during the preview period.
-// Preview features are not supported for production use.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/outside_collaborators/#list-outside-collaborators-for-an-organization
-func (s *OrganizationsService) ListOutsideCollaborators(ctx context.Context, org string, opts *ListOutsideCollaboratorsOptions) ([]*User, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/outside_collaborators", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var members []*User
-       resp, err := s.client.Do(ctx, req, &members)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return members, resp, nil
-}
-
-// RemoveOutsideCollaborator removes a user from the list of outside collaborators;
-// consequently, removing them from all the organization's repositories.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/outside_collaborators/#remove-outside-collaborator-from-an-organization
-func (s *OrganizationsService) RemoveOutsideCollaborator(ctx context.Context, org string, user string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/outside_collaborators/%v", org, user)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ConvertMemberToOutsideCollaborator reduces the permission level of a member of the
-// organization to that of an outside collaborator. Therefore, they will only
-// have access to the repositories that their current team membership allows.
-// Responses for converting a non-member or the last owner to an outside collaborator
-// are listed in GitHub API docs.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/outside_collaborators/#convert-an-organization-member-to-outside-collaborator
-func (s *OrganizationsService) ConvertMemberToOutsideCollaborator(ctx context.Context, org string, user string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/outside_collaborators/%v", org, user)
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/orgs_projects.go b/vendor/github.com/google/go-github/v32/github/orgs_projects.go
deleted file mode 100644 (file)
index cc3ed3b..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListProjects lists the projects for an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/#list-organization-projects
-func (s *OrganizationsService) ListProjects(ctx context.Context, org string, opts *ProjectListOptions) ([]*Project, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/projects", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       var projects []*Project
-       resp, err := s.client.Do(ctx, req, &projects)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return projects, resp, nil
-}
-
-// CreateProject creates a GitHub Project for the specified organization.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/#create-an-organization-project
-func (s *OrganizationsService) CreateProject(ctx context.Context, org string, opts *ProjectOptions) (*Project, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/projects", org)
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       project := &Project{}
-       resp, err := s.client.Do(ctx, req, project)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return project, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/orgs_users_blocking.go b/vendor/github.com/google/go-github/v32/github/orgs_users_blocking.go
deleted file mode 100644 (file)
index 7795d78..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListBlockedUsers lists all the users blocked by an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#list-users-blocked-by-an-organization
-func (s *OrganizationsService) ListBlockedUsers(ctx context.Context, org string, opts *ListOptions) ([]*User, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/blocks", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
-
-       var blockedUsers []*User
-       resp, err := s.client.Do(ctx, req, &blockedUsers)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return blockedUsers, resp, nil
-}
-
-// IsBlocked reports whether specified user is blocked from an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#check-if-a-user-is-blocked-by-an-organization
-func (s *OrganizationsService) IsBlocked(ctx context.Context, org string, user string) (bool, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/blocks/%v", org, user)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
-
-       resp, err := s.client.Do(ctx, req, nil)
-       isBlocked, err := parseBoolResponse(err)
-       return isBlocked, resp, err
-}
-
-// BlockUser blocks specified user from an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#block-a-user-from-an-organization
-func (s *OrganizationsService) BlockUser(ctx context.Context, org string, user string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/blocks/%v", org, user)
-
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// UnblockUser unblocks specified user from an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#unblock-a-user-from-an-organization
-func (s *OrganizationsService) UnblockUser(ctx context.Context, org string, user string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/blocks/%v", org, user)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/packages.go b/vendor/github.com/google/go-github/v32/github/packages.go
deleted file mode 100644 (file)
index 446e4fa..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2020 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-// Package represents a GitHub package.
-type Package struct {
-       ID             *int64           `json:"id,omitempty"`
-       Name           *string          `json:"name,omitempty"`
-       PackageType    *string          `json:"package_type,omitempty"`
-       HTMLURL        *string          `json:"html_url,omitempty"`
-       CreatedAt      *Timestamp       `json:"created_at,omitempty"`
-       UpdatedAt      *Timestamp       `json:"updated_at,omitempty"`
-       Owner          *User            `json:"owner,omitempty"`
-       PackageVersion *PackageVersion  `json:"package_version,omitempty"`
-       Registry       *PackageRegistry `json:"registry,omitempty"`
-}
-
-func (p Package) String() string {
-       return Stringify(p)
-}
-
-// PackageVersion represents a GitHub package version.
-type PackageVersion struct {
-       ID                  *int64          `json:"id,omitempty"`
-       Version             *string         `json:"version,omitempty"`
-       Summary             *string         `json:"summary,omitempty"`
-       Body                *string         `json:"body,omitempty"`
-       BodyHTML            *string         `json:"body_html,omitempty"`
-       Release             *PackageRelease `json:"release,omitempty"`
-       Manifest            *string         `json:"manifest,omitempty"`
-       HTMLURL             *string         `json:"html_url,omitempty"`
-       TagName             *string         `json:"tag_name,omitempty"`
-       TargetCommitish     *string         `json:"target_commitish,omitempty"`
-       TargetOID           *string         `json:"target_oid,omitempty"`
-       Draft               *bool           `json:"draft,omitempty"`
-       Prerelease          *bool           `json:"prerelease,omitempty"`
-       CreatedAt           *Timestamp      `json:"created_at,omitempty"`
-       UpdatedAt           *Timestamp      `json:"updated_at,omitempty"`
-       PackageFiles        []*PackageFile  `json:"package_files,omitempty"`
-       Author              *User           `json:"author,omitempty"`
-       InstallationCommand *string         `json:"installation_command,omitempty"`
-}
-
-func (pv PackageVersion) String() string {
-       return Stringify(pv)
-}
-
-// PackageRelease represents a GitHub package version release.
-type PackageRelease struct {
-       URL             *string    `json:"url,omitempty"`
-       HTMLURL         *string    `json:"html_url,omitempty"`
-       ID              *int64     `json:"id,omitempty"`
-       TagName         *string    `json:"tag_name,omitempty"`
-       TargetCommitish *string    `json:"target_commitish,omitempty"`
-       Name            *string    `json:"name,omitempty"`
-       Draft           *bool      `json:"draft,omitempty"`
-       Author          *User      `json:"author,omitempty"`
-       Prerelease      *bool      `json:"prerelease,omitempty"`
-       CreatedAt       *Timestamp `json:"created_at,omitempty"`
-       PublishedAt     *Timestamp `json:"published_at,omitempty"`
-}
-
-func (r PackageRelease) String() string {
-       return Stringify(r)
-}
-
-// PackageFile represents a GitHub package version release file.
-type PackageFile struct {
-       DownloadURL *string    `json:"download_url,omitempty"`
-       ID          *int64     `json:"id,omitempty"`
-       Name        *string    `json:"name,omitempty"`
-       SHA256      *string    `json:"sha256,omitempty"`
-       SHA1        *string    `json:"sha1,omitempty"`
-       MD5         *string    `json:"md5,omitempty"`
-       ContentType *string    `json:"content_type,omitempty"`
-       State       *string    `json:"state,omitempty"`
-       Author      *User      `json:"author,omitempty"`
-       Size        *int64     `json:"size,omitempty"`
-       CreatedAt   *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt   *Timestamp `json:"updated_at,omitempty"`
-}
-
-func (pf PackageFile) String() string {
-       return Stringify(pf)
-}
-
-// PackageRegistry represents a GitHub package registry.
-type PackageRegistry struct {
-       AboutURL *string `json:"about_url,omitempty"`
-       Name     *string `json:"name,omitempty"`
-       Type     *string `json:"type,omitempty"`
-       URL      *string `json:"url,omitempty"`
-       Vendor   *string `json:"vendor,omitempty"`
-}
-
-func (r PackageRegistry) String() string {
-       return Stringify(r)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/projects.go b/vendor/github.com/google/go-github/v32/github/projects.go
deleted file mode 100644 (file)
index 1a4d844..0000000
+++ /dev/null
@@ -1,594 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ProjectsService provides access to the projects functions in the
-// GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/
-type ProjectsService service
-
-// Project represents a GitHub Project.
-type Project struct {
-       ID         *int64     `json:"id,omitempty"`
-       URL        *string    `json:"url,omitempty"`
-       HTMLURL    *string    `json:"html_url,omitempty"`
-       ColumnsURL *string    `json:"columns_url,omitempty"`
-       OwnerURL   *string    `json:"owner_url,omitempty"`
-       Name       *string    `json:"name,omitempty"`
-       Body       *string    `json:"body,omitempty"`
-       Number     *int       `json:"number,omitempty"`
-       State      *string    `json:"state,omitempty"`
-       CreatedAt  *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt  *Timestamp `json:"updated_at,omitempty"`
-       NodeID     *string    `json:"node_id,omitempty"`
-
-       // The User object that generated the project.
-       Creator *User `json:"creator,omitempty"`
-}
-
-func (p Project) String() string {
-       return Stringify(p)
-}
-
-// GetProject gets a GitHub Project for a repo.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/#get-a-project
-func (s *ProjectsService) GetProject(ctx context.Context, id int64) (*Project, *Response, error) {
-       u := fmt.Sprintf("projects/%v", id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       project := &Project{}
-       resp, err := s.client.Do(ctx, req, project)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return project, resp, nil
-}
-
-// ProjectOptions specifies the parameters to the
-// RepositoriesService.CreateProject and
-// ProjectsService.UpdateProject methods.
-type ProjectOptions struct {
-       // The name of the project. (Required for creation; optional for update.)
-       Name *string `json:"name,omitempty"`
-       // The body of the project. (Optional.)
-       Body *string `json:"body,omitempty"`
-
-       // The following field(s) are only applicable for update.
-       // They should be left with zero values for creation.
-
-       // State of the project. Either "open" or "closed". (Optional.)
-       State *string `json:"state,omitempty"`
-       // The permission level that all members of the project's organization
-       // will have on this project.
-       // Setting the organization permission is only available
-       // for organization projects. (Optional.)
-       OrganizationPermission *string `json:"organization_permission,omitempty"`
-       // Sets visibility of the project within the organization.
-       // Setting visibility is only available
-       // for organization projects.(Optional.)
-       Public *bool `json:"public,omitempty"`
-}
-
-// UpdateProject updates a repository project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/#update-a-project
-func (s *ProjectsService) UpdateProject(ctx context.Context, id int64, opts *ProjectOptions) (*Project, *Response, error) {
-       u := fmt.Sprintf("projects/%v", id)
-       req, err := s.client.NewRequest("PATCH", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       project := &Project{}
-       resp, err := s.client.Do(ctx, req, project)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return project, resp, nil
-}
-
-// DeleteProject deletes a GitHub Project from a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/#delete-a-project
-func (s *ProjectsService) DeleteProject(ctx context.Context, id int64) (*Response, error) {
-       u := fmt.Sprintf("projects/%v", id)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ProjectColumn represents a column of a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/projects/
-type ProjectColumn struct {
-       ID         *int64     `json:"id,omitempty"`
-       Name       *string    `json:"name,omitempty"`
-       URL        *string    `json:"url,omitempty"`
-       ProjectURL *string    `json:"project_url,omitempty"`
-       CardsURL   *string    `json:"cards_url,omitempty"`
-       CreatedAt  *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt  *Timestamp `json:"updated_at,omitempty"`
-       NodeID     *string    `json:"node_id,omitempty"`
-}
-
-// ListProjectColumns lists the columns of a GitHub Project for a repo.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/columns/#list-project-columns
-func (s *ProjectsService) ListProjectColumns(ctx context.Context, projectID int64, opts *ListOptions) ([]*ProjectColumn, *Response, error) {
-       u := fmt.Sprintf("projects/%v/columns", projectID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       columns := []*ProjectColumn{}
-       resp, err := s.client.Do(ctx, req, &columns)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return columns, resp, nil
-}
-
-// GetProjectColumn gets a column of a GitHub Project for a repo.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/columns/#get-a-project-column
-func (s *ProjectsService) GetProjectColumn(ctx context.Context, id int64) (*ProjectColumn, *Response, error) {
-       u := fmt.Sprintf("projects/columns/%v", id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       column := &ProjectColumn{}
-       resp, err := s.client.Do(ctx, req, column)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return column, resp, nil
-}
-
-// ProjectColumnOptions specifies the parameters to the
-// ProjectsService.CreateProjectColumn and
-// ProjectsService.UpdateProjectColumn methods.
-type ProjectColumnOptions struct {
-       // The name of the project column. (Required for creation and update.)
-       Name string `json:"name"`
-}
-
-// CreateProjectColumn creates a column for the specified (by number) project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/columns/#create-a-project-column
-func (s *ProjectsService) CreateProjectColumn(ctx context.Context, projectID int64, opts *ProjectColumnOptions) (*ProjectColumn, *Response, error) {
-       u := fmt.Sprintf("projects/%v/columns", projectID)
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       column := &ProjectColumn{}
-       resp, err := s.client.Do(ctx, req, column)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return column, resp, nil
-}
-
-// UpdateProjectColumn updates a column of a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/columns/#update-a-project-column
-func (s *ProjectsService) UpdateProjectColumn(ctx context.Context, columnID int64, opts *ProjectColumnOptions) (*ProjectColumn, *Response, error) {
-       u := fmt.Sprintf("projects/columns/%v", columnID)
-       req, err := s.client.NewRequest("PATCH", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       column := &ProjectColumn{}
-       resp, err := s.client.Do(ctx, req, column)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return column, resp, nil
-}
-
-// DeleteProjectColumn deletes a column from a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/columns/#delete-a-project-column
-func (s *ProjectsService) DeleteProjectColumn(ctx context.Context, columnID int64) (*Response, error) {
-       u := fmt.Sprintf("projects/columns/%v", columnID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ProjectColumnMoveOptions specifies the parameters to the
-// ProjectsService.MoveProjectColumn method.
-type ProjectColumnMoveOptions struct {
-       // Position can be one of "first", "last", or "after:<column-id>", where
-       // <column-id> is the ID of a column in the same project. (Required.)
-       Position string `json:"position"`
-}
-
-// MoveProjectColumn moves a column within a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/columns/#move-a-project-column
-func (s *ProjectsService) MoveProjectColumn(ctx context.Context, columnID int64, opts *ProjectColumnMoveOptions) (*Response, error) {
-       u := fmt.Sprintf("projects/columns/%v/moves", columnID)
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ProjectCard represents a card in a column of a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/cards/#get-a-project-card
-type ProjectCard struct {
-       URL        *string    `json:"url,omitempty"`
-       ColumnURL  *string    `json:"column_url,omitempty"`
-       ContentURL *string    `json:"content_url,omitempty"`
-       ID         *int64     `json:"id,omitempty"`
-       Note       *string    `json:"note,omitempty"`
-       Creator    *User      `json:"creator,omitempty"`
-       CreatedAt  *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt  *Timestamp `json:"updated_at,omitempty"`
-       NodeID     *string    `json:"node_id,omitempty"`
-       Archived   *bool      `json:"archived,omitempty"`
-
-       // The following fields are only populated by Webhook events.
-       ColumnID *int64 `json:"column_id,omitempty"`
-
-       // The following fields are only populated by Events API.
-       ProjectID          *int64  `json:"project_id,omitempty"`
-       ProjectURL         *string `json:"project_url,omitempty"`
-       ColumnName         *string `json:"column_name,omitempty"`
-       PreviousColumnName *string `json:"previous_column_name,omitempty"` // Populated in "moved_columns_in_project" event deliveries.
-}
-
-// ProjectCardListOptions specifies the optional parameters to the
-// ProjectsService.ListProjectCards method.
-type ProjectCardListOptions struct {
-       // ArchivedState is used to list all, archived, or not_archived project cards.
-       // Defaults to not_archived when you omit this parameter.
-       ArchivedState *string `url:"archived_state,omitempty"`
-
-       ListOptions
-}
-
-// ListProjectCards lists the cards in a column of a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/cards/#list-project-cards
-func (s *ProjectsService) ListProjectCards(ctx context.Context, columnID int64, opts *ProjectCardListOptions) ([]*ProjectCard, *Response, error) {
-       u := fmt.Sprintf("projects/columns/%v/cards", columnID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       cards := []*ProjectCard{}
-       resp, err := s.client.Do(ctx, req, &cards)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return cards, resp, nil
-}
-
-// GetProjectCard gets a card in a column of a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/cards/#get-a-project-card
-func (s *ProjectsService) GetProjectCard(ctx context.Context, cardID int64) (*ProjectCard, *Response, error) {
-       u := fmt.Sprintf("projects/columns/cards/%v", cardID)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       card := &ProjectCard{}
-       resp, err := s.client.Do(ctx, req, card)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return card, resp, nil
-}
-
-// ProjectCardOptions specifies the parameters to the
-// ProjectsService.CreateProjectCard and
-// ProjectsService.UpdateProjectCard methods.
-type ProjectCardOptions struct {
-       // The note of the card. Note and ContentID are mutually exclusive.
-       Note string `json:"note,omitempty"`
-       // The ID (not Number) of the Issue to associate with this card.
-       // Note and ContentID are mutually exclusive.
-       ContentID int64 `json:"content_id,omitempty"`
-       // The type of content to associate with this card. Possible values are: "Issue" and "PullRequest".
-       ContentType string `json:"content_type,omitempty"`
-       // Use true to archive a project card.
-       // Specify false if you need to restore a previously archived project card.
-       Archived *bool `json:"archived,omitempty"`
-}
-
-// CreateProjectCard creates a card in the specified column of a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/cards/#create-a-project-card
-func (s *ProjectsService) CreateProjectCard(ctx context.Context, columnID int64, opts *ProjectCardOptions) (*ProjectCard, *Response, error) {
-       u := fmt.Sprintf("projects/columns/%v/cards", columnID)
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       card := &ProjectCard{}
-       resp, err := s.client.Do(ctx, req, card)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return card, resp, nil
-}
-
-// UpdateProjectCard updates a card of a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/cards/#update-a-project-card
-func (s *ProjectsService) UpdateProjectCard(ctx context.Context, cardID int64, opts *ProjectCardOptions) (*ProjectCard, *Response, error) {
-       u := fmt.Sprintf("projects/columns/cards/%v", cardID)
-       req, err := s.client.NewRequest("PATCH", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       card := &ProjectCard{}
-       resp, err := s.client.Do(ctx, req, card)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return card, resp, nil
-}
-
-// DeleteProjectCard deletes a card from a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/cards/#delete-a-project-card
-func (s *ProjectsService) DeleteProjectCard(ctx context.Context, cardID int64) (*Response, error) {
-       u := fmt.Sprintf("projects/columns/cards/%v", cardID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ProjectCardMoveOptions specifies the parameters to the
-// ProjectsService.MoveProjectCard method.
-type ProjectCardMoveOptions struct {
-       // Position can be one of "top", "bottom", or "after:<card-id>", where
-       // <card-id> is the ID of a card in the same project.
-       Position string `json:"position"`
-       // ColumnID is the ID of a column in the same project. Note that ColumnID
-       // is required when using Position "after:<card-id>" when that card is in
-       // another column; otherwise it is optional.
-       ColumnID int64 `json:"column_id,omitempty"`
-}
-
-// MoveProjectCard moves a card within a GitHub Project.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/cards/#move-a-project-card
-func (s *ProjectsService) MoveProjectCard(ctx context.Context, cardID int64, opts *ProjectCardMoveOptions) (*Response, error) {
-       u := fmt.Sprintf("projects/columns/cards/%v/moves", cardID)
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ProjectCollaboratorOptions specifies the optional parameters to the
-// ProjectsService.AddProjectCollaborator method.
-type ProjectCollaboratorOptions struct {
-       // Permission specifies the permission to grant to the collaborator.
-       // Possible values are:
-       //     "read" - can read, but not write to or administer this project.
-       //     "write" - can read and write, but not administer this project.
-       //     "admin" - can read, write and administer this project.
-       //
-       // Default value is "write"
-       Permission *string `json:"permission,omitempty"`
-}
-
-// AddProjectCollaborator adds a collaborator to an organization project and sets
-// their permission level. You must be an organization owner or a project admin to add a collaborator.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/collaborators/#add-project-collaborator
-func (s *ProjectsService) AddProjectCollaborator(ctx context.Context, id int64, username string, opts *ProjectCollaboratorOptions) (*Response, error) {
-       u := fmt.Sprintf("projects/%v/collaborators/%v", id, username)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// RemoveProjectCollaborator removes a collaborator from an organization project.
-// You must be an organization owner or a project admin to remove a collaborator.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/collaborators/#remove-project-collaborator
-func (s *ProjectsService) RemoveProjectCollaborator(ctx context.Context, id int64, username string) (*Response, error) {
-       u := fmt.Sprintf("projects/%v/collaborators/%v", id, username)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListCollaboratorOptions specifies the optional parameters to the
-// ProjectsService.ListProjectCollaborators method.
-type ListCollaboratorOptions struct {
-       // Affiliation specifies how collaborators should be filtered by their affiliation.
-       // Possible values are:
-       //     "outside" - All outside collaborators of an organization-owned repository
-       //     "direct" - All collaborators with permissions to an organization-owned repository,
-       //              regardless of organization membership status
-       //     "all" - All collaborators the authenticated user can see
-       //
-       // Default value is "all".
-       Affiliation *string `url:"affiliation,omitempty"`
-
-       ListOptions
-}
-
-// ListProjectCollaborators lists the collaborators for an organization project. For a project,
-// the list of collaborators includes outside collaborators, organization members that are direct
-// collaborators, organization members with access through team memberships, organization members
-// with access through default organization permissions, and organization owners. You must be an
-// organization owner or a project admin to list collaborators.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/collaborators/#list-project-collaborators
-func (s *ProjectsService) ListProjectCollaborators(ctx context.Context, id int64, opts *ListCollaboratorOptions) ([]*User, *Response, error) {
-       u := fmt.Sprintf("projects/%v/collaborators", id)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       var users []*User
-       resp, err := s.client.Do(ctx, req, &users)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return users, resp, nil
-}
-
-// ProjectPermissionLevel represents the permission level an organization
-// member has for a given project.
-type ProjectPermissionLevel struct {
-       // Possible values: "admin", "write", "read", "none"
-       Permission *string `json:"permission,omitempty"`
-
-       User *User `json:"user,omitempty"`
-}
-
-// ReviewProjectCollaboratorPermission returns the collaborator's permission level for an organization
-// project. Possible values for the permission key: "admin", "write", "read", "none".
-// You must be an organization owner or a project admin to review a user's permission level.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/collaborators/#get-project-permission-for-a-user
-func (s *ProjectsService) ReviewProjectCollaboratorPermission(ctx context.Context, id int64, username string) (*ProjectPermissionLevel, *Response, error) {
-       u := fmt.Sprintf("projects/%v/collaborators/%v/permission", id, username)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       ppl := new(ProjectPermissionLevel)
-       resp, err := s.client.Do(ctx, req, ppl)
-       if err != nil {
-               return nil, resp, err
-       }
-       return ppl, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/pulls.go b/vendor/github.com/google/go-github/v32/github/pulls.go
deleted file mode 100644 (file)
index 4ac62a8..0000000
+++ /dev/null
@@ -1,481 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "bytes"
-       "context"
-       "fmt"
-       "strings"
-       "time"
-)
-
-// PullRequestsService handles communication with the pull request related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/
-type PullRequestsService service
-
-// PullRequest represents a GitHub pull request on a repository.
-type PullRequest struct {
-       ID                  *int64     `json:"id,omitempty"`
-       Number              *int       `json:"number,omitempty"`
-       State               *string    `json:"state,omitempty"`
-       Locked              *bool      `json:"locked,omitempty"`
-       Title               *string    `json:"title,omitempty"`
-       Body                *string    `json:"body,omitempty"`
-       CreatedAt           *time.Time `json:"created_at,omitempty"`
-       UpdatedAt           *time.Time `json:"updated_at,omitempty"`
-       ClosedAt            *time.Time `json:"closed_at,omitempty"`
-       MergedAt            *time.Time `json:"merged_at,omitempty"`
-       Labels              []*Label   `json:"labels,omitempty"`
-       User                *User      `json:"user,omitempty"`
-       Draft               *bool      `json:"draft,omitempty"`
-       Merged              *bool      `json:"merged,omitempty"`
-       Mergeable           *bool      `json:"mergeable,omitempty"`
-       MergeableState      *string    `json:"mergeable_state,omitempty"`
-       MergedBy            *User      `json:"merged_by,omitempty"`
-       MergeCommitSHA      *string    `json:"merge_commit_sha,omitempty"`
-       Rebaseable          *bool      `json:"rebaseable,omitempty"`
-       Comments            *int       `json:"comments,omitempty"`
-       Commits             *int       `json:"commits,omitempty"`
-       Additions           *int       `json:"additions,omitempty"`
-       Deletions           *int       `json:"deletions,omitempty"`
-       ChangedFiles        *int       `json:"changed_files,omitempty"`
-       URL                 *string    `json:"url,omitempty"`
-       HTMLURL             *string    `json:"html_url,omitempty"`
-       IssueURL            *string    `json:"issue_url,omitempty"`
-       StatusesURL         *string    `json:"statuses_url,omitempty"`
-       DiffURL             *string    `json:"diff_url,omitempty"`
-       PatchURL            *string    `json:"patch_url,omitempty"`
-       CommitsURL          *string    `json:"commits_url,omitempty"`
-       CommentsURL         *string    `json:"comments_url,omitempty"`
-       ReviewCommentsURL   *string    `json:"review_comments_url,omitempty"`
-       ReviewCommentURL    *string    `json:"review_comment_url,omitempty"`
-       ReviewComments      *int       `json:"review_comments,omitempty"`
-       Assignee            *User      `json:"assignee,omitempty"`
-       Assignees           []*User    `json:"assignees,omitempty"`
-       Milestone           *Milestone `json:"milestone,omitempty"`
-       MaintainerCanModify *bool      `json:"maintainer_can_modify,omitempty"`
-       AuthorAssociation   *string    `json:"author_association,omitempty"`
-       NodeID              *string    `json:"node_id,omitempty"`
-       RequestedReviewers  []*User    `json:"requested_reviewers,omitempty"`
-
-       // RequestedTeams is populated as part of the PullRequestEvent.
-       // See, https://developer.github.com/v3/activity/events/types/#pullrequestevent for an example.
-       RequestedTeams []*Team `json:"requested_teams,omitempty"`
-
-       Links *PRLinks           `json:"_links,omitempty"`
-       Head  *PullRequestBranch `json:"head,omitempty"`
-       Base  *PullRequestBranch `json:"base,omitempty"`
-
-       // ActiveLockReason is populated only when LockReason is provided while locking the pull request.
-       // Possible values are: "off-topic", "too heated", "resolved", and "spam".
-       ActiveLockReason *string `json:"active_lock_reason,omitempty"`
-}
-
-func (p PullRequest) String() string {
-       return Stringify(p)
-}
-
-// PRLink represents a single link object from Github pull request _links.
-type PRLink struct {
-       HRef *string `json:"href,omitempty"`
-}
-
-// PRLinks represents the "_links" object in a Github pull request.
-type PRLinks struct {
-       Self           *PRLink `json:"self,omitempty"`
-       HTML           *PRLink `json:"html,omitempty"`
-       Issue          *PRLink `json:"issue,omitempty"`
-       Comments       *PRLink `json:"comments,omitempty"`
-       ReviewComments *PRLink `json:"review_comments,omitempty"`
-       ReviewComment  *PRLink `json:"review_comment,omitempty"`
-       Commits        *PRLink `json:"commits,omitempty"`
-       Statuses       *PRLink `json:"statuses,omitempty"`
-}
-
-// PullRequestBranch represents a base or head branch in a GitHub pull request.
-type PullRequestBranch struct {
-       Label *string     `json:"label,omitempty"`
-       Ref   *string     `json:"ref,omitempty"`
-       SHA   *string     `json:"sha,omitempty"`
-       Repo  *Repository `json:"repo,omitempty"`
-       User  *User       `json:"user,omitempty"`
-}
-
-// PullRequestListOptions specifies the optional parameters to the
-// PullRequestsService.List method.
-type PullRequestListOptions struct {
-       // State filters pull requests based on their state. Possible values are:
-       // open, closed, all. Default is "open".
-       State string `url:"state,omitempty"`
-
-       // Head filters pull requests by head user and branch name in the format of:
-       // "user:ref-name".
-       Head string `url:"head,omitempty"`
-
-       // Base filters pull requests by base branch name.
-       Base string `url:"base,omitempty"`
-
-       // Sort specifies how to sort pull requests. Possible values are: created,
-       // updated, popularity, long-running. Default is "created".
-       Sort string `url:"sort,omitempty"`
-
-       // Direction in which to sort pull requests. Possible values are: asc, desc.
-       // If Sort is "created" or not specified, Default is "desc", otherwise Default
-       // is "asc"
-       Direction string `url:"direction,omitempty"`
-
-       ListOptions
-}
-
-// List the pull requests for the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/#list-pull-requests
-func (s *PullRequestsService) List(ctx context.Context, owner string, repo string, opts *PullRequestListOptions) ([]*PullRequest, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeLockReasonPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var pulls []*PullRequest
-       resp, err := s.client.Do(ctx, req, &pulls)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return pulls, resp, nil
-}
-
-// ListPullRequestsWithCommit returns pull requests associated with a commit SHA.
-//
-// The results will include open and closed pull requests.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/commits/#list-pull-requests-associated-with-a-commit
-func (s *PullRequestsService) ListPullRequestsWithCommit(ctx context.Context, owner, repo, sha string, opts *PullRequestListOptions) ([]*PullRequest, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v/pulls", owner, repo, sha)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeListPullsOrBranchesForCommitPreview, mediaTypeLockReasonPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-       var pulls []*PullRequest
-       resp, err := s.client.Do(ctx, req, &pulls)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return pulls, resp, nil
-}
-
-// Get a single pull request.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/#get-a-pull-request
-func (s *PullRequestsService) Get(ctx context.Context, owner string, repo string, number int) (*PullRequest, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeLockReasonPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       pull := new(PullRequest)
-       resp, err := s.client.Do(ctx, req, pull)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return pull, resp, nil
-}
-
-// GetRaw gets a single pull request in raw (diff or patch) format.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/#get-a-pull-request
-func (s *PullRequestsService) GetRaw(ctx context.Context, owner string, repo string, number int, opts RawOptions) (string, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return "", nil, err
-       }
-
-       switch opts.Type {
-       case Diff:
-               req.Header.Set("Accept", mediaTypeV3Diff)
-       case Patch:
-               req.Header.Set("Accept", mediaTypeV3Patch)
-       default:
-               return "", nil, fmt.Errorf("unsupported raw type %d", opts.Type)
-       }
-
-       var buf bytes.Buffer
-       resp, err := s.client.Do(ctx, req, &buf)
-       if err != nil {
-               return "", resp, err
-       }
-
-       return buf.String(), resp, nil
-}
-
-// NewPullRequest represents a new pull request to be created.
-type NewPullRequest struct {
-       Title               *string `json:"title,omitempty"`
-       Head                *string `json:"head,omitempty"`
-       Base                *string `json:"base,omitempty"`
-       Body                *string `json:"body,omitempty"`
-       Issue               *int    `json:"issue,omitempty"`
-       MaintainerCanModify *bool   `json:"maintainer_can_modify,omitempty"`
-       Draft               *bool   `json:"draft,omitempty"`
-}
-
-// Create a new pull request on the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/#create-a-pull-request
-func (s *PullRequestsService) Create(ctx context.Context, owner string, repo string, pull *NewPullRequest) (*PullRequest, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls", owner, repo)
-       req, err := s.client.NewRequest("POST", u, pull)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       p := new(PullRequest)
-       resp, err := s.client.Do(ctx, req, p)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return p, resp, nil
-}
-
-// PullRequestBranchUpdateOptions specifies the optional parameters to the
-// PullRequestsService.UpdateBranch method.
-type PullRequestBranchUpdateOptions struct {
-       // ExpectedHeadSHA specifies the most recent commit on the pull request's branch.
-       // Default value is the SHA of the pull request's current HEAD ref.
-       ExpectedHeadSHA *string `json:"expected_head_sha,omitempty"`
-}
-
-// PullRequestBranchUpdateResponse specifies the response of pull request branch update.
-type PullRequestBranchUpdateResponse struct {
-       Message *string `json:"message,omitempty"`
-       URL     *string `json:"url,omitempty"`
-}
-
-// UpdateBranch updates the pull request branch with latest upstream changes.
-//
-// This method might return an AcceptedError and a status code of
-// 202. This is because this is the status that GitHub returns to signify that
-// it has now scheduled the update of the pull request branch in a background task.
-// A follow up request, after a delay of a second or so, should result
-// in a successful request.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/#update-a-pull-request-branch
-func (s *PullRequestsService) UpdateBranch(ctx context.Context, owner, repo string, number int, opts *PullRequestBranchUpdateOptions) (*PullRequestBranchUpdateResponse, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/update-branch", owner, repo, number)
-
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeUpdatePullRequestBranchPreview)
-
-       p := new(PullRequestBranchUpdateResponse)
-       resp, err := s.client.Do(ctx, req, p)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return p, resp, nil
-}
-
-type pullRequestUpdate struct {
-       Title               *string `json:"title,omitempty"`
-       Body                *string `json:"body,omitempty"`
-       State               *string `json:"state,omitempty"`
-       Base                *string `json:"base,omitempty"`
-       MaintainerCanModify *bool   `json:"maintainer_can_modify,omitempty"`
-}
-
-// Edit a pull request.
-// pull must not be nil.
-//
-// The following fields are editable: Title, Body, State, Base.Ref and MaintainerCanModify.
-// Base.Ref updates the base branch of the pull request.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/#update-a-pull-request
-func (s *PullRequestsService) Edit(ctx context.Context, owner string, repo string, number int, pull *PullRequest) (*PullRequest, *Response, error) {
-       if pull == nil {
-               return nil, nil, fmt.Errorf("pull must be provided")
-       }
-
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number)
-
-       update := &pullRequestUpdate{
-               Title:               pull.Title,
-               Body:                pull.Body,
-               State:               pull.State,
-               MaintainerCanModify: pull.MaintainerCanModify,
-       }
-       // avoid updating the base branch when closing the Pull Request
-       // - otherwise the GitHub API server returns a "Validation Failed" error:
-       // "Cannot change base branch of closed pull request".
-       if pull.Base != nil && pull.GetState() != "closed" {
-               update.Base = pull.Base.Ref
-       }
-
-       req, err := s.client.NewRequest("PATCH", u, update)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeLockReasonPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       p := new(PullRequest)
-       resp, err := s.client.Do(ctx, req, p)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return p, resp, nil
-}
-
-// ListCommits lists the commits in a pull request.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/#list-commits-on-a-pull-request
-func (s *PullRequestsService) ListCommits(ctx context.Context, owner string, repo string, number int, opts *ListOptions) ([]*RepositoryCommit, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/commits", owner, repo, number)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var commits []*RepositoryCommit
-       resp, err := s.client.Do(ctx, req, &commits)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return commits, resp, nil
-}
-
-// ListFiles lists the files in a pull request.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/#list-pull-requests-files
-func (s *PullRequestsService) ListFiles(ctx context.Context, owner string, repo string, number int, opts *ListOptions) ([]*CommitFile, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/files", owner, repo, number)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var commitFiles []*CommitFile
-       resp, err := s.client.Do(ctx, req, &commitFiles)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return commitFiles, resp, nil
-}
-
-// IsMerged checks if a pull request has been merged.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/#check-if-a-pull-request-has-been-merged
-func (s *PullRequestsService) IsMerged(ctx context.Context, owner string, repo string, number int) (bool, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/merge", owner, repo, number)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-
-       resp, err := s.client.Do(ctx, req, nil)
-       merged, err := parseBoolResponse(err)
-       return merged, resp, err
-}
-
-// PullRequestMergeResult represents the result of merging a pull request.
-type PullRequestMergeResult struct {
-       SHA     *string `json:"sha,omitempty"`
-       Merged  *bool   `json:"merged,omitempty"`
-       Message *string `json:"message,omitempty"`
-}
-
-// PullRequestOptions lets you define how a pull request will be merged.
-type PullRequestOptions struct {
-       CommitTitle string // Title for the automatic commit message. (Optional.)
-       SHA         string // SHA that pull request head must match to allow merge. (Optional.)
-
-       // The merge method to use. Possible values include: "merge", "squash", and "rebase" with the default being merge. (Optional.)
-       MergeMethod string
-}
-
-type pullRequestMergeRequest struct {
-       CommitMessage string `json:"commit_message,omitempty"`
-       CommitTitle   string `json:"commit_title,omitempty"`
-       MergeMethod   string `json:"merge_method,omitempty"`
-       SHA           string `json:"sha,omitempty"`
-}
-
-// Merge a pull request.
-// commitMessage is an extra detail to append to automatic commit message.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/#merge-a-pull-request
-func (s *PullRequestsService) Merge(ctx context.Context, owner string, repo string, number int, commitMessage string, options *PullRequestOptions) (*PullRequestMergeResult, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/merge", owner, repo, number)
-
-       pullRequestBody := &pullRequestMergeRequest{CommitMessage: commitMessage}
-       if options != nil {
-               pullRequestBody.CommitTitle = options.CommitTitle
-               pullRequestBody.MergeMethod = options.MergeMethod
-               pullRequestBody.SHA = options.SHA
-       }
-       req, err := s.client.NewRequest("PUT", u, pullRequestBody)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       mergeResult := new(PullRequestMergeResult)
-       resp, err := s.client.Do(ctx, req, mergeResult)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return mergeResult, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/pulls_comments.go b/vendor/github.com/google/go-github/v32/github/pulls_comments.go
deleted file mode 100644 (file)
index 13de971..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "strings"
-       "time"
-)
-
-// PullRequestComment represents a comment left on a pull request.
-type PullRequestComment struct {
-       ID                  *int64     `json:"id,omitempty"`
-       NodeID              *string    `json:"node_id,omitempty"`
-       InReplyTo           *int64     `json:"in_reply_to_id,omitempty"`
-       Body                *string    `json:"body,omitempty"`
-       Path                *string    `json:"path,omitempty"`
-       DiffHunk            *string    `json:"diff_hunk,omitempty"`
-       PullRequestReviewID *int64     `json:"pull_request_review_id,omitempty"`
-       Position            *int       `json:"position,omitempty"`
-       OriginalPosition    *int       `json:"original_position,omitempty"`
-       StartLine           *int       `json:"start_line,omitempty"`
-       Line                *int       `json:"line,omitempty"`
-       OriginalLine        *int       `json:"original_line,omitempty"`
-       OriginalStartLine   *int       `json:"original_start_line,omitempty"`
-       Side                *string    `json:"side,omitempty"`
-       StartSide           *string    `json:"start_side,omitempty"`
-       CommitID            *string    `json:"commit_id,omitempty"`
-       OriginalCommitID    *string    `json:"original_commit_id,omitempty"`
-       User                *User      `json:"user,omitempty"`
-       Reactions           *Reactions `json:"reactions,omitempty"`
-       CreatedAt           *time.Time `json:"created_at,omitempty"`
-       UpdatedAt           *time.Time `json:"updated_at,omitempty"`
-       // AuthorAssociation is the comment author's relationship to the pull request's repository.
-       // Possible values are "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIMER", "FIRST_TIME_CONTRIBUTOR", "MEMBER", "OWNER", or "NONE".
-       AuthorAssociation *string `json:"author_association,omitempty"`
-       URL               *string `json:"url,omitempty"`
-       HTMLURL           *string `json:"html_url,omitempty"`
-       PullRequestURL    *string `json:"pull_request_url,omitempty"`
-}
-
-func (p PullRequestComment) String() string {
-       return Stringify(p)
-}
-
-// PullRequestListCommentsOptions specifies the optional parameters to the
-// PullRequestsService.ListComments method.
-type PullRequestListCommentsOptions struct {
-       // Sort specifies how to sort comments. Possible values are: created, updated.
-       Sort string `url:"sort,omitempty"`
-
-       // Direction in which to sort comments. Possible values are: asc, desc.
-       Direction string `url:"direction,omitempty"`
-
-       // Since filters comments by time.
-       Since time.Time `url:"since,omitempty"`
-
-       ListOptions
-}
-
-// ListComments lists all comments on the specified pull request. Specifying a
-// pull request number of 0 will return all comments on all pull requests for
-// the repository.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/comments/#list-review-comments-on-a-pull-request
-// GitHub API docs: https://developer.github.com/v3/pulls/comments/#list-review-comments-in-a-repository
-func (s *PullRequestsService) ListComments(ctx context.Context, owner string, repo string, number int, opts *PullRequestListCommentsOptions) ([]*PullRequestComment, *Response, error) {
-       var u string
-       if number == 0 {
-               u = fmt.Sprintf("repos/%v/%v/pulls/comments", owner, repo)
-       } else {
-               u = fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number)
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeMultiLineCommentsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var comments []*PullRequestComment
-       resp, err := s.client.Do(ctx, req, &comments)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comments, resp, nil
-}
-
-// GetComment fetches the specified pull request comment.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/comments/#get-a-review-comment-for-a-pull-request
-func (s *PullRequestsService) GetComment(ctx context.Context, owner string, repo string, commentID int64) (*PullRequestComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeMultiLineCommentsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       comment := new(PullRequestComment)
-       resp, err := s.client.Do(ctx, req, comment)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comment, resp, nil
-}
-
-// CreateComment creates a new comment on the specified pull request.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/comments/#create-a-review-comment-for-a-pull-request
-func (s *PullRequestsService) CreateComment(ctx context.Context, owner string, repo string, number int, comment *PullRequestComment) (*PullRequestComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number)
-       req, err := s.client.NewRequest("POST", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-       // TODO: remove custom Accept headers when their respective API fully launches.
-       acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeMultiLineCommentsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       c := new(PullRequestComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// CreateCommentInReplyTo creates a new comment as a reply to an existing pull request comment.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/comments/#create-a-review-comment-for-a-pull-request
-func (s *PullRequestsService) CreateCommentInReplyTo(ctx context.Context, owner string, repo string, number int, body string, commentID int64) (*PullRequestComment, *Response, error) {
-       comment := &struct {
-               Body      string `json:"body,omitempty"`
-               InReplyTo int64  `json:"in_reply_to,omitempty"`
-       }{
-               Body:      body,
-               InReplyTo: commentID,
-       }
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number)
-       req, err := s.client.NewRequest("POST", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       c := new(PullRequestComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// EditComment updates a pull request comment.
-// A non-nil comment.Body must be provided. Other comment fields should be left nil.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/comments/#update-a-review-comment-for-a-pull-request
-func (s *PullRequestsService) EditComment(ctx context.Context, owner string, repo string, commentID int64, comment *PullRequestComment) (*PullRequestComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID)
-       req, err := s.client.NewRequest("PATCH", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       c := new(PullRequestComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// DeleteComment deletes a pull request comment.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/comments/#delete-a-review-comment-for-a-pull-request
-func (s *PullRequestsService) DeleteComment(ctx context.Context, owner string, repo string, commentID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/pulls_reviewers.go b/vendor/github.com/google/go-github/v32/github/pulls_reviewers.go
deleted file mode 100644 (file)
index 510dfb8..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ReviewersRequest specifies users and teams for a pull request review request.
-type ReviewersRequest struct {
-       NodeID        *string  `json:"node_id,omitempty"`
-       Reviewers     []string `json:"reviewers,omitempty"`
-       TeamReviewers []string `json:"team_reviewers,omitempty"`
-}
-
-// Reviewers represents reviewers of a pull request.
-type Reviewers struct {
-       Users []*User `json:"users,omitempty"`
-       Teams []*Team `json:"teams,omitempty"`
-}
-
-// RequestReviewers creates a review request for the provided reviewers for the specified pull request.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#request-reviewers-for-a-pull-request
-func (s *PullRequestsService) RequestReviewers(ctx context.Context, owner, repo string, number int, reviewers ReviewersRequest) (*PullRequest, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number)
-       req, err := s.client.NewRequest("POST", u, &reviewers)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := new(PullRequest)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// ListReviewers lists reviewers whose reviews have been requested on the specified pull request.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#list-requested-reviewers-for-a-pull-request
-func (s *PullRequestsService) ListReviewers(ctx context.Context, owner, repo string, number int, opts *ListOptions) (*Reviewers, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/requested_reviewers", owner, repo, number)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       reviewers := new(Reviewers)
-       resp, err := s.client.Do(ctx, req, reviewers)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return reviewers, resp, nil
-}
-
-// RemoveReviewers removes the review request for the provided reviewers for the specified pull request.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#remove-requested-reviewers-from-a-pull-request
-func (s *PullRequestsService) RemoveReviewers(ctx context.Context, owner, repo string, number int, reviewers ReviewersRequest) (*Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number)
-       req, err := s.client.NewRequest("DELETE", u, &reviewers)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/pulls_reviews.go b/vendor/github.com/google/go-github/v32/github/pulls_reviews.go
deleted file mode 100644 (file)
index 30a4585..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "errors"
-       "fmt"
-       "time"
-)
-
-var ErrMixedCommentStyles = errors.New("cannot use both position and side/line form comments")
-
-// PullRequestReview represents a review of a pull request.
-type PullRequestReview struct {
-       ID             *int64     `json:"id,omitempty"`
-       NodeID         *string    `json:"node_id,omitempty"`
-       User           *User      `json:"user,omitempty"`
-       Body           *string    `json:"body,omitempty"`
-       SubmittedAt    *time.Time `json:"submitted_at,omitempty"`
-       CommitID       *string    `json:"commit_id,omitempty"`
-       HTMLURL        *string    `json:"html_url,omitempty"`
-       PullRequestURL *string    `json:"pull_request_url,omitempty"`
-       State          *string    `json:"state,omitempty"`
-       // AuthorAssociation is the comment author's relationship to the issue's repository.
-       // Possible values are "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIMER", "FIRST_TIME_CONTRIBUTOR", "MEMBER", "OWNER", or "NONE".
-       AuthorAssociation *string `json:"author_association,omitempty"`
-}
-
-func (p PullRequestReview) String() string {
-       return Stringify(p)
-}
-
-// DraftReviewComment represents a comment part of the review.
-type DraftReviewComment struct {
-       Path     *string `json:"path,omitempty"`
-       Position *int    `json:"position,omitempty"`
-       Body     *string `json:"body,omitempty"`
-
-       // The new comfort-fade-preview fields
-       StartSide *string `json:"start_side,omitempty"`
-       Side      *string `json:"side,omitempty"`
-       StartLine *int    `json:"start_line,omitempty"`
-       Line      *int    `json:"line,omitempty"`
-}
-
-func (c DraftReviewComment) String() string {
-       return Stringify(c)
-}
-
-// PullRequestReviewRequest represents a request to create a review.
-type PullRequestReviewRequest struct {
-       NodeID   *string               `json:"node_id,omitempty"`
-       CommitID *string               `json:"commit_id,omitempty"`
-       Body     *string               `json:"body,omitempty"`
-       Event    *string               `json:"event,omitempty"`
-       Comments []*DraftReviewComment `json:"comments,omitempty"`
-}
-
-func (r PullRequestReviewRequest) String() string {
-       return Stringify(r)
-}
-
-func (r PullRequestReviewRequest) isComfortFadePreview() (bool, error) {
-       var isCF *bool
-       for _, comment := range r.Comments {
-               if comment == nil {
-                       continue
-               }
-               hasPos := comment.Position != nil
-               hasComfortFade := (comment.StartSide != nil) || (comment.Side != nil) ||
-                       (comment.StartLine != nil) || (comment.Line != nil)
-
-               switch {
-               case hasPos && hasComfortFade:
-                       return false, ErrMixedCommentStyles
-               case hasPos && isCF != nil && *isCF:
-                       return false, ErrMixedCommentStyles
-               case hasComfortFade && isCF != nil && !*isCF:
-                       return false, ErrMixedCommentStyles
-               }
-               isCF = &hasComfortFade
-       }
-       if isCF != nil {
-               return *isCF, nil
-       }
-       return false, nil
-}
-
-// PullRequestReviewDismissalRequest represents a request to dismiss a review.
-type PullRequestReviewDismissalRequest struct {
-       Message *string `json:"message,omitempty"`
-}
-
-func (r PullRequestReviewDismissalRequest) String() string {
-       return Stringify(r)
-}
-
-// ListReviews lists all reviews on the specified pull request.
-//
-// TODO: Follow up with GitHub support about an issue with this method's
-// returned error format and remove this comment once it's fixed.
-// Read more about it here - https://github.com/google/go-github/issues/540
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#list-reviews-for-a-pull-request
-func (s *PullRequestsService) ListReviews(ctx context.Context, owner, repo string, number int, opts *ListOptions) ([]*PullRequestReview, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews", owner, repo, number)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var reviews []*PullRequestReview
-       resp, err := s.client.Do(ctx, req, &reviews)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return reviews, resp, nil
-}
-
-// GetReview fetches the specified pull request review.
-//
-// TODO: Follow up with GitHub support about an issue with this method's
-// returned error format and remove this comment once it's fixed.
-// Read more about it here - https://github.com/google/go-github/issues/540
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#get-a-review-for-a-pull-request
-func (s *PullRequestsService) GetReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       review := new(PullRequestReview)
-       resp, err := s.client.Do(ctx, req, review)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return review, resp, nil
-}
-
-// DeletePendingReview deletes the specified pull request pending review.
-//
-// TODO: Follow up with GitHub support about an issue with this method's
-// returned error format and remove this comment once it's fixed.
-// Read more about it here - https://github.com/google/go-github/issues/540
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review-for-a-pull-request
-func (s *PullRequestsService) DeletePendingReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       review := new(PullRequestReview)
-       resp, err := s.client.Do(ctx, req, review)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return review, resp, nil
-}
-
-// ListReviewComments lists all the comments for the specified review.
-//
-// TODO: Follow up with GitHub support about an issue with this method's
-// returned error format and remove this comment once it's fixed.
-// Read more about it here - https://github.com/google/go-github/issues/540
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#list-comments-for-a-pull-request-review
-func (s *PullRequestsService) ListReviewComments(ctx context.Context, owner, repo string, number int, reviewID int64, opts *ListOptions) ([]*PullRequestComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/comments", owner, repo, number, reviewID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var comments []*PullRequestComment
-       resp, err := s.client.Do(ctx, req, &comments)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comments, resp, nil
-}
-
-// CreateReview creates a new review on the specified pull request.
-//
-// TODO: Follow up with GitHub support about an issue with this method's
-// returned error format and remove this comment once it's fixed.
-// Read more about it here - https://github.com/google/go-github/issues/540
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#create-a-review-for-a-pull-request
-//
-// In order to use multi-line comments, you must use the "comfort fade" preview.
-// This replaces the use of the "Position" field in comments with 4 new fields:
-//   [Start]Side, and [Start]Line.
-// These new fields must be used for ALL comments (including single-line),
-// with the following restrictions (empirically observed, so subject to change).
-//
-// For single-line "comfort fade" comments, you must use:
-//
-//    Path:  &path,  // as before
-//    Body:  &body,  // as before
-//    Side:  &"RIGHT" (or "LEFT")
-//    Line:  &123,  // NOT THE SAME AS POSITION, this is an actual line number.
-//
-// If StartSide or StartLine is used with single-line comments, a 422 is returned.
-//
-// For multi-line "comfort fade" comments, you must use:
-//
-//    Path:      &path,  // as before
-//    Body:      &body,  // as before
-//    StartSide: &"RIGHT" (or "LEFT")
-//    Side:      &"RIGHT" (or "LEFT")
-//    StartLine: &120,
-//    Line:      &125,
-//
-// Suggested edits are made by commenting on the lines to replace, and including the
-// suggested edit in a block like this (it may be surrounded in non-suggestion markdown):
-//
-//    ```suggestion
-//    Use this instead.
-//    It is waaaaaay better.
-//    ```
-func (s *PullRequestsService) CreateReview(ctx context.Context, owner, repo string, number int, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews", owner, repo, number)
-
-       req, err := s.client.NewRequest("POST", u, review)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // Detect which style of review comment is being used.
-       if isCF, err := review.isComfortFadePreview(); err != nil {
-               return nil, nil, err
-       } else if isCF {
-               // If the review comments are using the comfort fade preview fields,
-               // then pass the comfort fade header.
-               req.Header.Set("Accept", mediaTypeMultiLineCommentsPreview)
-       }
-
-       r := new(PullRequestReview)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// UpdateReview updates the review summary on the specified pull request.
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#update-a-review-for-a-pull-request
-func (s *PullRequestsService) UpdateReview(ctx context.Context, owner, repo string, number int, reviewID int64, body string) (*PullRequestReview, *Response, error) {
-       opts := &struct {
-               Body string `json:"body"`
-       }{Body: body}
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID)
-
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       review := &PullRequestReview{}
-       resp, err := s.client.Do(ctx, req, review)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return review, resp, nil
-}
-
-// SubmitReview submits a specified review on the specified pull request.
-//
-// TODO: Follow up with GitHub support about an issue with this method's
-// returned error format and remove this comment once it's fixed.
-// Read more about it here - https://github.com/google/go-github/issues/540
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#submit-a-review-for-a-pull-request
-func (s *PullRequestsService) SubmitReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/events", owner, repo, number, reviewID)
-
-       req, err := s.client.NewRequest("POST", u, review)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := new(PullRequestReview)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// DismissReview dismisses a specified review on the specified pull request.
-//
-// TODO: Follow up with GitHub support about an issue with this method's
-// returned error format and remove this comment once it's fixed.
-// Read more about it here - https://github.com/google/go-github/issues/540
-//
-// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#dismiss-a-review-for-a-pull-request
-func (s *PullRequestsService) DismissReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewDismissalRequest) (*PullRequestReview, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/dismissals", owner, repo, number, reviewID)
-
-       req, err := s.client.NewRequest("PUT", u, review)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := new(PullRequestReview)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/reactions.go b/vendor/github.com/google/go-github/v32/github/reactions.go
deleted file mode 100644 (file)
index ce0a751..0000000
+++ /dev/null
@@ -1,492 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "net/http"
-)
-
-// ReactionsService provides access to the reactions-related functions in the
-// GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/
-type ReactionsService service
-
-// Reaction represents a GitHub reaction.
-type Reaction struct {
-       // ID is the Reaction ID.
-       ID     *int64  `json:"id,omitempty"`
-       User   *User   `json:"user,omitempty"`
-       NodeID *string `json:"node_id,omitempty"`
-       // Content is the type of reaction.
-       // Possible values are:
-       //     "+1", "-1", "laugh", "confused", "heart", "hooray".
-       Content *string `json:"content,omitempty"`
-}
-
-// Reactions represents a summary of GitHub reactions.
-type Reactions struct {
-       TotalCount *int    `json:"total_count,omitempty"`
-       PlusOne    *int    `json:"+1,omitempty"`
-       MinusOne   *int    `json:"-1,omitempty"`
-       Laugh      *int    `json:"laugh,omitempty"`
-       Confused   *int    `json:"confused,omitempty"`
-       Heart      *int    `json:"heart,omitempty"`
-       Hooray     *int    `json:"hooray,omitempty"`
-       URL        *string `json:"url,omitempty"`
-}
-
-func (r Reaction) String() string {
-       return Stringify(r)
-}
-
-// ListCommentReactionOptions specifies the optional parameters to the
-// ReactionsService.ListCommentReactions method.
-type ListCommentReactionOptions struct {
-       // Content restricts the returned comment reactions to only those with the given type.
-       // Omit this parameter to list all reactions to a commit comment.
-       // Possible values are: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
-       Content string `url:"content,omitempty"`
-
-       ListOptions
-}
-
-// ListCommentReactions lists the reactions for a commit comment.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-a-commit-comment
-func (s *ReactionsService) ListCommentReactions(ctx context.Context, owner, repo string, id int64, opts *ListCommentReactionOptions) ([]*Reaction, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions", owner, repo, id)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       var m []*Reaction
-       resp, err := s.client.Do(ctx, req, &m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// CreateCommentReaction creates a reaction for a commit comment.
-// Note that if you have already created a reaction of type content, the
-// previously created reaction will be returned with Status: 200 OK.
-// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray".
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-a-commit-comment
-func (s *ReactionsService) CreateCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions", owner, repo, id)
-
-       body := &Reaction{Content: String(content)}
-       req, err := s.client.NewRequest("POST", u, body)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       m := &Reaction{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// DeleteCommentReaction deletes the reaction for a commit comment.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-a-commit-comment-reaction
-func (s *ReactionsService) DeleteCommentReaction(ctx context.Context, owner, repo string, commentID, reactionID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions/%v", owner, repo, commentID, reactionID)
-
-       return s.deleteReaction(ctx, u)
-}
-
-// DeleteCommentReactionByID deletes the reaction for a commit comment by repository ID.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-a-commit-comment-reaction
-func (s *ReactionsService) DeleteCommentReactionByID(ctx context.Context, repoID, commentID, reactionID int64) (*Response, error) {
-       u := fmt.Sprintf("repositories/%v/comments/%v/reactions/%v", repoID, commentID, reactionID)
-
-       return s.deleteReaction(ctx, u)
-}
-
-// ListIssueReactions lists the reactions for an issue.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-an-issue
-func (s *ReactionsService) ListIssueReactions(ctx context.Context, owner, repo string, number int, opts *ListOptions) ([]*Reaction, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%v/reactions", owner, repo, number)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       var m []*Reaction
-       resp, err := s.client.Do(ctx, req, &m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// CreateIssueReaction creates a reaction for an issue.
-// Note that if you have already created a reaction of type content, the
-// previously created reaction will be returned with Status: 200 OK.
-// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray".
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-an-issue
-func (s *ReactionsService) CreateIssueReaction(ctx context.Context, owner, repo string, number int, content string) (*Reaction, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/%v/reactions", owner, repo, number)
-
-       body := &Reaction{Content: String(content)}
-       req, err := s.client.NewRequest("POST", u, body)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       m := &Reaction{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// DeleteIssueReaction deletes the reaction to an issue.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-an-issue-reaction
-func (s *ReactionsService) DeleteIssueReaction(ctx context.Context, owner, repo string, issueNumber int, reactionID int64) (*Response, error) {
-       url := fmt.Sprintf("repos/%v/%v/issues/%v/reactions/%v", owner, repo, issueNumber, reactionID)
-
-       return s.deleteReaction(ctx, url)
-}
-
-// DeleteIssueReactionByID deletes the reaction to an issue by repository ID.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-an-issue-reaction
-func (s *ReactionsService) DeleteIssueReactionByID(ctx context.Context, repoID, issueNumber int, reactionID int64) (*Response, error) {
-       url := fmt.Sprintf("repositories/%v/issues/%v/reactions/%v", repoID, issueNumber, reactionID)
-
-       return s.deleteReaction(ctx, url)
-}
-
-// ListIssueCommentReactions lists the reactions for an issue comment.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-an-issue-comment
-func (s *ReactionsService) ListIssueCommentReactions(ctx context.Context, owner, repo string, id int64, opts *ListOptions) ([]*Reaction, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions", owner, repo, id)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       var m []*Reaction
-       resp, err := s.client.Do(ctx, req, &m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// CreateIssueCommentReaction creates a reaction for an issue comment.
-// Note that if you have already created a reaction of type content, the
-// previously created reaction will be returned with Status: 200 OK.
-// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray".
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-an-issue-comment
-func (s *ReactionsService) CreateIssueCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions", owner, repo, id)
-
-       body := &Reaction{Content: String(content)}
-       req, err := s.client.NewRequest("POST", u, body)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       m := &Reaction{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// DeleteIssueCommentReaction deletes the reaction to an issue comment.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-an-issue-comment-reaction
-func (s *ReactionsService) DeleteIssueCommentReaction(ctx context.Context, owner, repo string, commentID, reactionID int64) (*Response, error) {
-       url := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions/%v", owner, repo, commentID, reactionID)
-
-       return s.deleteReaction(ctx, url)
-}
-
-// DeleteIssueCommentReactionByID deletes the reaction to an issue comment by repository ID.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-an-issue-comment-reaction
-func (s *ReactionsService) DeleteIssueCommentReactionByID(ctx context.Context, repoID, commentID, reactionID int64) (*Response, error) {
-       url := fmt.Sprintf("repositories/%v/issues/comments/%v/reactions/%v", repoID, commentID, reactionID)
-
-       return s.deleteReaction(ctx, url)
-}
-
-// ListPullRequestCommentReactions lists the reactions for a pull request review comment.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-a-pull-request-review-comment
-func (s *ReactionsService) ListPullRequestCommentReactions(ctx context.Context, owner, repo string, id int64, opts *ListOptions) ([]*Reaction, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions", owner, repo, id)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       var m []*Reaction
-       resp, err := s.client.Do(ctx, req, &m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// CreatePullRequestCommentReaction creates a reaction for a pull request review comment.
-// Note that if you have already created a reaction of type content, the
-// previously created reaction will be returned with Status: 200 OK.
-// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray".
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-a-pull-request-review-comment
-func (s *ReactionsService) CreatePullRequestCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions", owner, repo, id)
-
-       body := &Reaction{Content: String(content)}
-       req, err := s.client.NewRequest("POST", u, body)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       m := &Reaction{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// DeletePullRequestCommentReaction deletes the reaction to a pull request review comment.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-a-pull-request-comment-reaction
-func (s *ReactionsService) DeletePullRequestCommentReaction(ctx context.Context, owner, repo string, commentID, reactionID int64) (*Response, error) {
-       url := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions/%v", owner, repo, commentID, reactionID)
-
-       return s.deleteReaction(ctx, url)
-}
-
-// DeletePullRequestCommentReactionByID deletes the reaction to a pull request review comment by repository ID.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-a-pull-request-comment-reaction
-func (s *ReactionsService) DeletePullRequestCommentReactionByID(ctx context.Context, repoID, commentID, reactionID int64) (*Response, error) {
-       url := fmt.Sprintf("repositories/%v/pulls/comments/%v/reactions/%v", repoID, commentID, reactionID)
-
-       return s.deleteReaction(ctx, url)
-}
-
-// ListTeamDiscussionReactions lists the reactions for a team discussion.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-legacy
-func (s *ReactionsService) ListTeamDiscussionReactions(ctx context.Context, teamID int64, discussionNumber int, opts *ListOptions) ([]*Reaction, *Response, error) {
-       u := fmt.Sprintf("teams/%v/discussions/%v/reactions", teamID, discussionNumber)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       var m []*Reaction
-       resp, err := s.client.Do(ctx, req, &m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// CreateTeamDiscussionReaction creates a reaction for a team discussion.
-// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray".
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-legacy
-func (s *ReactionsService) CreateTeamDiscussionReaction(ctx context.Context, teamID int64, discussionNumber int, content string) (*Reaction, *Response, error) {
-       u := fmt.Sprintf("teams/%v/discussions/%v/reactions", teamID, discussionNumber)
-
-       body := &Reaction{Content: String(content)}
-       req, err := s.client.NewRequest("POST", u, body)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       m := &Reaction{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// DeleteTeamDiscussionReaction deletes the reaction to a team discussion.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-team-discussion-reaction
-func (s *ReactionsService) DeleteTeamDiscussionReaction(ctx context.Context, org, teamSlug string, discussionNumber int, reactionID int64) (*Response, error) {
-       url := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/reactions/%v", org, teamSlug, discussionNumber, reactionID)
-
-       return s.deleteReaction(ctx, url)
-}
-
-// DeleteTeamDiscussionReactionByOrgIDAndTeamID deletes the reaction to a team discussion by organization ID and team ID.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-team-discussion-reaction
-func (s *ReactionsService) DeleteTeamDiscussionReactionByOrgIDAndTeamID(ctx context.Context, orgID, teamID, discussionNumber int, reactionID int64) (*Response, error) {
-       url := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/reactions/%v", orgID, teamID, discussionNumber, reactionID)
-
-       return s.deleteReaction(ctx, url)
-}
-
-// ListTeamDiscussionCommentReactions lists the reactions for a team discussion comment.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-comment-legacy
-func (s *ReactionsService) ListTeamDiscussionCommentReactions(ctx context.Context, teamID int64, discussionNumber, commentNumber int, opts *ListOptions) ([]*Reaction, *Response, error) {
-       u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v/reactions", teamID, discussionNumber, commentNumber)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       var m []*Reaction
-       resp, err := s.client.Do(ctx, req, &m)
-       if err != nil {
-               return nil, nil, err
-       }
-       return m, resp, nil
-}
-
-// CreateTeamDiscussionCommentReaction creates a reaction for a team discussion comment.
-// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray".
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-comment-legacy
-func (s *ReactionsService) CreateTeamDiscussionCommentReaction(ctx context.Context, teamID int64, discussionNumber, commentNumber int, content string) (*Reaction, *Response, error) {
-       u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v/reactions", teamID, discussionNumber, commentNumber)
-
-       body := &Reaction{Content: String(content)}
-       req, err := s.client.NewRequest("POST", u, body)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       m := &Reaction{}
-       resp, err := s.client.Do(ctx, req, m)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return m, resp, nil
-}
-
-// DeleteTeamDiscussionCommentReaction deletes the reaction to a team discussion comment.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-team-discussion-comment-reaction
-func (s *ReactionsService) DeleteTeamDiscussionCommentReaction(ctx context.Context, org, teamSlug string, discussionNumber, commentNumber int, reactionID int64) (*Response, error) {
-       url := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments/%v/reactions/%v", org, teamSlug, discussionNumber, commentNumber, reactionID)
-
-       return s.deleteReaction(ctx, url)
-}
-
-// DeleteTeamDiscussionCommentReactionByOrgIDAndTeamID deletes the reaction to a team discussion comment by organization ID and team ID.
-//
-// GitHub API docs: https://developer.github.com/v3/reactions/#delete-team-discussion-comment-reaction
-func (s *ReactionsService) DeleteTeamDiscussionCommentReactionByOrgIDAndTeamID(ctx context.Context, orgID, teamID, discussionNumber, commentNumber int, reactionID int64) (*Response, error) {
-       url := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments/%v/reactions/%v", orgID, teamID, discussionNumber, commentNumber, reactionID)
-
-       return s.deleteReaction(ctx, url)
-}
-
-func (s *ReactionsService) deleteReaction(ctx context.Context, url string) (*Response, error) {
-       req, err := s.client.NewRequest(http.MethodDelete, url, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos.go b/vendor/github.com/google/go-github/v32/github/repos.go
deleted file mode 100644 (file)
index 0956d7c..0000000
+++ /dev/null
@@ -1,1503 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "encoding/json"
-       "fmt"
-       "strings"
-)
-
-// RepositoriesService handles communication with the repository related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/
-type RepositoriesService service
-
-// Repository represents a GitHub repository.
-type Repository struct {
-       ID                  *int64           `json:"id,omitempty"`
-       NodeID              *string          `json:"node_id,omitempty"`
-       Owner               *User            `json:"owner,omitempty"`
-       Name                *string          `json:"name,omitempty"`
-       FullName            *string          `json:"full_name,omitempty"`
-       Description         *string          `json:"description,omitempty"`
-       Homepage            *string          `json:"homepage,omitempty"`
-       CodeOfConduct       *CodeOfConduct   `json:"code_of_conduct,omitempty"`
-       DefaultBranch       *string          `json:"default_branch,omitempty"`
-       MasterBranch        *string          `json:"master_branch,omitempty"`
-       CreatedAt           *Timestamp       `json:"created_at,omitempty"`
-       PushedAt            *Timestamp       `json:"pushed_at,omitempty"`
-       UpdatedAt           *Timestamp       `json:"updated_at,omitempty"`
-       HTMLURL             *string          `json:"html_url,omitempty"`
-       CloneURL            *string          `json:"clone_url,omitempty"`
-       GitURL              *string          `json:"git_url,omitempty"`
-       MirrorURL           *string          `json:"mirror_url,omitempty"`
-       SSHURL              *string          `json:"ssh_url,omitempty"`
-       SVNURL              *string          `json:"svn_url,omitempty"`
-       Language            *string          `json:"language,omitempty"`
-       Fork                *bool            `json:"fork,omitempty"`
-       ForksCount          *int             `json:"forks_count,omitempty"`
-       NetworkCount        *int             `json:"network_count,omitempty"`
-       OpenIssuesCount     *int             `json:"open_issues_count,omitempty"`
-       StargazersCount     *int             `json:"stargazers_count,omitempty"`
-       SubscribersCount    *int             `json:"subscribers_count,omitempty"`
-       WatchersCount       *int             `json:"watchers_count,omitempty"`
-       Size                *int             `json:"size,omitempty"`
-       AutoInit            *bool            `json:"auto_init,omitempty"`
-       Parent              *Repository      `json:"parent,omitempty"`
-       Source              *Repository      `json:"source,omitempty"`
-       TemplateRepository  *Repository      `json:"template_repository,omitempty"`
-       Organization        *Organization    `json:"organization,omitempty"`
-       Permissions         *map[string]bool `json:"permissions,omitempty"`
-       AllowRebaseMerge    *bool            `json:"allow_rebase_merge,omitempty"`
-       AllowSquashMerge    *bool            `json:"allow_squash_merge,omitempty"`
-       AllowMergeCommit    *bool            `json:"allow_merge_commit,omitempty"`
-       DeleteBranchOnMerge *bool            `json:"delete_branch_on_merge,omitempty"`
-       Topics              []string         `json:"topics,omitempty"`
-       Archived            *bool            `json:"archived,omitempty"`
-       Disabled            *bool            `json:"disabled,omitempty"`
-
-       // Only provided when using RepositoriesService.Get while in preview
-       License *License `json:"license,omitempty"`
-
-       // Additional mutable fields when creating and editing a repository
-       Private           *bool   `json:"private,omitempty"`
-       HasIssues         *bool   `json:"has_issues,omitempty"`
-       HasWiki           *bool   `json:"has_wiki,omitempty"`
-       HasPages          *bool   `json:"has_pages,omitempty"`
-       HasProjects       *bool   `json:"has_projects,omitempty"`
-       HasDownloads      *bool   `json:"has_downloads,omitempty"`
-       IsTemplate        *bool   `json:"is_template,omitempty"`
-       LicenseTemplate   *string `json:"license_template,omitempty"`
-       GitignoreTemplate *string `json:"gitignore_template,omitempty"`
-
-       // Creating an organization repository. Required for non-owners.
-       TeamID *int64 `json:"team_id,omitempty"`
-
-       // API URLs
-       URL              *string `json:"url,omitempty"`
-       ArchiveURL       *string `json:"archive_url,omitempty"`
-       AssigneesURL     *string `json:"assignees_url,omitempty"`
-       BlobsURL         *string `json:"blobs_url,omitempty"`
-       BranchesURL      *string `json:"branches_url,omitempty"`
-       CollaboratorsURL *string `json:"collaborators_url,omitempty"`
-       CommentsURL      *string `json:"comments_url,omitempty"`
-       CommitsURL       *string `json:"commits_url,omitempty"`
-       CompareURL       *string `json:"compare_url,omitempty"`
-       ContentsURL      *string `json:"contents_url,omitempty"`
-       ContributorsURL  *string `json:"contributors_url,omitempty"`
-       DeploymentsURL   *string `json:"deployments_url,omitempty"`
-       DownloadsURL     *string `json:"downloads_url,omitempty"`
-       EventsURL        *string `json:"events_url,omitempty"`
-       ForksURL         *string `json:"forks_url,omitempty"`
-       GitCommitsURL    *string `json:"git_commits_url,omitempty"`
-       GitRefsURL       *string `json:"git_refs_url,omitempty"`
-       GitTagsURL       *string `json:"git_tags_url,omitempty"`
-       HooksURL         *string `json:"hooks_url,omitempty"`
-       IssueCommentURL  *string `json:"issue_comment_url,omitempty"`
-       IssueEventsURL   *string `json:"issue_events_url,omitempty"`
-       IssuesURL        *string `json:"issues_url,omitempty"`
-       KeysURL          *string `json:"keys_url,omitempty"`
-       LabelsURL        *string `json:"labels_url,omitempty"`
-       LanguagesURL     *string `json:"languages_url,omitempty"`
-       MergesURL        *string `json:"merges_url,omitempty"`
-       MilestonesURL    *string `json:"milestones_url,omitempty"`
-       NotificationsURL *string `json:"notifications_url,omitempty"`
-       PullsURL         *string `json:"pulls_url,omitempty"`
-       ReleasesURL      *string `json:"releases_url,omitempty"`
-       StargazersURL    *string `json:"stargazers_url,omitempty"`
-       StatusesURL      *string `json:"statuses_url,omitempty"`
-       SubscribersURL   *string `json:"subscribers_url,omitempty"`
-       SubscriptionURL  *string `json:"subscription_url,omitempty"`
-       TagsURL          *string `json:"tags_url,omitempty"`
-       TreesURL         *string `json:"trees_url,omitempty"`
-       TeamsURL         *string `json:"teams_url,omitempty"`
-
-       // TextMatches is only populated from search results that request text matches
-       // See: search.go and https://developer.github.com/v3/search/#text-match-metadata
-       TextMatches []*TextMatch `json:"text_matches,omitempty"`
-
-       // Visibility is only used for Create and Edit endpoints. The visibility field
-       // overrides the field parameter when both are used.
-       // Can be one of public, private or internal.
-       Visibility *string `json:"visibility,omitempty"`
-}
-
-func (r Repository) String() string {
-       return Stringify(r)
-}
-
-// BranchListOptions specifies the optional parameters to the
-// RepositoriesService.ListBranches method.
-type BranchListOptions struct {
-       // Setting to true returns only protected branches.
-       // When set to false, only unprotected branches are returned.
-       // Omitting this parameter returns all branches.
-       // Default: nil
-       Protected *bool `url:"protected,omitempty"`
-
-       ListOptions
-}
-
-// RepositoryListOptions specifies the optional parameters to the
-// RepositoriesService.List method.
-type RepositoryListOptions struct {
-       // Visibility of repositories to list. Can be one of all, public, or private.
-       // Default: all
-       Visibility string `url:"visibility,omitempty"`
-
-       // List repos of given affiliation[s].
-       // Comma-separated list of values. Can include:
-       // * owner: Repositories that are owned by the authenticated user.
-       // * collaborator: Repositories that the user has been added to as a
-       //   collaborator.
-       // * organization_member: Repositories that the user has access to through
-       //   being a member of an organization. This includes every repository on
-       //   every team that the user is on.
-       // Default: owner,collaborator,organization_member
-       Affiliation string `url:"affiliation,omitempty"`
-
-       // Type of repositories to list.
-       // Can be one of all, owner, public, private, member. Default: all
-       // Will cause a 422 error if used in the same request as visibility or
-       // affiliation.
-       Type string `url:"type,omitempty"`
-
-       // How to sort the repository list. Can be one of created, updated, pushed,
-       // full_name. Default: full_name
-       Sort string `url:"sort,omitempty"`
-
-       // Direction in which to sort repositories. Can be one of asc or desc.
-       // Default: when using full_name: asc; otherwise desc
-       Direction string `url:"direction,omitempty"`
-
-       ListOptions
-}
-
-// List the repositories for a user. Passing the empty string will list
-// repositories for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#list-repositories-for-a-user
-// GitHub API docs: https://developer.github.com/v3/repos/#list-repositories-for-the-authenticated-user
-func (s *RepositoriesService) List(ctx context.Context, user string, opts *RepositoryListOptions) ([]*Repository, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v/repos", user)
-       } else {
-               u = "user/repos"
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       acceptHeaders := []string{mediaTypeTopicsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var repos []*Repository
-       resp, err := s.client.Do(ctx, req, &repos)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repos, resp, nil
-}
-
-// RepositoryListByOrgOptions specifies the optional parameters to the
-// RepositoriesService.ListByOrg method.
-type RepositoryListByOrgOptions struct {
-       // Type of repositories to list. Possible values are: all, public, private,
-       // forks, sources, member. Default is "all".
-       Type string `url:"type,omitempty"`
-
-       // How to sort the repository list. Can be one of created, updated, pushed,
-       // full_name. Default is "created".
-       Sort string `url:"sort,omitempty"`
-
-       // Direction in which to sort repositories. Can be one of asc or desc.
-       // Default when using full_name: asc; otherwise desc.
-       Direction string `url:"direction,omitempty"`
-
-       ListOptions
-}
-
-// ListByOrg lists the repositories for an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#list-organization-repositories
-func (s *RepositoriesService) ListByOrg(ctx context.Context, org string, opts *RepositoryListByOrgOptions) ([]*Repository, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/repos", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       acceptHeaders := []string{mediaTypeTopicsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var repos []*Repository
-       resp, err := s.client.Do(ctx, req, &repos)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repos, resp, nil
-}
-
-// RepositoryListAllOptions specifies the optional parameters to the
-// RepositoriesService.ListAll method.
-type RepositoryListAllOptions struct {
-       // ID of the last repository seen
-       Since int64 `url:"since,omitempty"`
-}
-
-// ListAll lists all GitHub repositories in the order that they were created.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#list-public-repositories
-func (s *RepositoriesService) ListAll(ctx context.Context, opts *RepositoryListAllOptions) ([]*Repository, *Response, error) {
-       u, err := addOptions("repositories", opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var repos []*Repository
-       resp, err := s.client.Do(ctx, req, &repos)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repos, resp, nil
-}
-
-// createRepoRequest is a subset of Repository and is used internally
-// by Create to pass only the known fields for the endpoint.
-//
-// See https://github.com/google/go-github/issues/1014 for more
-// information.
-type createRepoRequest struct {
-       // Name is required when creating a repo.
-       Name        *string `json:"name,omitempty"`
-       Description *string `json:"description,omitempty"`
-       Homepage    *string `json:"homepage,omitempty"`
-
-       Private     *bool   `json:"private,omitempty"`
-       Visibility  *string `json:"visibility,omitempty"`
-       HasIssues   *bool   `json:"has_issues,omitempty"`
-       HasProjects *bool   `json:"has_projects,omitempty"`
-       HasWiki     *bool   `json:"has_wiki,omitempty"`
-       IsTemplate  *bool   `json:"is_template,omitempty"`
-
-       // Creating an organization repository. Required for non-owners.
-       TeamID *int64 `json:"team_id,omitempty"`
-
-       AutoInit            *bool   `json:"auto_init,omitempty"`
-       GitignoreTemplate   *string `json:"gitignore_template,omitempty"`
-       LicenseTemplate     *string `json:"license_template,omitempty"`
-       AllowSquashMerge    *bool   `json:"allow_squash_merge,omitempty"`
-       AllowMergeCommit    *bool   `json:"allow_merge_commit,omitempty"`
-       AllowRebaseMerge    *bool   `json:"allow_rebase_merge,omitempty"`
-       DeleteBranchOnMerge *bool   `json:"delete_branch_on_merge,omitempty"`
-}
-
-// Create a new repository. If an organization is specified, the new
-// repository will be created under that org. If the empty string is
-// specified, it will be created for the authenticated user.
-//
-// Note that only a subset of the repo fields are used and repo must
-// not be nil.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#create-a-repository-for-the-authenticated-user
-// GitHub API docs: https://developer.github.com/v3/repos/#create-an-organization-repository
-func (s *RepositoriesService) Create(ctx context.Context, org string, repo *Repository) (*Repository, *Response, error) {
-       var u string
-       if org != "" {
-               u = fmt.Sprintf("orgs/%v/repos", org)
-       } else {
-               u = "user/repos"
-       }
-
-       repoReq := &createRepoRequest{
-               Name:                repo.Name,
-               Description:         repo.Description,
-               Homepage:            repo.Homepage,
-               Private:             repo.Private,
-               Visibility:          repo.Visibility,
-               HasIssues:           repo.HasIssues,
-               HasProjects:         repo.HasProjects,
-               HasWiki:             repo.HasWiki,
-               IsTemplate:          repo.IsTemplate,
-               TeamID:              repo.TeamID,
-               AutoInit:            repo.AutoInit,
-               GitignoreTemplate:   repo.GitignoreTemplate,
-               LicenseTemplate:     repo.LicenseTemplate,
-               AllowSquashMerge:    repo.AllowSquashMerge,
-               AllowMergeCommit:    repo.AllowMergeCommit,
-               AllowRebaseMerge:    repo.AllowRebaseMerge,
-               DeleteBranchOnMerge: repo.DeleteBranchOnMerge,
-       }
-
-       req, err := s.client.NewRequest("POST", u, repoReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       acceptHeaders := []string{mediaTypeRepositoryTemplatePreview, mediaTypeRepositoryVisibilityPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-       r := new(Repository)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// TemplateRepoRequest represents a request to create a repository from a template.
-type TemplateRepoRequest struct {
-       // Name is required when creating a repo.
-       Name        *string `json:"name,omitempty"`
-       Owner       *string `json:"owner,omitempty"`
-       Description *string `json:"description,omitempty"`
-
-       Private *bool `json:"private,omitempty"`
-}
-
-// CreateFromTemplate generates a repository from a template.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#create-a-repository-using-a-template
-func (s *RepositoriesService) CreateFromTemplate(ctx context.Context, templateOwner, templateRepo string, templateRepoReq *TemplateRepoRequest) (*Repository, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/generate", templateOwner, templateRepo)
-
-       req, err := s.client.NewRequest("POST", u, templateRepoReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeRepositoryTemplatePreview)
-       r := new(Repository)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// Get fetches a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#get-a-repository
-func (s *RepositoriesService) Get(ctx context.Context, owner, repo string) (*Repository, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when the license support fully launches
-       // https://developer.github.com/v3/licenses/#get-a-repositorys-license
-       acceptHeaders := []string{
-               mediaTypeCodesOfConductPreview,
-               mediaTypeTopicsPreview,
-               mediaTypeRepositoryTemplatePreview,
-               mediaTypeRepositoryVisibilityPreview,
-       }
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       repository := new(Repository)
-       resp, err := s.client.Do(ctx, req, repository)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repository, resp, nil
-}
-
-// GetCodeOfConduct gets the contents of a repository's code of conduct.
-//
-// GitHub API docs: https://developer.github.com/v3/codes_of_conduct/#get-the-code-of-conduct-for-a-repository
-func (s *RepositoriesService) GetCodeOfConduct(ctx context.Context, owner, repo string) (*CodeOfConduct, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/community/code_of_conduct", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeCodesOfConductPreview)
-
-       coc := new(CodeOfConduct)
-       resp, err := s.client.Do(ctx, req, coc)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return coc, resp, nil
-}
-
-// GetByID fetches a repository.
-//
-// Note: GetByID uses the undocumented GitHub API endpoint /repositories/:id.
-func (s *RepositoriesService) GetByID(ctx context.Context, id int64) (*Repository, *Response, error) {
-       u := fmt.Sprintf("repositories/%d", id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       repository := new(Repository)
-       resp, err := s.client.Do(ctx, req, repository)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repository, resp, nil
-}
-
-// Edit updates a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#update-a-repository
-func (s *RepositoriesService) Edit(ctx context.Context, owner, repo string, repository *Repository) (*Repository, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v", owner, repo)
-       req, err := s.client.NewRequest("PATCH", u, repository)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       acceptHeaders := []string{mediaTypeRepositoryTemplatePreview, mediaTypeRepositoryVisibilityPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-       r := new(Repository)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// Delete a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#delete-a-repository
-func (s *RepositoriesService) Delete(ctx context.Context, owner, repo string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v", owner, repo)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// Contributor represents a repository contributor
-type Contributor struct {
-       Login             *string `json:"login,omitempty"`
-       ID                *int64  `json:"id,omitempty"`
-       NodeID            *string `json:"node_id,omitempty"`
-       AvatarURL         *string `json:"avatar_url,omitempty"`
-       GravatarID        *string `json:"gravatar_id,omitempty"`
-       URL               *string `json:"url,omitempty"`
-       HTMLURL           *string `json:"html_url,omitempty"`
-       FollowersURL      *string `json:"followers_url,omitempty"`
-       FollowingURL      *string `json:"following_url,omitempty"`
-       GistsURL          *string `json:"gists_url,omitempty"`
-       StarredURL        *string `json:"starred_url,omitempty"`
-       SubscriptionsURL  *string `json:"subscriptions_url,omitempty"`
-       OrganizationsURL  *string `json:"organizations_url,omitempty"`
-       ReposURL          *string `json:"repos_url,omitempty"`
-       EventsURL         *string `json:"events_url,omitempty"`
-       ReceivedEventsURL *string `json:"received_events_url,omitempty"`
-       Type              *string `json:"type,omitempty"`
-       SiteAdmin         *bool   `json:"site_admin,omitempty"`
-       Contributions     *int    `json:"contributions,omitempty"`
-}
-
-// ListContributorsOptions specifies the optional parameters to the
-// RepositoriesService.ListContributors method.
-type ListContributorsOptions struct {
-       // Include anonymous contributors in results or not
-       Anon string `url:"anon,omitempty"`
-
-       ListOptions
-}
-
-// GetVulnerabilityAlerts checks if vulnerability alerts are enabled for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#check-if-vulnerability-alerts-are-enabled-for-a-repository
-func (s *RepositoriesService) GetVulnerabilityAlerts(ctx context.Context, owner, repository string) (bool, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/vulnerability-alerts", owner, repository)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredVulnerabilityAlertsPreview)
-
-       resp, err := s.client.Do(ctx, req, nil)
-       vulnerabilityAlertsEnabled, err := parseBoolResponse(err)
-
-       return vulnerabilityAlertsEnabled, resp, err
-}
-
-// EnableVulnerabilityAlerts enables vulnerability alerts and the dependency graph for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#enable-vulnerability-alerts
-func (s *RepositoriesService) EnableVulnerabilityAlerts(ctx context.Context, owner, repository string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/vulnerability-alerts", owner, repository)
-
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredVulnerabilityAlertsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DisableVulnerabilityAlerts disables vulnerability alerts and the dependency graph for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#disable-vulnerability-alerts
-func (s *RepositoriesService) DisableVulnerabilityAlerts(ctx context.Context, owner, repository string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/vulnerability-alerts", owner, repository)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredVulnerabilityAlertsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// EnableAutomatedSecurityFixes enables the automated security fixes for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#enable-automated-security-fixes
-func (s *RepositoriesService) EnableAutomatedSecurityFixes(ctx context.Context, owner, repository string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/automated-security-fixes", owner, repository)
-
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredAutomatedSecurityFixesPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DisableAutomatedSecurityFixes disables vulnerability alerts and the dependency graph for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#disable-automated-security-fixes
-func (s *RepositoriesService) DisableAutomatedSecurityFixes(ctx context.Context, owner, repository string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/automated-security-fixes", owner, repository)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredAutomatedSecurityFixesPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListContributors lists contributors for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#list-repository-contributors
-func (s *RepositoriesService) ListContributors(ctx context.Context, owner string, repository string, opts *ListContributorsOptions) ([]*Contributor, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/contributors", owner, repository)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var contributor []*Contributor
-       resp, err := s.client.Do(ctx, req, &contributor)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       return contributor, resp, nil
-}
-
-// ListLanguages lists languages for the specified repository. The returned map
-// specifies the languages and the number of bytes of code written in that
-// language. For example:
-//
-//     {
-//       "C": 78769,
-//       "Python": 7769
-//     }
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#list-repository-languages
-func (s *RepositoriesService) ListLanguages(ctx context.Context, owner string, repo string) (map[string]int, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/languages", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       languages := make(map[string]int)
-       resp, err := s.client.Do(ctx, req, &languages)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return languages, resp, nil
-}
-
-// ListTeams lists the teams for the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#list-repository-teams
-func (s *RepositoriesService) ListTeams(ctx context.Context, owner string, repo string, opts *ListOptions) ([]*Team, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/teams", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var teams []*Team
-       resp, err := s.client.Do(ctx, req, &teams)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teams, resp, nil
-}
-
-// RepositoryTag represents a repository tag.
-type RepositoryTag struct {
-       Name       *string `json:"name,omitempty"`
-       Commit     *Commit `json:"commit,omitempty"`
-       ZipballURL *string `json:"zipball_url,omitempty"`
-       TarballURL *string `json:"tarball_url,omitempty"`
-}
-
-// ListTags lists tags for the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#list-repository-tags
-func (s *RepositoriesService) ListTags(ctx context.Context, owner string, repo string, opts *ListOptions) ([]*RepositoryTag, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/tags", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var tags []*RepositoryTag
-       resp, err := s.client.Do(ctx, req, &tags)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return tags, resp, nil
-}
-
-// Branch represents a repository branch
-type Branch struct {
-       Name      *string           `json:"name,omitempty"`
-       Commit    *RepositoryCommit `json:"commit,omitempty"`
-       Protected *bool             `json:"protected,omitempty"`
-}
-
-// Protection represents a repository branch's protection.
-type Protection struct {
-       RequiredStatusChecks       *RequiredStatusChecks          `json:"required_status_checks"`
-       RequiredPullRequestReviews *PullRequestReviewsEnforcement `json:"required_pull_request_reviews"`
-       EnforceAdmins              *AdminEnforcement              `json:"enforce_admins"`
-       Restrictions               *BranchRestrictions            `json:"restrictions"`
-       RequireLinearHistory       *RequireLinearHistory          `json:"required_linear_history"`
-       AllowForcePushes           *AllowForcePushes              `json:"allow_force_pushes"`
-       AllowDeletions             *AllowDeletions                `json:"allow_deletions"`
-}
-
-// ProtectionRequest represents a request to create/edit a branch's protection.
-type ProtectionRequest struct {
-       RequiredStatusChecks       *RequiredStatusChecks                 `json:"required_status_checks"`
-       RequiredPullRequestReviews *PullRequestReviewsEnforcementRequest `json:"required_pull_request_reviews"`
-       EnforceAdmins              bool                                  `json:"enforce_admins"`
-       Restrictions               *BranchRestrictionsRequest            `json:"restrictions"`
-       // Enforces a linear commit Git history, which prevents anyone from pushing merge commits to a branch.
-       RequireLinearHistory *bool `json:"required_linear_history,omitempty"`
-       // Permits force pushes to the protected branch by anyone with write access to the repository.
-       AllowForcePushes *bool `json:"allow_force_pushes,omitempty"`
-       // Allows deletion of the protected branch by anyone with write access to the repository.
-       AllowDeletions *bool `json:"allow_deletions,omitempty"`
-}
-
-// RequiredStatusChecks represents the protection status of a individual branch.
-type RequiredStatusChecks struct {
-       // Require branches to be up to date before merging. (Required.)
-       Strict bool `json:"strict"`
-       // The list of status checks to require in order to merge into this
-       // branch. (Required; use []string{} instead of nil for empty list.)
-       Contexts []string `json:"contexts"`
-}
-
-// RequiredStatusChecksRequest represents a request to edit a protected branch's status checks.
-type RequiredStatusChecksRequest struct {
-       Strict   *bool    `json:"strict,omitempty"`
-       Contexts []string `json:"contexts,omitempty"`
-}
-
-// PullRequestReviewsEnforcement represents the pull request reviews enforcement of a protected branch.
-type PullRequestReviewsEnforcement struct {
-       // Specifies which users and teams can dismiss pull request reviews.
-       DismissalRestrictions *DismissalRestrictions `json:"dismissal_restrictions,omitempty"`
-       // Specifies if approved reviews are dismissed automatically, when a new commit is pushed.
-       DismissStaleReviews bool `json:"dismiss_stale_reviews"`
-       // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner.
-       RequireCodeOwnerReviews bool `json:"require_code_owner_reviews"`
-       // RequiredApprovingReviewCount specifies the number of approvals required before the pull request can be merged.
-       // Valid values are 1-6.
-       RequiredApprovingReviewCount int `json:"required_approving_review_count"`
-}
-
-// PullRequestReviewsEnforcementRequest represents request to set the pull request review
-// enforcement of a protected branch. It is separate from PullRequestReviewsEnforcement above
-// because the request structure is different from the response structure.
-type PullRequestReviewsEnforcementRequest struct {
-       // Specifies which users and teams should be allowed to dismiss pull request reviews.
-       // User and team dismissal restrictions are only available for
-       // organization-owned repositories. Must be nil for personal repositories.
-       DismissalRestrictionsRequest *DismissalRestrictionsRequest `json:"dismissal_restrictions,omitempty"`
-       // Specifies if approved reviews can be dismissed automatically, when a new commit is pushed. (Required)
-       DismissStaleReviews bool `json:"dismiss_stale_reviews"`
-       // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner.
-       RequireCodeOwnerReviews bool `json:"require_code_owner_reviews"`
-       // RequiredApprovingReviewCount specifies the number of approvals required before the pull request can be merged.
-       // Valid values are 1-6.
-       RequiredApprovingReviewCount int `json:"required_approving_review_count"`
-}
-
-// PullRequestReviewsEnforcementUpdate represents request to patch the pull request review
-// enforcement of a protected branch. It is separate from PullRequestReviewsEnforcementRequest above
-// because the patch request does not require all fields to be initialized.
-type PullRequestReviewsEnforcementUpdate struct {
-       // Specifies which users and teams can dismiss pull request reviews. Can be omitted.
-       DismissalRestrictionsRequest *DismissalRestrictionsRequest `json:"dismissal_restrictions,omitempty"`
-       // Specifies if approved reviews can be dismissed automatically, when a new commit is pushed. Can be omitted.
-       DismissStaleReviews *bool `json:"dismiss_stale_reviews,omitempty"`
-       // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner.
-       RequireCodeOwnerReviews bool `json:"require_code_owner_reviews,omitempty"`
-       // RequiredApprovingReviewCount specifies the number of approvals required before the pull request can be merged.
-       // Valid values are 1 - 6.
-       RequiredApprovingReviewCount int `json:"required_approving_review_count"`
-}
-
-// RequireLinearHistory represents the configuration to enfore branches with no merge commit.
-type RequireLinearHistory struct {
-       Enabled bool `json:"enabled"`
-}
-
-// AllowDeletions represents the configuration to accept deletion of protected branches.
-type AllowDeletions struct {
-       Enabled bool `json:"enabled"`
-}
-
-// AllowForcePushes represents the configuration to accept forced pushes on protected branches.
-type AllowForcePushes struct {
-       Enabled bool `json:"enabled"`
-}
-
-// AdminEnforcement represents the configuration to enforce required status checks for repository administrators.
-type AdminEnforcement struct {
-       URL     *string `json:"url,omitempty"`
-       Enabled bool    `json:"enabled"`
-}
-
-// BranchRestrictions represents the restriction that only certain users or
-// teams may push to a branch.
-type BranchRestrictions struct {
-       // The list of user logins with push access.
-       Users []*User `json:"users"`
-       // The list of team slugs with push access.
-       Teams []*Team `json:"teams"`
-       // The list of app slugs with push access.
-       Apps []*App `json:"apps"`
-}
-
-// BranchRestrictionsRequest represents the request to create/edit the
-// restriction that only certain users or teams may push to a branch. It is
-// separate from BranchRestrictions above because the request structure is
-// different from the response structure.
-type BranchRestrictionsRequest struct {
-       // The list of user logins with push access. (Required; use []string{} instead of nil for empty list.)
-       Users []string `json:"users"`
-       // The list of team slugs with push access. (Required; use []string{} instead of nil for empty list.)
-       Teams []string `json:"teams"`
-       // The list of app slugs with push access.
-       Apps []string `json:"apps,omitempty"`
-}
-
-// DismissalRestrictions specifies which users and teams can dismiss pull request reviews.
-type DismissalRestrictions struct {
-       // The list of users who can dimiss pull request reviews.
-       Users []*User `json:"users"`
-       // The list of teams which can dismiss pull request reviews.
-       Teams []*Team `json:"teams"`
-}
-
-// DismissalRestrictionsRequest represents the request to create/edit the
-// restriction to allows only specific users or teams to dimiss pull request reviews. It is
-// separate from DismissalRestrictions above because the request structure is
-// different from the response structure.
-// Note: Both Users and Teams must be nil, or both must be non-nil.
-type DismissalRestrictionsRequest struct {
-       // The list of user logins who can dismiss pull request reviews. (Required; use nil to disable dismissal_restrictions or &[]string{} otherwise.)
-       Users *[]string `json:"users,omitempty"`
-       // The list of team slugs which can dismiss pull request reviews. (Required; use nil to disable dismissal_restrictions or &[]string{} otherwise.)
-       Teams *[]string `json:"teams,omitempty"`
-}
-
-// SignaturesProtectedBranch represents the protection status of an individual branch.
-type SignaturesProtectedBranch struct {
-       URL *string `json:"url,omitempty"`
-       // Commits pushed to matching branches must have verified signatures.
-       Enabled *bool `json:"enabled,omitempty"`
-}
-
-// ListBranches lists branches for the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#list-branches
-func (s *RepositoriesService) ListBranches(ctx context.Context, owner string, repo string, opts *BranchListOptions) ([]*Branch, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       var branches []*Branch
-       resp, err := s.client.Do(ctx, req, &branches)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return branches, resp, nil
-}
-
-// GetBranch gets the specified branch for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-a-branch
-func (s *RepositoriesService) GetBranch(ctx context.Context, owner, repo, branch string) (*Branch, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v", owner, repo, branch)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       b := new(Branch)
-       resp, err := s.client.Do(ctx, req, b)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return b, resp, nil
-}
-
-// GetBranchProtection gets the protection of a given branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-branch-protection
-func (s *RepositoriesService) GetBranchProtection(ctx context.Context, owner, repo, branch string) (*Protection, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       p := new(Protection)
-       resp, err := s.client.Do(ctx, req, p)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return p, resp, nil
-}
-
-// GetRequiredStatusChecks gets the required status checks for a given protected branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-status-checks-protection
-func (s *RepositoriesService) GetRequiredStatusChecks(ctx context.Context, owner, repo, branch string) (*RequiredStatusChecks, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks", owner, repo, branch)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       p := new(RequiredStatusChecks)
-       resp, err := s.client.Do(ctx, req, p)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return p, resp, nil
-}
-
-// ListRequiredStatusChecksContexts lists the required status checks contexts for a given protected branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-all-status-check-contexts
-func (s *RepositoriesService) ListRequiredStatusChecksContexts(ctx context.Context, owner, repo, branch string) (contexts []string, resp *Response, err error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks/contexts", owner, repo, branch)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       resp, err = s.client.Do(ctx, req, &contexts)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return contexts, resp, nil
-}
-
-// UpdateBranchProtection updates the protection of a given branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-branch-protection
-func (s *RepositoriesService) UpdateBranchProtection(ctx context.Context, owner, repo, branch string, preq *ProtectionRequest) (*Protection, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch)
-       req, err := s.client.NewRequest("PUT", u, preq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       p := new(Protection)
-       resp, err := s.client.Do(ctx, req, p)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return p, resp, nil
-}
-
-// RemoveBranchProtection removes the protection of a given branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#delete-branch-protection
-func (s *RepositoriesService) RemoveBranchProtection(ctx context.Context, owner, repo, branch string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// GetSignaturesProtectedBranch gets required signatures of protected branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-commit-signature-protection
-func (s *RepositoriesService) GetSignaturesProtectedBranch(ctx context.Context, owner, repo, branch string) (*SignaturesProtectedBranch, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_signatures", owner, repo, branch)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeSignaturePreview)
-
-       p := new(SignaturesProtectedBranch)
-       resp, err := s.client.Do(ctx, req, p)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return p, resp, nil
-}
-
-// RequireSignaturesOnProtectedBranch makes signed commits required on a protected branch.
-// It requires admin access and branch protection to be enabled.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#create-commit-signature-protection
-func (s *RepositoriesService) RequireSignaturesOnProtectedBranch(ctx context.Context, owner, repo, branch string) (*SignaturesProtectedBranch, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_signatures", owner, repo, branch)
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeSignaturePreview)
-
-       r := new(SignaturesProtectedBranch)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, err
-}
-
-// OptionalSignaturesOnProtectedBranch removes required signed commits on a given branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#delete-commit-signature-protection
-func (s *RepositoriesService) OptionalSignaturesOnProtectedBranch(ctx context.Context, owner, repo, branch string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_signatures", owner, repo, branch)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeSignaturePreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// UpdateRequiredStatusChecks updates the required status checks for a given protected branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-status-check-potection
-func (s *RepositoriesService) UpdateRequiredStatusChecks(ctx context.Context, owner, repo, branch string, sreq *RequiredStatusChecksRequest) (*RequiredStatusChecks, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks", owner, repo, branch)
-       req, err := s.client.NewRequest("PATCH", u, sreq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       sc := new(RequiredStatusChecks)
-       resp, err := s.client.Do(ctx, req, sc)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return sc, resp, nil
-}
-
-// License gets the contents of a repository's license if one is detected.
-//
-// GitHub API docs: https://developer.github.com/v3/licenses/#get-the-license-for-a-repository
-func (s *RepositoriesService) License(ctx context.Context, owner, repo string) (*RepositoryLicense, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/license", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := &RepositoryLicense{}
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// GetPullRequestReviewEnforcement gets pull request review enforcement of a protected branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-pull-request-review-protection
-func (s *RepositoriesService) GetPullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string) (*PullRequestReviewsEnforcement, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       r := new(PullRequestReviewsEnforcement)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// UpdatePullRequestReviewEnforcement patches pull request review enforcement of a protected branch.
-// It requires admin access and branch protection to be enabled.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-pull-request-review-protection
-func (s *RepositoriesService) UpdatePullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string, patch *PullRequestReviewsEnforcementUpdate) (*PullRequestReviewsEnforcement, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch)
-       req, err := s.client.NewRequest("PATCH", u, patch)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       r := new(PullRequestReviewsEnforcement)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, err
-}
-
-// DisableDismissalRestrictions disables dismissal restrictions of a protected branch.
-// It requires admin access and branch protection to be enabled.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-pull-request-review-protection
-func (s *RepositoriesService) DisableDismissalRestrictions(ctx context.Context, owner, repo, branch string) (*PullRequestReviewsEnforcement, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch)
-
-       data := new(struct {
-               DismissalRestrictionsRequest `json:"dismissal_restrictions"`
-       })
-
-       req, err := s.client.NewRequest("PATCH", u, data)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       r := new(PullRequestReviewsEnforcement)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, err
-}
-
-// RemovePullRequestReviewEnforcement removes pull request enforcement of a protected branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#delete-pull-request-review-protection
-func (s *RepositoriesService) RemovePullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// GetAdminEnforcement gets admin enforcement information of a protected branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-admin-branch-protection
-func (s *RepositoriesService) GetAdminEnforcement(ctx context.Context, owner, repo, branch string) (*AdminEnforcement, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       r := new(AdminEnforcement)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// AddAdminEnforcement adds admin enforcement to a protected branch.
-// It requires admin access and branch protection to be enabled.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#set-admin-branch-protection
-func (s *RepositoriesService) AddAdminEnforcement(ctx context.Context, owner, repo, branch string) (*AdminEnforcement, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch)
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       r := new(AdminEnforcement)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, err
-}
-
-// RemoveAdminEnforcement removes admin enforcement from a protected branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#delete-admin-branch-protection
-func (s *RepositoriesService) RemoveAdminEnforcement(ctx context.Context, owner, repo, branch string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches
-       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// repositoryTopics represents a collection of repository topics.
-type repositoryTopics struct {
-       Names []string `json:"names"`
-}
-
-// ListAllTopics lists topics for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#get-all-repository-topics
-func (s *RepositoriesService) ListAllTopics(ctx context.Context, owner, repo string) ([]string, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/topics", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeTopicsPreview)
-
-       topics := new(repositoryTopics)
-       resp, err := s.client.Do(ctx, req, topics)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return topics.Names, resp, nil
-}
-
-// ReplaceAllTopics replaces topics for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#replace-all-repository-topics
-func (s *RepositoriesService) ReplaceAllTopics(ctx context.Context, owner, repo string, topics []string) ([]string, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/topics", owner, repo)
-       t := &repositoryTopics{
-               Names: topics,
-       }
-       if t.Names == nil {
-               t.Names = []string{}
-       }
-       req, err := s.client.NewRequest("PUT", u, t)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeTopicsPreview)
-
-       t = new(repositoryTopics)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t.Names, resp, nil
-}
-
-// ListApps lists the Github apps that have push access to a given protected branch.
-// It requires the Github apps to have `write` access to the `content` permission.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#list-apps-with-access-to-the-protected-branch
-func (s *RepositoriesService) ListApps(ctx context.Context, owner, repo, branch string) ([]*App, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/restrictions/apps", owner, repo, branch)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var apps []*App
-       resp, err := s.client.Do(ctx, req, &apps)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return apps, resp, nil
-}
-
-// ReplaceAppRestrictions replaces the apps that have push access to a given protected branch.
-// It removes all apps that previously had push access and grants push access to the new list of apps.
-// It requires the Github apps to have `write` access to the `content` permission.
-//
-// Note: The list of users, apps, and teams in total is limited to 100 items.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#set-app-access-restrictions
-func (s *RepositoriesService) ReplaceAppRestrictions(ctx context.Context, owner, repo, branch string, slug []string) ([]*App, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/restrictions/apps", owner, repo, branch)
-       req, err := s.client.NewRequest("PUT", u, slug)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var apps []*App
-       resp, err := s.client.Do(ctx, req, &apps)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       return apps, resp, nil
-}
-
-// AddAppRestrictions grants the specified apps push access to a given protected branch.
-// It requires the Github apps to have `write` access to the `content` permission.
-//
-// Note: The list of users, apps, and teams in total is limited to 100 items.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#add-app-access-restrictions
-func (s *RepositoriesService) AddAppRestrictions(ctx context.Context, owner, repo, branch string, slug []string) ([]*App, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/restrictions/apps", owner, repo, branch)
-       req, err := s.client.NewRequest("POST", u, slug)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var apps []*App
-       resp, err := s.client.Do(ctx, req, &apps)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       return apps, resp, nil
-}
-
-// RemoveAppRestrictions removes the ability of an app to push to this branch.
-// It requires the Github apps to have `write` access to the `content` permission.
-//
-// Note: The list of users, apps, and teams in total is limited to 100 items.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/branches/#remove-app-access-restrictions
-func (s *RepositoriesService) RemoveAppRestrictions(ctx context.Context, owner, repo, branch string, slug []string) ([]*App, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/restrictions/apps", owner, repo, branch)
-       req, err := s.client.NewRequest("DELETE", u, slug)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var apps []*App
-       resp, err := s.client.Do(ctx, req, &apps)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       return apps, resp, nil
-}
-
-// TransferRequest represents a request to transfer a repository.
-type TransferRequest struct {
-       NewOwner string  `json:"new_owner"`
-       TeamID   []int64 `json:"team_ids,omitempty"`
-}
-
-// Transfer transfers a repository from one account or organization to another.
-//
-// This method might return an *AcceptedError and a status code of
-// 202. This is because this is the status that GitHub returns to signify that
-// it has now scheduled the transfer of the repository in a background task.
-// A follow up request, after a delay of a second or so, should result
-// in a successful request.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#transfer-a-repository
-func (s *RepositoriesService) Transfer(ctx context.Context, owner, repo string, transfer TransferRequest) (*Repository, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/transfer", owner, repo)
-
-       req, err := s.client.NewRequest("POST", u, &transfer)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := new(Repository)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
-
-// DispatchRequestOptions represents a request to trigger a repository_dispatch event.
-type DispatchRequestOptions struct {
-       // EventType is a custom webhook event name. (Required.)
-       EventType string `json:"event_type"`
-       // ClientPayload is a custom JSON payload with extra information about the webhook event.
-       // Defaults to an empty JSON object.
-       ClientPayload *json.RawMessage `json:"client_payload,omitempty"`
-}
-
-// Dispatch triggers a repository_dispatch event in a GitHub Actions workflow.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/#create-a-repository-dispatch-event
-func (s *RepositoriesService) Dispatch(ctx context.Context, owner, repo string, opts DispatchRequestOptions) (*Repository, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/dispatches", owner, repo)
-
-       req, err := s.client.NewRequest("POST", u, &opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := new(Repository)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return r, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_collaborators.go b/vendor/github.com/google/go-github/v32/github/repos_collaborators.go
deleted file mode 100644 (file)
index ec8e685..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListCollaboratorsOptions specifies the optional parameters to the
-// RepositoriesService.ListCollaborators method.
-type ListCollaboratorsOptions struct {
-       // Affiliation specifies how collaborators should be filtered by their affiliation.
-       // Possible values are:
-       //     outside - All outside collaborators of an organization-owned repository
-       //     direct - All collaborators with permissions to an organization-owned repository,
-       //              regardless of organization membership status
-       //     all - All collaborators the authenticated user can see
-       //
-       // Default value is "all".
-       Affiliation string `url:"affiliation,omitempty"`
-
-       ListOptions
-}
-
-// CollaboratorInvitation represents an invitation created when adding a collaborator.
-// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#response-when-a-new-invitation-is-created
-type CollaboratorInvitation struct {
-       ID          *int64      `json:"id,omitempty"`
-       Repo        *Repository `json:"repository,omitempty"`
-       Invitee     *User       `json:"invitee,omitempty"`
-       Inviter     *User       `json:"inviter,omitempty"`
-       Permissions *string     `json:"permissions,omitempty"`
-       CreatedAt   *Timestamp  `json:"created_at,omitempty"`
-       URL         *string     `json:"url,omitempty"`
-       HTMLURL     *string     `json:"html_url,omitempty"`
-}
-
-// ListCollaborators lists the GitHub users that have access to the repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#list-repository-collaborators
-func (s *RepositoriesService) ListCollaborators(ctx context.Context, owner, repo string, opts *ListCollaboratorsOptions) ([]*User, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/collaborators", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var users []*User
-       resp, err := s.client.Do(ctx, req, &users)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return users, resp, nil
-}
-
-// IsCollaborator checks whether the specified GitHub user has collaborator
-// access to the given repo.
-// Note: This will return false if the user is not a collaborator OR the user
-// is not a GitHub user.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#check-if-a-user-is-a-repository-collaborator
-func (s *RepositoriesService) IsCollaborator(ctx context.Context, owner, repo, user string) (bool, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-
-       resp, err := s.client.Do(ctx, req, nil)
-       isCollab, err := parseBoolResponse(err)
-       return isCollab, resp, err
-}
-
-// RepositoryPermissionLevel represents the permission level an organization
-// member has for a given repository.
-type RepositoryPermissionLevel struct {
-       // Possible values: "admin", "write", "read", "none"
-       Permission *string `json:"permission,omitempty"`
-
-       User *User `json:"user,omitempty"`
-}
-
-// GetPermissionLevel retrieves the specific permission level a collaborator has for a given repository.
-// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#get-repository-permissions-for-a-user
-func (s *RepositoriesService) GetPermissionLevel(ctx context.Context, owner, repo, user string) (*RepositoryPermissionLevel, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/collaborators/%v/permission", owner, repo, user)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       rpl := new(RepositoryPermissionLevel)
-       resp, err := s.client.Do(ctx, req, rpl)
-       if err != nil {
-               return nil, resp, err
-       }
-       return rpl, resp, nil
-}
-
-// RepositoryAddCollaboratorOptions specifies the optional parameters to the
-// RepositoriesService.AddCollaborator method.
-type RepositoryAddCollaboratorOptions struct {
-       // Permission specifies the permission to grant the user on this repository.
-       // Possible values are:
-       //     pull - team members can pull, but not push to or administer this repository
-       //     push - team members can pull and push, but not administer this repository
-       //     admin - team members can pull, push and administer this repository
-       //     maintain - team members can manage the repository without access to sensitive or destructive actions.
-       //     triage - team members can proactively manage issues and pull requests without write access.
-       //
-       // Default value is "push". This option is only valid for organization-owned repositories.
-       Permission string `json:"permission,omitempty"`
-}
-
-// AddCollaborator sends an invitation to the specified GitHub user
-// to become a collaborator to the given repo.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#add-a-repository-collaborator
-func (s *RepositoriesService) AddCollaborator(ctx context.Context, owner, repo, user string, opts *RepositoryAddCollaboratorOptions) (*CollaboratorInvitation, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-       acr := new(CollaboratorInvitation)
-       resp, err := s.client.Do(ctx, req, acr)
-       if err != nil {
-               return nil, resp, err
-       }
-       return acr, resp, nil
-}
-
-// RemoveCollaborator removes the specified GitHub user as collaborator from the given repo.
-// Note: Does not return error if a valid user that is not a collaborator is removed.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#remove-a-repository-collaborator
-func (s *RepositoriesService) RemoveCollaborator(ctx context.Context, owner, repo, user string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_comments.go b/vendor/github.com/google/go-github/v32/github/repos_comments.go
deleted file mode 100644 (file)
index 0ccdca3..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// RepositoryComment represents a comment for a commit, file, or line in a repository.
-type RepositoryComment struct {
-       HTMLURL   *string    `json:"html_url,omitempty"`
-       URL       *string    `json:"url,omitempty"`
-       ID        *int64     `json:"id,omitempty"`
-       NodeID    *string    `json:"node_id,omitempty"`
-       CommitID  *string    `json:"commit_id,omitempty"`
-       User      *User      `json:"user,omitempty"`
-       Reactions *Reactions `json:"reactions,omitempty"`
-       CreatedAt *time.Time `json:"created_at,omitempty"`
-       UpdatedAt *time.Time `json:"updated_at,omitempty"`
-
-       // User-mutable fields
-       Body *string `json:"body"`
-       // User-initialized fields
-       Path     *string `json:"path,omitempty"`
-       Position *int    `json:"position,omitempty"`
-}
-
-func (r RepositoryComment) String() string {
-       return Stringify(r)
-}
-
-// ListComments lists all the comments for the repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/comments/#list-commit-comments-for-a-repository
-func (s *RepositoriesService) ListComments(ctx context.Context, owner, repo string, opts *ListOptions) ([]*RepositoryComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/comments", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       var comments []*RepositoryComment
-       resp, err := s.client.Do(ctx, req, &comments)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comments, resp, nil
-}
-
-// ListCommitComments lists all the comments for a given commit SHA.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/comments/#list-commit-comments
-func (s *RepositoriesService) ListCommitComments(ctx context.Context, owner, repo, sha string, opts *ListOptions) ([]*RepositoryComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v/comments", owner, repo, sha)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       var comments []*RepositoryComment
-       resp, err := s.client.Do(ctx, req, &comments)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comments, resp, nil
-}
-
-// CreateComment creates a comment for the given commit.
-// Note: GitHub allows for comments to be created for non-existing files and positions.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/comments/#create-a-commit-comment
-func (s *RepositoriesService) CreateComment(ctx context.Context, owner, repo, sha string, comment *RepositoryComment) (*RepositoryComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v/comments", owner, repo, sha)
-       req, err := s.client.NewRequest("POST", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       c := new(RepositoryComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// GetComment gets a single comment from a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/comments/#get-a-commit-comment
-func (s *RepositoriesService) GetComment(ctx context.Context, owner, repo string, id int64) (*RepositoryComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeReactionsPreview)
-
-       c := new(RepositoryComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// UpdateComment updates the body of a single comment.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/comments/#update-a-commit-comment
-func (s *RepositoriesService) UpdateComment(ctx context.Context, owner, repo string, id int64, comment *RepositoryComment) (*RepositoryComment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id)
-       req, err := s.client.NewRequest("PATCH", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       c := new(RepositoryComment)
-       resp, err := s.client.Do(ctx, req, c)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return c, resp, nil
-}
-
-// DeleteComment deletes a single comment from a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/comments/#delete-a-commit-comment
-func (s *RepositoriesService) DeleteComment(ctx context.Context, owner, repo string, id int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_commits.go b/vendor/github.com/google/go-github/v32/github/repos_commits.go
deleted file mode 100644 (file)
index 07c071e..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "bytes"
-       "context"
-       "fmt"
-       "time"
-)
-
-// RepositoryCommit represents a commit in a repo.
-// Note that it's wrapping a Commit, so author/committer information is in two places,
-// but contain different details about them: in RepositoryCommit "github details", in Commit - "git details".
-type RepositoryCommit struct {
-       NodeID      *string   `json:"node_id,omitempty"`
-       SHA         *string   `json:"sha,omitempty"`
-       Commit      *Commit   `json:"commit,omitempty"`
-       Author      *User     `json:"author,omitempty"`
-       Committer   *User     `json:"committer,omitempty"`
-       Parents     []*Commit `json:"parents,omitempty"`
-       HTMLURL     *string   `json:"html_url,omitempty"`
-       URL         *string   `json:"url,omitempty"`
-       CommentsURL *string   `json:"comments_url,omitempty"`
-
-       // Details about how many changes were made in this commit. Only filled in during GetCommit!
-       Stats *CommitStats `json:"stats,omitempty"`
-       // Details about which files, and how this commit touched. Only filled in during GetCommit!
-       Files []*CommitFile `json:"files,omitempty"`
-}
-
-func (r RepositoryCommit) String() string {
-       return Stringify(r)
-}
-
-// CommitStats represents the number of additions / deletions from a file in a given RepositoryCommit or GistCommit.
-type CommitStats struct {
-       Additions *int `json:"additions,omitempty"`
-       Deletions *int `json:"deletions,omitempty"`
-       Total     *int `json:"total,omitempty"`
-}
-
-func (c CommitStats) String() string {
-       return Stringify(c)
-}
-
-// CommitFile represents a file modified in a commit.
-type CommitFile struct {
-       SHA              *string `json:"sha,omitempty"`
-       Filename         *string `json:"filename,omitempty"`
-       Additions        *int    `json:"additions,omitempty"`
-       Deletions        *int    `json:"deletions,omitempty"`
-       Changes          *int    `json:"changes,omitempty"`
-       Status           *string `json:"status,omitempty"`
-       Patch            *string `json:"patch,omitempty"`
-       BlobURL          *string `json:"blob_url,omitempty"`
-       RawURL           *string `json:"raw_url,omitempty"`
-       ContentsURL      *string `json:"contents_url,omitempty"`
-       PreviousFilename *string `json:"previous_filename,omitempty"`
-}
-
-func (c CommitFile) String() string {
-       return Stringify(c)
-}
-
-// CommitsComparison is the result of comparing two commits.
-// See CompareCommits() for details.
-type CommitsComparison struct {
-       BaseCommit      *RepositoryCommit `json:"base_commit,omitempty"`
-       MergeBaseCommit *RepositoryCommit `json:"merge_base_commit,omitempty"`
-
-       // Head can be 'behind' or 'ahead'
-       Status       *string `json:"status,omitempty"`
-       AheadBy      *int    `json:"ahead_by,omitempty"`
-       BehindBy     *int    `json:"behind_by,omitempty"`
-       TotalCommits *int    `json:"total_commits,omitempty"`
-
-       Commits []*RepositoryCommit `json:"commits,omitempty"`
-
-       Files []*CommitFile `json:"files,omitempty"`
-
-       HTMLURL      *string `json:"html_url,omitempty"`
-       PermalinkURL *string `json:"permalink_url,omitempty"`
-       DiffURL      *string `json:"diff_url,omitempty"`
-       PatchURL     *string `json:"patch_url,omitempty"`
-       URL          *string `json:"url,omitempty"` // API URL.
-}
-
-func (c CommitsComparison) String() string {
-       return Stringify(c)
-}
-
-// CommitsListOptions specifies the optional parameters to the
-// RepositoriesService.ListCommits method.
-type CommitsListOptions struct {
-       // SHA or branch to start listing Commits from.
-       SHA string `url:"sha,omitempty"`
-
-       // Path that should be touched by the returned Commits.
-       Path string `url:"path,omitempty"`
-
-       // Author of by which to filter Commits.
-       Author string `url:"author,omitempty"`
-
-       // Since when should Commits be included in the response.
-       Since time.Time `url:"since,omitempty"`
-
-       // Until when should Commits be included in the response.
-       Until time.Time `url:"until,omitempty"`
-
-       ListOptions
-}
-
-// BranchCommit is the result of listing branches with commit SHA.
-type BranchCommit struct {
-       Name      *string `json:"name,omitempty"`
-       Commit    *Commit `json:"commit,omitempty"`
-       Protected *bool   `json:"protected,omitempty"`
-}
-
-// ListCommits lists the commits of a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/commits/#list-commits
-func (s *RepositoriesService) ListCommits(ctx context.Context, owner, repo string, opts *CommitsListOptions) ([]*RepositoryCommit, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var commits []*RepositoryCommit
-       resp, err := s.client.Do(ctx, req, &commits)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return commits, resp, nil
-}
-
-// GetCommit fetches the specified commit, including all details about it.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/commits/#get-a-single-commit
-// GitHub API docs: https://developer.github.com/v3/repos/commits/#get-a-commit
-func (s *RepositoriesService) GetCommit(ctx context.Context, owner, repo, sha string) (*RepositoryCommit, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, sha)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       commit := new(RepositoryCommit)
-       resp, err := s.client.Do(ctx, req, commit)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return commit, resp, nil
-}
-
-// GetCommitRaw fetches the specified commit in raw (diff or patch) format.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/commits/#get-a-commit
-func (s *RepositoriesService) GetCommitRaw(ctx context.Context, owner string, repo string, sha string, opts RawOptions) (string, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, sha)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return "", nil, err
-       }
-
-       switch opts.Type {
-       case Diff:
-               req.Header.Set("Accept", mediaTypeV3Diff)
-       case Patch:
-               req.Header.Set("Accept", mediaTypeV3Patch)
-       default:
-               return "", nil, fmt.Errorf("unsupported raw type %d", opts.Type)
-       }
-
-       var buf bytes.Buffer
-       resp, err := s.client.Do(ctx, req, &buf)
-       if err != nil {
-               return "", resp, err
-       }
-
-       return buf.String(), resp, nil
-}
-
-// GetCommitSHA1 gets the SHA-1 of a commit reference. If a last-known SHA1 is
-// supplied and no new commits have occurred, a 304 Unmodified response is returned.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/commits/#get-a-commit
-func (s *RepositoriesService) GetCommitSHA1(ctx context.Context, owner, repo, ref, lastSHA string) (string, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, refURLEscape(ref))
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return "", nil, err
-       }
-       if lastSHA != "" {
-               req.Header.Set("If-None-Match", `"`+lastSHA+`"`)
-       }
-
-       req.Header.Set("Accept", mediaTypeV3SHA)
-
-       var buf bytes.Buffer
-       resp, err := s.client.Do(ctx, req, &buf)
-       if err != nil {
-               return "", resp, err
-       }
-
-       return buf.String(), resp, nil
-}
-
-// CompareCommits compares a range of commits with each other.
-// todo: support media formats - https://github.com/google/go-github/issues/6
-//
-// GitHub API docs: https://developer.github.com/v3/repos/commits/#compare-two-commits
-func (s *RepositoriesService) CompareCommits(ctx context.Context, owner, repo string, base, head string) (*CommitsComparison, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/compare/%v...%v", owner, repo, base, head)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       comp := new(CommitsComparison)
-       resp, err := s.client.Do(ctx, req, comp)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comp, resp, nil
-}
-
-// ListBranchesHeadCommit gets all branches where the given commit SHA is the HEAD,
-// or latest commit for the branch.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/commits/#list-branches-for-head-commit
-func (s *RepositoriesService) ListBranchesHeadCommit(ctx context.Context, owner, repo, sha string) ([]*BranchCommit, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v/branches-where-head", owner, repo, sha)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeListPullsOrBranchesForCommitPreview)
-       var branchCommits []*BranchCommit
-       resp, err := s.client.Do(ctx, req, &branchCommits)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return branchCommits, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_community_health.go b/vendor/github.com/google/go-github/v32/github/repos_community_health.go
deleted file mode 100644 (file)
index 255c6fe..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// Metric represents the different fields for one file in community health files.
-type Metric struct {
-       Name    *string `json:"name"`
-       Key     *string `json:"key"`
-       URL     *string `json:"url"`
-       HTMLURL *string `json:"html_url"`
-}
-
-// CommunityHealthFiles represents the different files in the community health metrics response.
-type CommunityHealthFiles struct {
-       CodeOfConduct       *Metric `json:"code_of_conduct"`
-       Contributing        *Metric `json:"contributing"`
-       IssueTemplate       *Metric `json:"issue_template"`
-       PullRequestTemplate *Metric `json:"pull_request_template"`
-       License             *Metric `json:"license"`
-       Readme              *Metric `json:"readme"`
-}
-
-// CommunityHealthMetrics represents a response containing the community metrics of a repository.
-type CommunityHealthMetrics struct {
-       HealthPercentage *int                  `json:"health_percentage"`
-       Files            *CommunityHealthFiles `json:"files"`
-       UpdatedAt        *time.Time            `json:"updated_at"`
-}
-
-// GetCommunityHealthMetrics retrieves all the community health  metrics for a  repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/community/#get-community-profile-metrics
-func (s *RepositoriesService) GetCommunityHealthMetrics(ctx context.Context, owner, repo string) (*CommunityHealthMetrics, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/community/profile", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeRepositoryCommunityHealthMetricsPreview)
-
-       metrics := &CommunityHealthMetrics{}
-       resp, err := s.client.Do(ctx, req, metrics)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return metrics, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_contents.go b/vendor/github.com/google/go-github/v32/github/repos_contents.go
deleted file mode 100644 (file)
index fd895ac..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Repository contents API methods.
-// GitHub API docs: https://developer.github.com/v3/repos/contents/
-
-package github
-
-import (
-       "context"
-       "encoding/base64"
-       "encoding/json"
-       "errors"
-       "fmt"
-       "io"
-       "net/http"
-       "net/url"
-       "path"
-)
-
-// RepositoryContent represents a file or directory in a github repository.
-type RepositoryContent struct {
-       Type *string `json:"type,omitempty"`
-       // Target is only set if the type is "symlink" and the target is not a normal file.
-       // If Target is set, Path will be the symlink path.
-       Target   *string `json:"target,omitempty"`
-       Encoding *string `json:"encoding,omitempty"`
-       Size     *int    `json:"size,omitempty"`
-       Name     *string `json:"name,omitempty"`
-       Path     *string `json:"path,omitempty"`
-       // Content contains the actual file content, which may be encoded.
-       // Callers should call GetContent which will decode the content if
-       // necessary.
-       Content     *string `json:"content,omitempty"`
-       SHA         *string `json:"sha,omitempty"`
-       URL         *string `json:"url,omitempty"`
-       GitURL      *string `json:"git_url,omitempty"`
-       HTMLURL     *string `json:"html_url,omitempty"`
-       DownloadURL *string `json:"download_url,omitempty"`
-}
-
-// RepositoryContentResponse holds the parsed response from CreateFile, UpdateFile, and DeleteFile.
-type RepositoryContentResponse struct {
-       Content *RepositoryContent `json:"content,omitempty"`
-       Commit  `json:"commit,omitempty"`
-}
-
-// RepositoryContentFileOptions specifies optional parameters for CreateFile, UpdateFile, and DeleteFile.
-type RepositoryContentFileOptions struct {
-       Message   *string       `json:"message,omitempty"`
-       Content   []byte        `json:"content,omitempty"` // unencoded
-       SHA       *string       `json:"sha,omitempty"`
-       Branch    *string       `json:"branch,omitempty"`
-       Author    *CommitAuthor `json:"author,omitempty"`
-       Committer *CommitAuthor `json:"committer,omitempty"`
-}
-
-// RepositoryContentGetOptions represents an optional ref parameter, which can be a SHA,
-// branch, or tag
-type RepositoryContentGetOptions struct {
-       Ref string `url:"ref,omitempty"`
-}
-
-// String converts RepositoryContent to a string. It's primarily for testing.
-func (r RepositoryContent) String() string {
-       return Stringify(r)
-}
-
-// GetContent returns the content of r, decoding it if necessary.
-func (r *RepositoryContent) GetContent() (string, error) {
-       var encoding string
-       if r.Encoding != nil {
-               encoding = *r.Encoding
-       }
-
-       switch encoding {
-       case "base64":
-               if r.Content == nil {
-                       return "", errors.New("malformed response: base64 encoding of null content")
-               }
-               c, err := base64.StdEncoding.DecodeString(*r.Content)
-               return string(c), err
-       case "":
-               if r.Content == nil {
-                       return "", nil
-               }
-               return *r.Content, nil
-       default:
-               return "", fmt.Errorf("unsupported content encoding: %v", encoding)
-       }
-}
-
-// GetReadme gets the Readme file for the repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/contents/#get-a-repository-readme
-func (s *RepositoriesService) GetReadme(ctx context.Context, owner, repo string, opts *RepositoryContentGetOptions) (*RepositoryContent, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/readme", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-       readme := new(RepositoryContent)
-       resp, err := s.client.Do(ctx, req, readme)
-       if err != nil {
-               return nil, resp, err
-       }
-       return readme, resp, nil
-}
-
-// DownloadContents returns an io.ReadCloser that reads the contents of the
-// specified file. This function will work with files of any size, as opposed
-// to GetContents which is limited to 1 Mb files. It is the caller's
-// responsibility to close the ReadCloser.
-func (s *RepositoriesService) DownloadContents(ctx context.Context, owner, repo, filepath string, opts *RepositoryContentGetOptions) (io.ReadCloser, error) {
-       dir := path.Dir(filepath)
-       filename := path.Base(filepath)
-       _, dirContents, _, err := s.GetContents(ctx, owner, repo, dir, opts)
-       if err != nil {
-               return nil, err
-       }
-       for _, contents := range dirContents {
-               if *contents.Name == filename {
-                       if contents.DownloadURL == nil || *contents.DownloadURL == "" {
-                               return nil, fmt.Errorf("No download link found for %s", filepath)
-                       }
-                       resp, err := s.client.client.Get(*contents.DownloadURL)
-                       if err != nil {
-                               return nil, err
-                       }
-                       return resp.Body, nil
-               }
-       }
-       return nil, fmt.Errorf("No file named %s found in %s", filename, dir)
-}
-
-// GetContents can return either the metadata and content of a single file
-// (when path references a file) or the metadata of all the files and/or
-// subdirectories of a directory (when path references a directory). To make it
-// easy to distinguish between both result types and to mimic the API as much
-// as possible, both result types will be returned but only one will contain a
-// value and the other will be nil.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/contents/#get-repository-content
-func (s *RepositoriesService) GetContents(ctx context.Context, owner, repo, path string, opts *RepositoryContentGetOptions) (fileContent *RepositoryContent, directoryContent []*RepositoryContent, resp *Response, err error) {
-       escapedPath := (&url.URL{Path: path}).String()
-       u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, escapedPath)
-       u, err = addOptions(u, opts)
-       if err != nil {
-               return nil, nil, nil, err
-       }
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, nil, err
-       }
-       var rawJSON json.RawMessage
-       resp, err = s.client.Do(ctx, req, &rawJSON)
-       if err != nil {
-               return nil, nil, resp, err
-       }
-       fileUnmarshalError := json.Unmarshal(rawJSON, &fileContent)
-       if fileUnmarshalError == nil {
-               return fileContent, nil, resp, nil
-       }
-       directoryUnmarshalError := json.Unmarshal(rawJSON, &directoryContent)
-       if directoryUnmarshalError == nil {
-               return nil, directoryContent, resp, nil
-       }
-       return nil, nil, resp, fmt.Errorf("unmarshalling failed for both file and directory content: %s and %s", fileUnmarshalError, directoryUnmarshalError)
-}
-
-// CreateFile creates a new file in a repository at the given path and returns
-// the commit and file metadata.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/contents/#create-or-update-file-contents
-func (s *RepositoriesService) CreateFile(ctx context.Context, owner, repo, path string, opts *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-       createResponse := new(RepositoryContentResponse)
-       resp, err := s.client.Do(ctx, req, createResponse)
-       if err != nil {
-               return nil, resp, err
-       }
-       return createResponse, resp, nil
-}
-
-// UpdateFile updates a file in a repository at the given path and returns the
-// commit and file metadata. Requires the blob SHA of the file being updated.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/contents/#create-or-update-file-contents
-func (s *RepositoriesService) UpdateFile(ctx context.Context, owner, repo, path string, opts *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-       updateResponse := new(RepositoryContentResponse)
-       resp, err := s.client.Do(ctx, req, updateResponse)
-       if err != nil {
-               return nil, resp, err
-       }
-       return updateResponse, resp, nil
-}
-
-// DeleteFile deletes a file from a repository and returns the commit.
-// Requires the blob SHA of the file to be deleted.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/contents/#delete-a-file
-func (s *RepositoriesService) DeleteFile(ctx context.Context, owner, repo, path string, opts *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path)
-       req, err := s.client.NewRequest("DELETE", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-       deleteResponse := new(RepositoryContentResponse)
-       resp, err := s.client.Do(ctx, req, deleteResponse)
-       if err != nil {
-               return nil, resp, err
-       }
-       return deleteResponse, resp, nil
-}
-
-// ArchiveFormat is used to define the archive type when calling GetArchiveLink.
-type ArchiveFormat string
-
-const (
-       // Tarball specifies an archive in gzipped tar format.
-       Tarball ArchiveFormat = "tarball"
-
-       // Zipball specifies an archive in zip format.
-       Zipball ArchiveFormat = "zipball"
-)
-
-// GetArchiveLink returns an URL to download a tarball or zipball archive for a
-// repository. The archiveFormat can be specified by either the github.Tarball
-// or github.Zipball constant.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/contents/#get-archive-link
-func (s *RepositoriesService) GetArchiveLink(ctx context.Context, owner, repo string, archiveformat ArchiveFormat, opts *RepositoryContentGetOptions, followRedirects bool) (*url.URL, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/%s", owner, repo, archiveformat)
-       if opts != nil && opts.Ref != "" {
-               u += fmt.Sprintf("/%s", opts.Ref)
-       }
-       resp, err := s.getArchiveLinkFromURL(ctx, u, followRedirects)
-       if err != nil {
-               return nil, nil, err
-       }
-       if resp.StatusCode != http.StatusFound {
-               return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status)
-       }
-       parsedURL, err := url.Parse(resp.Header.Get("Location"))
-       return parsedURL, newResponse(resp), err
-}
-
-func (s *RepositoriesService) getArchiveLinkFromURL(ctx context.Context, u string, followRedirects bool) (*http.Response, error) {
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       var resp *http.Response
-       // Use http.DefaultTransport if no custom Transport is configured
-       req = withContext(ctx, req)
-       if s.client.client.Transport == nil {
-               resp, err = http.DefaultTransport.RoundTrip(req)
-       } else {
-               resp, err = s.client.client.Transport.RoundTrip(req)
-       }
-       if err != nil {
-               return nil, err
-       }
-       resp.Body.Close()
-
-       // If redirect response is returned, follow it
-       if followRedirects && resp.StatusCode == http.StatusMovedPermanently {
-               u = resp.Header.Get("Location")
-               resp, err = s.getArchiveLinkFromURL(ctx, u, false)
-       }
-       return resp, err
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_deployments.go b/vendor/github.com/google/go-github/v32/github/repos_deployments.go
deleted file mode 100644 (file)
index 648c750..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-// Copyright 2014 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "encoding/json"
-       "fmt"
-       "strings"
-)
-
-// Deployment represents a deployment in a repo
-type Deployment struct {
-       URL           *string         `json:"url,omitempty"`
-       ID            *int64          `json:"id,omitempty"`
-       SHA           *string         `json:"sha,omitempty"`
-       Ref           *string         `json:"ref,omitempty"`
-       Task          *string         `json:"task,omitempty"`
-       Payload       json.RawMessage `json:"payload,omitempty"`
-       Environment   *string         `json:"environment,omitempty"`
-       Description   *string         `json:"description,omitempty"`
-       Creator       *User           `json:"creator,omitempty"`
-       CreatedAt     *Timestamp      `json:"created_at,omitempty"`
-       UpdatedAt     *Timestamp      `json:"updated_at,omitempty"`
-       StatusesURL   *string         `json:"statuses_url,omitempty"`
-       RepositoryURL *string         `json:"repository_url,omitempty"`
-       NodeID        *string         `json:"node_id,omitempty"`
-}
-
-// DeploymentRequest represents a deployment request
-type DeploymentRequest struct {
-       Ref                   *string     `json:"ref,omitempty"`
-       Task                  *string     `json:"task,omitempty"`
-       AutoMerge             *bool       `json:"auto_merge,omitempty"`
-       RequiredContexts      *[]string   `json:"required_contexts,omitempty"`
-       Payload               interface{} `json:"payload,omitempty"`
-       Environment           *string     `json:"environment,omitempty"`
-       Description           *string     `json:"description,omitempty"`
-       TransientEnvironment  *bool       `json:"transient_environment,omitempty"`
-       ProductionEnvironment *bool       `json:"production_environment,omitempty"`
-}
-
-// DeploymentsListOptions specifies the optional parameters to the
-// RepositoriesService.ListDeployments method.
-type DeploymentsListOptions struct {
-       // SHA of the Deployment.
-       SHA string `url:"sha,omitempty"`
-
-       // List deployments for a given ref.
-       Ref string `url:"ref,omitempty"`
-
-       // List deployments for a given task.
-       Task string `url:"task,omitempty"`
-
-       // List deployments for a given environment.
-       Environment string `url:"environment,omitempty"`
-
-       ListOptions
-}
-
-// ListDeployments lists the deployments of a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/deployments/#list-deployments
-func (s *RepositoriesService) ListDeployments(ctx context.Context, owner, repo string, opts *DeploymentsListOptions) ([]*Deployment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/deployments", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var deployments []*Deployment
-       resp, err := s.client.Do(ctx, req, &deployments)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return deployments, resp, nil
-}
-
-// GetDeployment returns a single deployment of a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/deployments/#get-a-deployment
-func (s *RepositoriesService) GetDeployment(ctx context.Context, owner, repo string, deploymentID int64) (*Deployment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/deployments/%v", owner, repo, deploymentID)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       deployment := new(Deployment)
-       resp, err := s.client.Do(ctx, req, deployment)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return deployment, resp, nil
-}
-
-// CreateDeployment creates a new deployment for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/deployments/#create-a-deployment
-func (s *RepositoriesService) CreateDeployment(ctx context.Context, owner, repo string, request *DeploymentRequest) (*Deployment, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/deployments", owner, repo)
-
-       req, err := s.client.NewRequest("POST", u, request)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       d := new(Deployment)
-       resp, err := s.client.Do(ctx, req, d)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return d, resp, nil
-}
-
-// DeleteDeployment deletes an existing deployment for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/deployments/#delete-a-deployment
-func (s *RepositoriesService) DeleteDeployment(ctx context.Context, owner, repo string, deploymentID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/deployments/%v", owner, repo, deploymentID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// DeploymentStatus represents the status of a
-// particular deployment.
-type DeploymentStatus struct {
-       ID *int64 `json:"id,omitempty"`
-       // State is the deployment state.
-       // Possible values are: "pending", "success", "failure", "error",
-       // "inactive", "in_progress", "queued".
-       State          *string    `json:"state,omitempty"`
-       Creator        *User      `json:"creator,omitempty"`
-       Description    *string    `json:"description,omitempty"`
-       Environment    *string    `json:"environment,omitempty"`
-       NodeID         *string    `json:"node_id,omitempty"`
-       CreatedAt      *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt      *Timestamp `json:"updated_at,omitempty"`
-       TargetURL      *string    `json:"target_url,omitempty"`
-       DeploymentURL  *string    `json:"deployment_url,omitempty"`
-       RepositoryURL  *string    `json:"repository_url,omitempty"`
-       EnvironmentURL *string    `json:"environment_url,omitempty"`
-       LogURL         *string    `json:"log_url,omitempty"`
-       URL            *string    `json:"url,omitempty"`
-}
-
-// DeploymentStatusRequest represents a deployment request
-type DeploymentStatusRequest struct {
-       State          *string `json:"state,omitempty"`
-       LogURL         *string `json:"log_url,omitempty"`
-       Description    *string `json:"description,omitempty"`
-       Environment    *string `json:"environment,omitempty"`
-       EnvironmentURL *string `json:"environment_url,omitempty"`
-       AutoInactive   *bool   `json:"auto_inactive,omitempty"`
-}
-
-// ListDeploymentStatuses lists the statuses of a given deployment of a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/deployments/#list-deployment-statuses
-func (s *RepositoriesService) ListDeploymentStatuses(ctx context.Context, owner, repo string, deployment int64, opts *ListOptions) ([]*DeploymentStatus, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses", owner, repo, deployment)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var statuses []*DeploymentStatus
-       resp, err := s.client.Do(ctx, req, &statuses)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return statuses, resp, nil
-}
-
-// GetDeploymentStatus returns a single deployment status of a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/deployments/#get-a-deployment-status
-func (s *RepositoriesService) GetDeploymentStatus(ctx context.Context, owner, repo string, deploymentID, deploymentStatusID int64) (*DeploymentStatus, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses/%v", owner, repo, deploymentID, deploymentStatusID)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       d := new(DeploymentStatus)
-       resp, err := s.client.Do(ctx, req, d)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return d, resp, nil
-}
-
-// CreateDeploymentStatus creates a new status for a deployment.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/deployments/#create-a-deployment-status
-func (s *RepositoriesService) CreateDeploymentStatus(ctx context.Context, owner, repo string, deployment int64, request *DeploymentStatusRequest) (*DeploymentStatus, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses", owner, repo, deployment)
-
-       req, err := s.client.NewRequest("POST", u, request)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       d := new(DeploymentStatus)
-       resp, err := s.client.Do(ctx, req, d)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return d, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_forks.go b/vendor/github.com/google/go-github/v32/github/repos_forks.go
deleted file mode 100644 (file)
index 5973587..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-
-       "encoding/json"
-)
-
-// RepositoryListForksOptions specifies the optional parameters to the
-// RepositoriesService.ListForks method.
-type RepositoryListForksOptions struct {
-       // How to sort the forks list. Possible values are: newest, oldest,
-       // watchers. Default is "newest".
-       Sort string `url:"sort,omitempty"`
-
-       ListOptions
-}
-
-// ListForks lists the forks of the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/forks/#list-forks
-func (s *RepositoriesService) ListForks(ctx context.Context, owner, repo string, opts *RepositoryListForksOptions) ([]*Repository, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/forks", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when topics API fully launches.
-       req.Header.Set("Accept", mediaTypeTopicsPreview)
-
-       var repos []*Repository
-       resp, err := s.client.Do(ctx, req, &repos)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repos, resp, nil
-}
-
-// RepositoryCreateForkOptions specifies the optional parameters to the
-// RepositoriesService.CreateFork method.
-type RepositoryCreateForkOptions struct {
-       // The organization to fork the repository into.
-       Organization string `url:"organization,omitempty"`
-}
-
-// CreateFork creates a fork of the specified repository.
-//
-// This method might return an *AcceptedError and a status code of
-// 202. This is because this is the status that GitHub returns to signify that
-// it is now computing creating the fork in a background task. In this event,
-// the Repository value will be returned, which includes the details about the pending fork.
-// A follow up request, after a delay of a second or so, should result
-// in a successful request.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/forks/#create-a-fork
-func (s *RepositoriesService) CreateFork(ctx context.Context, owner, repo string, opts *RepositoryCreateForkOptions) (*Repository, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/forks", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       fork := new(Repository)
-       resp, err := s.client.Do(ctx, req, fork)
-       if err != nil {
-               // Persist AcceptedError's metadata to the Repository object.
-               if aerr, ok := err.(*AcceptedError); ok {
-                       if err := json.Unmarshal(aerr.Raw, fork); err != nil {
-                               return fork, resp, err
-                       }
-
-                       return fork, resp, err
-               }
-               return nil, resp, err
-       }
-
-       return fork, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_hooks.go b/vendor/github.com/google/go-github/v32/github/repos_hooks.go
deleted file mode 100644 (file)
index 5c64027..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// WebHookPayload represents the data that is received from GitHub when a push
-// event hook is triggered. The format of these payloads pre-date most of the
-// GitHub v3 API, so there are lots of minor incompatibilities with the types
-// defined in the rest of the API. Therefore, several types are duplicated
-// here to account for these differences.
-//
-// GitHub API docs: https://help.github.com/articles/post-receive-hooks
-type WebHookPayload struct {
-       After      *string          `json:"after,omitempty"`
-       Before     *string          `json:"before,omitempty"`
-       Commits    []*WebHookCommit `json:"commits,omitempty"`
-       Compare    *string          `json:"compare,omitempty"`
-       Created    *bool            `json:"created,omitempty"`
-       Deleted    *bool            `json:"deleted,omitempty"`
-       Forced     *bool            `json:"forced,omitempty"`
-       HeadCommit *WebHookCommit   `json:"head_commit,omitempty"`
-       Pusher     *User            `json:"pusher,omitempty"`
-       Ref        *string          `json:"ref,omitempty"`
-       Repo       *Repository      `json:"repository,omitempty"`
-       Sender     *User            `json:"sender,omitempty"`
-}
-
-func (w WebHookPayload) String() string {
-       return Stringify(w)
-}
-
-// WebHookCommit represents the commit variant we receive from GitHub in a
-// WebHookPayload.
-type WebHookCommit struct {
-       Added     []string       `json:"added,omitempty"`
-       Author    *WebHookAuthor `json:"author,omitempty"`
-       Committer *WebHookAuthor `json:"committer,omitempty"`
-       Distinct  *bool          `json:"distinct,omitempty"`
-       ID        *string        `json:"id,omitempty"`
-       Message   *string        `json:"message,omitempty"`
-       Modified  []string       `json:"modified,omitempty"`
-       Removed   []string       `json:"removed,omitempty"`
-       Timestamp *time.Time     `json:"timestamp,omitempty"`
-}
-
-func (w WebHookCommit) String() string {
-       return Stringify(w)
-}
-
-// WebHookAuthor represents the author or committer of a commit, as specified
-// in a WebHookCommit. The commit author may not correspond to a GitHub User.
-type WebHookAuthor struct {
-       Email    *string `json:"email,omitempty"`
-       Name     *string `json:"name,omitempty"`
-       Username *string `json:"username,omitempty"`
-}
-
-func (w WebHookAuthor) String() string {
-       return Stringify(w)
-}
-
-// Hook represents a GitHub (web and service) hook for a repository.
-type Hook struct {
-       CreatedAt *time.Time `json:"created_at,omitempty"`
-       UpdatedAt *time.Time `json:"updated_at,omitempty"`
-       URL       *string    `json:"url,omitempty"`
-       ID        *int64     `json:"id,omitempty"`
-
-       // Only the following fields are used when creating a hook.
-       // Config is required.
-       Config map[string]interface{} `json:"config,omitempty"`
-       Events []string               `json:"events,omitempty"`
-       Active *bool                  `json:"active,omitempty"`
-}
-
-func (h Hook) String() string {
-       return Stringify(h)
-}
-
-// createHookRequest is a subset of Hook and is used internally
-// by CreateHook to pass only the known fields for the endpoint.
-//
-// See https://github.com/google/go-github/issues/1015 for more
-// information.
-type createHookRequest struct {
-       // Config is required.
-       Name   string                 `json:"name"`
-       Config map[string]interface{} `json:"config,omitempty"`
-       Events []string               `json:"events,omitempty"`
-       Active *bool                  `json:"active,omitempty"`
-}
-
-// CreateHook creates a Hook for the specified repository.
-// Config is a required field.
-//
-// Note that only a subset of the hook fields are used and hook must
-// not be nil.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/hooks/#create-a-repository-webhook
-func (s *RepositoriesService) CreateHook(ctx context.Context, owner, repo string, hook *Hook) (*Hook, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo)
-
-       hookReq := &createHookRequest{
-               Name:   "web",
-               Events: hook.Events,
-               Active: hook.Active,
-               Config: hook.Config,
-       }
-
-       req, err := s.client.NewRequest("POST", u, hookReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       h := new(Hook)
-       resp, err := s.client.Do(ctx, req, h)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return h, resp, nil
-}
-
-// ListHooks lists all Hooks for the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/hooks/#list-repository-webhooks
-func (s *RepositoriesService) ListHooks(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Hook, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var hooks []*Hook
-       resp, err := s.client.Do(ctx, req, &hooks)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return hooks, resp, nil
-}
-
-// GetHook returns a single specified Hook.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/hooks/#get-a-repository-webhook
-func (s *RepositoriesService) GetHook(ctx context.Context, owner, repo string, id int64) (*Hook, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-       h := new(Hook)
-       resp, err := s.client.Do(ctx, req, h)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return h, resp, nil
-}
-
-// EditHook updates a specified Hook.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/hooks/#update-a-repository-webhook
-func (s *RepositoriesService) EditHook(ctx context.Context, owner, repo string, id int64, hook *Hook) (*Hook, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id)
-       req, err := s.client.NewRequest("PATCH", u, hook)
-       if err != nil {
-               return nil, nil, err
-       }
-       h := new(Hook)
-       resp, err := s.client.Do(ctx, req, h)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return h, resp, nil
-}
-
-// DeleteHook deletes a specified Hook.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/hooks/#delete-a-repository-webhook
-func (s *RepositoriesService) DeleteHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// PingHook triggers a 'ping' event to be sent to the Hook.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/hooks/#ping-a-repository-webhook
-func (s *RepositoriesService) PingHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/hooks/%d/pings", owner, repo, id)
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// TestHook triggers a test Hook by github.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/hooks/#test-the-push-repository-webhook
-func (s *RepositoriesService) TestHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/hooks/%d/tests", owner, repo, id)
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_invitations.go b/vendor/github.com/google/go-github/v32/github/repos_invitations.go
deleted file mode 100644 (file)
index 98d72a8..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// RepositoryInvitation represents an invitation to collaborate on a repo.
-type RepositoryInvitation struct {
-       ID      *int64      `json:"id,omitempty"`
-       Repo    *Repository `json:"repository,omitempty"`
-       Invitee *User       `json:"invitee,omitempty"`
-       Inviter *User       `json:"inviter,omitempty"`
-
-       // Permissions represents the permissions that the associated user will have
-       // on the repository. Possible values are: "read", "write", "admin".
-       Permissions *string    `json:"permissions,omitempty"`
-       CreatedAt   *Timestamp `json:"created_at,omitempty"`
-       URL         *string    `json:"url,omitempty"`
-       HTMLURL     *string    `json:"html_url,omitempty"`
-}
-
-// ListInvitations lists all currently-open repository invitations.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/invitations/#list-repository-invitations
-func (s *RepositoriesService) ListInvitations(ctx context.Context, owner, repo string, opts *ListOptions) ([]*RepositoryInvitation, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/invitations", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       invites := []*RepositoryInvitation{}
-       resp, err := s.client.Do(ctx, req, &invites)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return invites, resp, nil
-}
-
-// DeleteInvitation deletes a repository invitation.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/invitations/#delete-a-repository-invitation
-func (s *RepositoriesService) DeleteInvitation(ctx context.Context, owner, repo string, invitationID int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/invitations/%v", owner, repo, invitationID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// UpdateInvitation updates the permissions associated with a repository
-// invitation.
-//
-// permissions represents the permissions that the associated user will have
-// on the repository. Possible values are: "read", "write", "admin".
-//
-// GitHub API docs: https://developer.github.com/v3/repos/invitations/#update-a-repository-invitation
-func (s *RepositoriesService) UpdateInvitation(ctx context.Context, owner, repo string, invitationID int64, permissions string) (*RepositoryInvitation, *Response, error) {
-       opts := &struct {
-               Permissions string `json:"permissions"`
-       }{Permissions: permissions}
-       u := fmt.Sprintf("repos/%v/%v/invitations/%v", owner, repo, invitationID)
-       req, err := s.client.NewRequest("PATCH", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       invite := &RepositoryInvitation{}
-       resp, err := s.client.Do(ctx, req, invite)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return invite, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_keys.go b/vendor/github.com/google/go-github/v32/github/repos_keys.go
deleted file mode 100644 (file)
index d35e602..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// The Key type is defined in users_keys.go
-
-// ListKeys lists the deploy keys for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/keys/#list-deploy-keys
-func (s *RepositoriesService) ListKeys(ctx context.Context, owner string, repo string, opts *ListOptions) ([]*Key, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/keys", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var keys []*Key
-       resp, err := s.client.Do(ctx, req, &keys)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return keys, resp, nil
-}
-
-// GetKey fetches a single deploy key.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/keys/#get-a-deploy-key
-func (s *RepositoriesService) GetKey(ctx context.Context, owner string, repo string, id int64) (*Key, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/keys/%v", owner, repo, id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       key := new(Key)
-       resp, err := s.client.Do(ctx, req, key)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return key, resp, nil
-}
-
-// CreateKey adds a deploy key for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/keys/#create-a-deploy-key
-func (s *RepositoriesService) CreateKey(ctx context.Context, owner string, repo string, key *Key) (*Key, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/keys", owner, repo)
-
-       req, err := s.client.NewRequest("POST", u, key)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       k := new(Key)
-       resp, err := s.client.Do(ctx, req, k)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return k, resp, nil
-}
-
-// DeleteKey deletes a deploy key.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/keys/#delete-a-deploy-key
-func (s *RepositoriesService) DeleteKey(ctx context.Context, owner string, repo string, id int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/keys/%v", owner, repo, id)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_merging.go b/vendor/github.com/google/go-github/v32/github/repos_merging.go
deleted file mode 100644 (file)
index b0a5dd0..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2014 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// RepositoryMergeRequest represents a request to merge a branch in a
-// repository.
-type RepositoryMergeRequest struct {
-       Base          *string `json:"base,omitempty"`
-       Head          *string `json:"head,omitempty"`
-       CommitMessage *string `json:"commit_message,omitempty"`
-}
-
-// Merge a branch in the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/merging/#merge-a-branch
-func (s *RepositoriesService) Merge(ctx context.Context, owner, repo string, request *RepositoryMergeRequest) (*RepositoryCommit, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/merges", owner, repo)
-       req, err := s.client.NewRequest("POST", u, request)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       commit := new(RepositoryCommit)
-       resp, err := s.client.Do(ctx, req, commit)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return commit, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_pages.go b/vendor/github.com/google/go-github/v32/github/repos_pages.go
deleted file mode 100644 (file)
index 8a3bc5a..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright 2014 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// Pages represents a GitHub Pages site configuration.
-type Pages struct {
-       URL       *string      `json:"url,omitempty"`
-       Status    *string      `json:"status,omitempty"`
-       CNAME     *string      `json:"cname,omitempty"`
-       Custom404 *bool        `json:"custom_404,omitempty"`
-       HTMLURL   *string      `json:"html_url,omitempty"`
-       Source    *PagesSource `json:"source,omitempty"`
-}
-
-// PagesSource represents a GitHub page's source.
-type PagesSource struct {
-       Branch *string `json:"branch,omitempty"`
-       Path   *string `json:"path,omitempty"`
-}
-
-// PagesError represents a build error for a GitHub Pages site.
-type PagesError struct {
-       Message *string `json:"message,omitempty"`
-}
-
-// PagesBuild represents the build information for a GitHub Pages site.
-type PagesBuild struct {
-       URL       *string     `json:"url,omitempty"`
-       Status    *string     `json:"status,omitempty"`
-       Error     *PagesError `json:"error,omitempty"`
-       Pusher    *User       `json:"pusher,omitempty"`
-       Commit    *string     `json:"commit,omitempty"`
-       Duration  *int        `json:"duration,omitempty"`
-       CreatedAt *Timestamp  `json:"created_at,omitempty"`
-       UpdatedAt *Timestamp  `json:"updated_at,omitempty"`
-}
-
-// createPagesRequest is a subset of Pages and is used internally
-// by EnablePages to pass only the known fields for the endpoint.
-type createPagesRequest struct {
-       Source *PagesSource `json:"source,omitempty"`
-}
-
-// EnablePages enables GitHub Pages for the named repo.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/pages/#create-a-github-pages-site
-func (s *RepositoriesService) EnablePages(ctx context.Context, owner, repo string, pages *Pages) (*Pages, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pages", owner, repo)
-
-       pagesReq := &createPagesRequest{
-               Source: pages.Source,
-       }
-
-       req, err := s.client.NewRequest("POST", u, pagesReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req.Header.Set("Accept", mediaTypeEnablePagesAPIPreview)
-
-       enable := new(Pages)
-       resp, err := s.client.Do(ctx, req, enable)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return enable, resp, nil
-}
-
-// PagesUpdate sets up parameters needed to update a GitHub Pages site.
-type PagesUpdate struct {
-       // CNAME represents a custom domain for the repository.
-       // Leaving CNAME empty will remove the custom domain.
-       CNAME *string `json:"cname"`
-       // Source must include the branch name, and may optionally specify the subdirectory "/docs".
-       // Possible values are: "gh-pages", "master", and "master /docs".
-       Source *string `json:"source,omitempty"`
-}
-
-// UpdatePages updates GitHub Pages for the named repo.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/pages/#update-information-about-a-github-pages-site
-func (s *RepositoriesService) UpdatePages(ctx context.Context, owner, repo string, opts *PagesUpdate) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pages", owner, repo)
-
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       resp, err := s.client.Do(ctx, req, nil)
-       if err != nil {
-               return resp, err
-       }
-
-       return resp, nil
-}
-
-// DisablePages disables GitHub Pages for the named repo.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/pages/#delete-a-github-pages-site
-func (s *RepositoriesService) DisablePages(ctx context.Context, owner, repo string) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pages", owner, repo)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeEnablePagesAPIPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// GetPagesInfo fetches information about a GitHub Pages site.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/pages/#get-a-github-pages-site
-func (s *RepositoriesService) GetPagesInfo(ctx context.Context, owner, repo string) (*Pages, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pages", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       site := new(Pages)
-       resp, err := s.client.Do(ctx, req, site)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return site, resp, nil
-}
-
-// ListPagesBuilds lists the builds for a GitHub Pages site.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/pages/#list-github-pages-builds
-func (s *RepositoriesService) ListPagesBuilds(ctx context.Context, owner, repo string, opts *ListOptions) ([]*PagesBuild, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pages/builds", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var pages []*PagesBuild
-       resp, err := s.client.Do(ctx, req, &pages)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return pages, resp, nil
-}
-
-// GetLatestPagesBuild fetches the latest build information for a GitHub pages site.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/pages/#get-latest-pages-build
-func (s *RepositoriesService) GetLatestPagesBuild(ctx context.Context, owner, repo string) (*PagesBuild, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pages/builds/latest", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       build := new(PagesBuild)
-       resp, err := s.client.Do(ctx, req, build)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return build, resp, nil
-}
-
-// GetPageBuild fetches the specific build information for a GitHub pages site.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/pages/#get-github-pages-build
-func (s *RepositoriesService) GetPageBuild(ctx context.Context, owner, repo string, id int64) (*PagesBuild, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pages/builds/%v", owner, repo, id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       build := new(PagesBuild)
-       resp, err := s.client.Do(ctx, req, build)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return build, resp, nil
-}
-
-// RequestPageBuild requests a build of a GitHub Pages site without needing to push new commit.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/pages/#request-a-github-pages-build
-func (s *RepositoriesService) RequestPageBuild(ctx context.Context, owner, repo string) (*PagesBuild, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pages/builds", owner, repo)
-       req, err := s.client.NewRequest("POST", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       build := new(PagesBuild)
-       resp, err := s.client.Do(ctx, req, build)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return build, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_prereceive_hooks.go b/vendor/github.com/google/go-github/v32/github/repos_prereceive_hooks.go
deleted file mode 100644 (file)
index 1ce6478..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2018 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// PreReceiveHook represents a GitHub pre-receive hook for a repository.
-type PreReceiveHook struct {
-       ID          *int64  `json:"id,omitempty"`
-       Name        *string `json:"name,omitempty"`
-       Enforcement *string `json:"enforcement,omitempty"`
-       ConfigURL   *string `json:"configuration_url,omitempty"`
-}
-
-func (p PreReceiveHook) String() string {
-       return Stringify(p)
-}
-
-// ListPreReceiveHooks lists all pre-receive hooks for the specified repository.
-//
-// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#list-pre-receive-hooks
-func (s *RepositoriesService) ListPreReceiveHooks(ctx context.Context, owner, repo string, opts *ListOptions) ([]*PreReceiveHook, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
-
-       var hooks []*PreReceiveHook
-       resp, err := s.client.Do(ctx, req, &hooks)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return hooks, resp, nil
-}
-
-// GetPreReceiveHook returns a single specified pre-receive hook.
-//
-// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#get-a-single-pre-receive-hook
-func (s *RepositoriesService) GetPreReceiveHook(ctx context.Context, owner, repo string, id int64) (*PreReceiveHook, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks/%d", owner, repo, id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
-
-       h := new(PreReceiveHook)
-       resp, err := s.client.Do(ctx, req, h)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return h, resp, nil
-}
-
-// UpdatePreReceiveHook updates a specified pre-receive hook.
-//
-// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#update-pre-receive-hook-enforcement
-func (s *RepositoriesService) UpdatePreReceiveHook(ctx context.Context, owner, repo string, id int64, hook *PreReceiveHook) (*PreReceiveHook, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks/%d", owner, repo, id)
-       req, err := s.client.NewRequest("PATCH", u, hook)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
-
-       h := new(PreReceiveHook)
-       resp, err := s.client.Do(ctx, req, h)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return h, resp, nil
-}
-
-// DeletePreReceiveHook deletes a specified pre-receive hook.
-//
-// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#remove-enforcement-overrides-for-a-pre-receive-hook
-func (s *RepositoriesService) DeletePreReceiveHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks/%d", owner, repo, id)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_projects.go b/vendor/github.com/google/go-github/v32/github/repos_projects.go
deleted file mode 100644 (file)
index 442f523..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ProjectListOptions specifies the optional parameters to the
-// OrganizationsService.ListProjects and RepositoriesService.ListProjects methods.
-type ProjectListOptions struct {
-       // Indicates the state of the projects to return. Can be either open, closed, or all. Default: open
-       State string `url:"state,omitempty"`
-
-       ListOptions
-}
-
-// ListProjects lists the projects for a repo.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/#list-repository-projects
-func (s *RepositoriesService) ListProjects(ctx context.Context, owner, repo string, opts *ProjectListOptions) ([]*Project, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/projects", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       var projects []*Project
-       resp, err := s.client.Do(ctx, req, &projects)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return projects, resp, nil
-}
-
-// CreateProject creates a GitHub Project for the specified repository.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/#create-a-repository-project
-func (s *RepositoriesService) CreateProject(ctx context.Context, owner, repo string, opts *ProjectOptions) (*Project, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/projects", owner, repo)
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept headers when APIs fully launch.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       project := &Project{}
-       resp, err := s.client.Do(ctx, req, project)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return project, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_releases.go b/vendor/github.com/google/go-github/v32/github/repos_releases.go
deleted file mode 100644 (file)
index de42952..0000000
+++ /dev/null
@@ -1,401 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "errors"
-       "fmt"
-       "io"
-       "mime"
-       "net/http"
-       "os"
-       "path/filepath"
-       "strings"
-)
-
-// RepositoryRelease represents a GitHub release in a repository.
-type RepositoryRelease struct {
-       TagName         *string `json:"tag_name,omitempty"`
-       TargetCommitish *string `json:"target_commitish,omitempty"`
-       Name            *string `json:"name,omitempty"`
-       Body            *string `json:"body,omitempty"`
-       Draft           *bool   `json:"draft,omitempty"`
-       Prerelease      *bool   `json:"prerelease,omitempty"`
-
-       // The following fields are not used in CreateRelease or EditRelease:
-       ID          *int64          `json:"id,omitempty"`
-       CreatedAt   *Timestamp      `json:"created_at,omitempty"`
-       PublishedAt *Timestamp      `json:"published_at,omitempty"`
-       URL         *string         `json:"url,omitempty"`
-       HTMLURL     *string         `json:"html_url,omitempty"`
-       AssetsURL   *string         `json:"assets_url,omitempty"`
-       Assets      []*ReleaseAsset `json:"assets,omitempty"`
-       UploadURL   *string         `json:"upload_url,omitempty"`
-       ZipballURL  *string         `json:"zipball_url,omitempty"`
-       TarballURL  *string         `json:"tarball_url,omitempty"`
-       Author      *User           `json:"author,omitempty"`
-       NodeID      *string         `json:"node_id,omitempty"`
-}
-
-func (r RepositoryRelease) String() string {
-       return Stringify(r)
-}
-
-// ReleaseAsset represents a GitHub release asset in a repository.
-type ReleaseAsset struct {
-       ID                 *int64     `json:"id,omitempty"`
-       URL                *string    `json:"url,omitempty"`
-       Name               *string    `json:"name,omitempty"`
-       Label              *string    `json:"label,omitempty"`
-       State              *string    `json:"state,omitempty"`
-       ContentType        *string    `json:"content_type,omitempty"`
-       Size               *int       `json:"size,omitempty"`
-       DownloadCount      *int       `json:"download_count,omitempty"`
-       CreatedAt          *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt          *Timestamp `json:"updated_at,omitempty"`
-       BrowserDownloadURL *string    `json:"browser_download_url,omitempty"`
-       Uploader           *User      `json:"uploader,omitempty"`
-       NodeID             *string    `json:"node_id,omitempty"`
-}
-
-func (r ReleaseAsset) String() string {
-       return Stringify(r)
-}
-
-// ListReleases lists the releases for a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#list-releases
-func (s *RepositoriesService) ListReleases(ctx context.Context, owner, repo string, opts *ListOptions) ([]*RepositoryRelease, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var releases []*RepositoryRelease
-       resp, err := s.client.Do(ctx, req, &releases)
-       if err != nil {
-               return nil, resp, err
-       }
-       return releases, resp, nil
-}
-
-// GetRelease fetches a single release.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-release
-func (s *RepositoriesService) GetRelease(ctx context.Context, owner, repo string, id int64) (*RepositoryRelease, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id)
-       return s.getSingleRelease(ctx, u)
-}
-
-// GetLatestRelease fetches the latest published release for the repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-the-latest-release
-func (s *RepositoriesService) GetLatestRelease(ctx context.Context, owner, repo string) (*RepositoryRelease, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/latest", owner, repo)
-       return s.getSingleRelease(ctx, u)
-}
-
-// GetReleaseByTag fetches a release with the specified tag.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-release-by-tag-name
-func (s *RepositoriesService) GetReleaseByTag(ctx context.Context, owner, repo, tag string) (*RepositoryRelease, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/tags/%s", owner, repo, tag)
-       return s.getSingleRelease(ctx, u)
-}
-
-func (s *RepositoriesService) getSingleRelease(ctx context.Context, url string) (*RepositoryRelease, *Response, error) {
-       req, err := s.client.NewRequest("GET", url, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       release := new(RepositoryRelease)
-       resp, err := s.client.Do(ctx, req, release)
-       if err != nil {
-               return nil, resp, err
-       }
-       return release, resp, nil
-}
-
-// repositoryReleaseRequest is a subset of RepositoryRelease and
-// is used internally by CreateRelease and EditRelease to pass
-// only the known fields for these endpoints.
-//
-// See https://github.com/google/go-github/issues/992 for more
-// information.
-type repositoryReleaseRequest struct {
-       TagName         *string `json:"tag_name,omitempty"`
-       TargetCommitish *string `json:"target_commitish,omitempty"`
-       Name            *string `json:"name,omitempty"`
-       Body            *string `json:"body,omitempty"`
-       Draft           *bool   `json:"draft,omitempty"`
-       Prerelease      *bool   `json:"prerelease,omitempty"`
-}
-
-// CreateRelease adds a new release for a repository.
-//
-// Note that only a subset of the release fields are used.
-// See RepositoryRelease for more information.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#create-a-release
-func (s *RepositoriesService) CreateRelease(ctx context.Context, owner, repo string, release *RepositoryRelease) (*RepositoryRelease, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases", owner, repo)
-
-       releaseReq := &repositoryReleaseRequest{
-               TagName:         release.TagName,
-               TargetCommitish: release.TargetCommitish,
-               Name:            release.Name,
-               Body:            release.Body,
-               Draft:           release.Draft,
-               Prerelease:      release.Prerelease,
-       }
-
-       req, err := s.client.NewRequest("POST", u, releaseReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := new(RepositoryRelease)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-       return r, resp, nil
-}
-
-// EditRelease edits a repository release.
-//
-// Note that only a subset of the release fields are used.
-// See RepositoryRelease for more information.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#update-a-release
-func (s *RepositoriesService) EditRelease(ctx context.Context, owner, repo string, id int64, release *RepositoryRelease) (*RepositoryRelease, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id)
-
-       releaseReq := &repositoryReleaseRequest{
-               TagName:         release.TagName,
-               TargetCommitish: release.TargetCommitish,
-               Name:            release.Name,
-               Body:            release.Body,
-               Draft:           release.Draft,
-               Prerelease:      release.Prerelease,
-       }
-
-       req, err := s.client.NewRequest("PATCH", u, releaseReq)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       r := new(RepositoryRelease)
-       resp, err := s.client.Do(ctx, req, r)
-       if err != nil {
-               return nil, resp, err
-       }
-       return r, resp, nil
-}
-
-// DeleteRelease delete a single release from a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#delete-a-release
-func (s *RepositoriesService) DeleteRelease(ctx context.Context, owner, repo string, id int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListReleaseAssets lists the release's assets.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#list-release-assets
-func (s *RepositoriesService) ListReleaseAssets(ctx context.Context, owner, repo string, id int64, opts *ListOptions) ([]*ReleaseAsset, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/%d/assets", owner, repo, id)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var assets []*ReleaseAsset
-       resp, err := s.client.Do(ctx, req, &assets)
-       if err != nil {
-               return nil, resp, err
-       }
-       return assets, resp, nil
-}
-
-// GetReleaseAsset fetches a single release asset.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-release-asset
-func (s *RepositoriesService) GetReleaseAsset(ctx context.Context, owner, repo string, id int64) (*ReleaseAsset, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       asset := new(ReleaseAsset)
-       resp, err := s.client.Do(ctx, req, asset)
-       if err != nil {
-               return nil, resp, err
-       }
-       return asset, resp, nil
-}
-
-// DownloadReleaseAsset downloads a release asset or returns a redirect URL.
-//
-// DownloadReleaseAsset returns an io.ReadCloser that reads the contents of the
-// specified release asset. It is the caller's responsibility to close the ReadCloser.
-// If a redirect is returned, the redirect URL will be returned as a string instead
-// of the io.ReadCloser. Exactly one of rc and redirectURL will be zero.
-//
-// followRedirectsClient can be passed to download the asset from a redirected
-// location. Passing http.DefaultClient is recommended unless special circumstances
-// exist, but it's possible to pass any http.Client. If nil is passed the
-// redirectURL will be returned instead.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-release-asset
-func (s *RepositoriesService) DownloadReleaseAsset(ctx context.Context, owner, repo string, id int64, followRedirectsClient *http.Client) (rc io.ReadCloser, redirectURL string, err error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, "", err
-       }
-       req.Header.Set("Accept", defaultMediaType)
-
-       s.client.clientMu.Lock()
-       defer s.client.clientMu.Unlock()
-
-       var loc string
-       saveRedirect := s.client.client.CheckRedirect
-       s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
-               loc = req.URL.String()
-               return errors.New("disable redirect")
-       }
-       defer func() { s.client.client.CheckRedirect = saveRedirect }()
-
-       req = withContext(ctx, req)
-       resp, err := s.client.client.Do(req)
-       if err != nil {
-               if !strings.Contains(err.Error(), "disable redirect") {
-                       return nil, "", err
-               }
-               if followRedirectsClient != nil {
-                       rc, err := s.downloadReleaseAssetFromURL(ctx, followRedirectsClient, loc)
-                       return rc, "", err
-               }
-               return nil, loc, nil // Intentionally return no error with valid redirect URL.
-       }
-
-       if err := CheckResponse(resp); err != nil {
-               resp.Body.Close()
-               return nil, "", err
-       }
-
-       return resp.Body, "", nil
-}
-
-func (s *RepositoriesService) downloadReleaseAssetFromURL(ctx context.Context, followRedirectsClient *http.Client, url string) (rc io.ReadCloser, err error) {
-       req, err := http.NewRequest("GET", url, nil)
-       if err != nil {
-               return nil, err
-       }
-       req = withContext(ctx, req)
-       req.Header.Set("Accept", "*/*")
-       resp, err := followRedirectsClient.Do(req)
-       if err != nil {
-               return nil, err
-       }
-       if err := CheckResponse(resp); err != nil {
-               resp.Body.Close()
-               return nil, err
-       }
-       return resp.Body, nil
-}
-
-// EditReleaseAsset edits a repository release asset.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#update-a-release-asset
-func (s *RepositoriesService) EditReleaseAsset(ctx context.Context, owner, repo string, id int64, release *ReleaseAsset) (*ReleaseAsset, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id)
-
-       req, err := s.client.NewRequest("PATCH", u, release)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       asset := new(ReleaseAsset)
-       resp, err := s.client.Do(ctx, req, asset)
-       if err != nil {
-               return nil, resp, err
-       }
-       return asset, resp, nil
-}
-
-// DeleteReleaseAsset delete a single release asset from a repository.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#delete-a-release-asset
-func (s *RepositoriesService) DeleteReleaseAsset(ctx context.Context, owner, repo string, id int64) (*Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-       return s.client.Do(ctx, req, nil)
-}
-
-// UploadReleaseAsset creates an asset by uploading a file into a release repository.
-// To upload assets that cannot be represented by an os.File, call NewUploadRequest directly.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/releases/#upload-a-release-asset
-func (s *RepositoriesService) UploadReleaseAsset(ctx context.Context, owner, repo string, id int64, opts *UploadOptions, file *os.File) (*ReleaseAsset, *Response, error) {
-       u := fmt.Sprintf("repos/%s/%s/releases/%d/assets", owner, repo, id)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       stat, err := file.Stat()
-       if err != nil {
-               return nil, nil, err
-       }
-       if stat.IsDir() {
-               return nil, nil, errors.New("the asset to upload can't be a directory")
-       }
-
-       mediaType := mime.TypeByExtension(filepath.Ext(file.Name()))
-       if opts.MediaType != "" {
-               mediaType = opts.MediaType
-       }
-
-       req, err := s.client.NewUploadRequest(u, file, stat.Size(), mediaType)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       asset := new(ReleaseAsset)
-       resp, err := s.client.Do(ctx, req, asset)
-       if err != nil {
-               return nil, resp, err
-       }
-       return asset, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_stats.go b/vendor/github.com/google/go-github/v32/github/repos_stats.go
deleted file mode 100644 (file)
index 633ca7c..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-// Copyright 2014 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// ContributorStats represents a contributor to a repository and their
-// weekly contributions to a given repo.
-type ContributorStats struct {
-       Author *Contributor   `json:"author,omitempty"`
-       Total  *int           `json:"total,omitempty"`
-       Weeks  []*WeeklyStats `json:"weeks,omitempty"`
-}
-
-func (c ContributorStats) String() string {
-       return Stringify(c)
-}
-
-// WeeklyStats represents the number of additions, deletions and commits
-// a Contributor made in a given week.
-type WeeklyStats struct {
-       Week      *Timestamp `json:"w,omitempty"`
-       Additions *int       `json:"a,omitempty"`
-       Deletions *int       `json:"d,omitempty"`
-       Commits   *int       `json:"c,omitempty"`
-}
-
-func (w WeeklyStats) String() string {
-       return Stringify(w)
-}
-
-// ListContributorsStats gets a repo's contributor list with additions,
-// deletions and commit counts.
-//
-// If this is the first time these statistics are requested for the given
-// repository, this method will return an *AcceptedError and a status code of
-// 202. This is because this is the status that GitHub returns to signify that
-// it is now computing the requested statistics. A follow up request, after a
-// delay of a second or so, should result in a successful request.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/statistics/#get-all-contributor-commit-activity
-func (s *RepositoriesService) ListContributorsStats(ctx context.Context, owner, repo string) ([]*ContributorStats, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/stats/contributors", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var contributorStats []*ContributorStats
-       resp, err := s.client.Do(ctx, req, &contributorStats)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return contributorStats, resp, nil
-}
-
-// WeeklyCommitActivity represents the weekly commit activity for a repository.
-// The days array is a group of commits per day, starting on Sunday.
-type WeeklyCommitActivity struct {
-       Days  []int      `json:"days,omitempty"`
-       Total *int       `json:"total,omitempty"`
-       Week  *Timestamp `json:"week,omitempty"`
-}
-
-func (w WeeklyCommitActivity) String() string {
-       return Stringify(w)
-}
-
-// ListCommitActivity returns the last year of commit activity
-// grouped by week. The days array is a group of commits per day,
-// starting on Sunday.
-//
-// If this is the first time these statistics are requested for the given
-// repository, this method will return an *AcceptedError and a status code of
-// 202. This is because this is the status that GitHub returns to signify that
-// it is now computing the requested statistics. A follow up request, after a
-// delay of a second or so, should result in a successful request.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/statistics/#get-the-last-year-of-commit-activity
-func (s *RepositoriesService) ListCommitActivity(ctx context.Context, owner, repo string) ([]*WeeklyCommitActivity, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/stats/commit_activity", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var weeklyCommitActivity []*WeeklyCommitActivity
-       resp, err := s.client.Do(ctx, req, &weeklyCommitActivity)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return weeklyCommitActivity, resp, nil
-}
-
-// ListCodeFrequency returns a weekly aggregate of the number of additions and
-// deletions pushed to a repository. Returned WeeklyStats will contain
-// additions and deletions, but not total commits.
-//
-// If this is the first time these statistics are requested for the given
-// repository, this method will return an *AcceptedError and a status code of
-// 202. This is because this is the status that GitHub returns to signify that
-// it is now computing the requested statistics. A follow up request, after a
-// delay of a second or so, should result in a successful request.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/statistics/#get-the-weekly-commit-activity
-func (s *RepositoriesService) ListCodeFrequency(ctx context.Context, owner, repo string) ([]*WeeklyStats, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/stats/code_frequency", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var weeks [][]int
-       resp, err := s.client.Do(ctx, req, &weeks)
-
-       // convert int slices into WeeklyStats
-       var stats []*WeeklyStats
-       for _, week := range weeks {
-               if len(week) != 3 {
-                       continue
-               }
-               stat := &WeeklyStats{
-                       Week:      &Timestamp{time.Unix(int64(week[0]), 0)},
-                       Additions: Int(week[1]),
-                       Deletions: Int(week[2]),
-               }
-               stats = append(stats, stat)
-       }
-
-       return stats, resp, err
-}
-
-// RepositoryParticipation is the number of commits by everyone
-// who has contributed to the repository (including the owner)
-// as well as the number of commits by the owner themself.
-type RepositoryParticipation struct {
-       All   []int `json:"all,omitempty"`
-       Owner []int `json:"owner,omitempty"`
-}
-
-func (r RepositoryParticipation) String() string {
-       return Stringify(r)
-}
-
-// ListParticipation returns the total commit counts for the 'owner'
-// and total commit counts in 'all'. 'all' is everyone combined,
-// including the 'owner' in the last 52 weeks. If you’d like to get
-// the commit counts for non-owners, you can subtract 'all' from 'owner'.
-//
-// The array order is oldest week (index 0) to most recent week.
-//
-// If this is the first time these statistics are requested for the given
-// repository, this method will return an *AcceptedError and a status code of
-// 202. This is because this is the status that GitHub returns to signify that
-// it is now computing the requested statistics. A follow up request, after a
-// delay of a second or so, should result in a successful request.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/statistics/#get-the-weekly-commit-count
-func (s *RepositoriesService) ListParticipation(ctx context.Context, owner, repo string) (*RepositoryParticipation, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/stats/participation", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       participation := new(RepositoryParticipation)
-       resp, err := s.client.Do(ctx, req, participation)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return participation, resp, nil
-}
-
-// PunchCard represents the number of commits made during a given hour of a
-// day of the week.
-type PunchCard struct {
-       Day     *int // Day of the week (0-6: =Sunday - Saturday).
-       Hour    *int // Hour of day (0-23).
-       Commits *int // Number of commits.
-}
-
-// ListPunchCard returns the number of commits per hour in each day.
-//
-// If this is the first time these statistics are requested for the given
-// repository, this method will return an *AcceptedError and a status code of
-// 202. This is because this is the status that GitHub returns to signify that
-// it is now computing the requested statistics. A follow up request, after a
-// delay of a second or so, should result in a successful request.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/statistics/#get-the-hourly-commit-count-for-each-day
-func (s *RepositoriesService) ListPunchCard(ctx context.Context, owner, repo string) ([]*PunchCard, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/stats/punch_card", owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var results [][]int
-       resp, err := s.client.Do(ctx, req, &results)
-
-       // convert int slices into Punchcards
-       var cards []*PunchCard
-       for _, result := range results {
-               if len(result) != 3 {
-                       continue
-               }
-               card := &PunchCard{
-                       Day:     Int(result[0]),
-                       Hour:    Int(result[1]),
-                       Commits: Int(result[2]),
-               }
-               cards = append(cards, card)
-       }
-
-       return cards, resp, err
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_statuses.go b/vendor/github.com/google/go-github/v32/github/repos_statuses.go
deleted file mode 100644 (file)
index 53478c7..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// RepoStatus represents the status of a repository at a particular reference.
-type RepoStatus struct {
-       ID     *int64  `json:"id,omitempty"`
-       NodeID *string `json:"node_id,omitempty"`
-       URL    *string `json:"url,omitempty"`
-
-       // State is the current state of the repository. Possible values are:
-       // pending, success, error, or failure.
-       State *string `json:"state,omitempty"`
-
-       // TargetURL is the URL of the page representing this status. It will be
-       // linked from the GitHub UI to allow users to see the source of the status.
-       TargetURL *string `json:"target_url,omitempty"`
-
-       // Description is a short high level summary of the status.
-       Description *string `json:"description,omitempty"`
-
-       // A string label to differentiate this status from the statuses of other systems.
-       Context *string `json:"context,omitempty"`
-
-       Creator   *User      `json:"creator,omitempty"`
-       CreatedAt *time.Time `json:"created_at,omitempty"`
-       UpdatedAt *time.Time `json:"updated_at,omitempty"`
-}
-
-func (r RepoStatus) String() string {
-       return Stringify(r)
-}
-
-// ListStatuses lists the statuses of a repository at the specified
-// reference. ref can be a SHA, a branch name, or a tag name.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/statuses/#list-commit-statuses-for-a-reference
-func (s *RepositoriesService) ListStatuses(ctx context.Context, owner, repo, ref string, opts *ListOptions) ([]*RepoStatus, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v/statuses", owner, repo, refURLEscape(ref))
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var statuses []*RepoStatus
-       resp, err := s.client.Do(ctx, req, &statuses)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return statuses, resp, nil
-}
-
-// CreateStatus creates a new status for a repository at the specified
-// reference. Ref can be a SHA, a branch name, or a tag name.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/statuses/#create-a-commit-status
-func (s *RepositoriesService) CreateStatus(ctx context.Context, owner, repo, ref string, status *RepoStatus) (*RepoStatus, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/statuses/%v", owner, repo, refURLEscape(ref))
-       req, err := s.client.NewRequest("POST", u, status)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       repoStatus := new(RepoStatus)
-       resp, err := s.client.Do(ctx, req, repoStatus)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repoStatus, resp, nil
-}
-
-// CombinedStatus represents the combined status of a repository at a particular reference.
-type CombinedStatus struct {
-       // State is the combined state of the repository. Possible values are:
-       // failure, pending, or success.
-       State *string `json:"state,omitempty"`
-
-       Name       *string       `json:"name,omitempty"`
-       SHA        *string       `json:"sha,omitempty"`
-       TotalCount *int          `json:"total_count,omitempty"`
-       Statuses   []*RepoStatus `json:"statuses,omitempty"`
-
-       CommitURL     *string `json:"commit_url,omitempty"`
-       RepositoryURL *string `json:"repository_url,omitempty"`
-}
-
-func (s CombinedStatus) String() string {
-       return Stringify(s)
-}
-
-// GetCombinedStatus returns the combined status of a repository at the specified
-// reference. ref can be a SHA, a branch name, or a tag name.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-reference
-func (s *RepositoriesService) GetCombinedStatus(ctx context.Context, owner, repo, ref string, opts *ListOptions) (*CombinedStatus, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/commits/%v/status", owner, repo, refURLEscape(ref))
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       status := new(CombinedStatus)
-       resp, err := s.client.Do(ctx, req, status)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return status, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/repos_traffic.go b/vendor/github.com/google/go-github/v32/github/repos_traffic.go
deleted file mode 100644 (file)
index f260728..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// TrafficReferrer represent information about traffic from a referrer .
-type TrafficReferrer struct {
-       Referrer *string `json:"referrer,omitempty"`
-       Count    *int    `json:"count,omitempty"`
-       Uniques  *int    `json:"uniques,omitempty"`
-}
-
-// TrafficPath represent information about the traffic on a path of the repo.
-type TrafficPath struct {
-       Path    *string `json:"path,omitempty"`
-       Title   *string `json:"title,omitempty"`
-       Count   *int    `json:"count,omitempty"`
-       Uniques *int    `json:"uniques,omitempty"`
-}
-
-// TrafficData represent information about a specific timestamp in views or clones list.
-type TrafficData struct {
-       Timestamp *Timestamp `json:"timestamp,omitempty"`
-       Count     *int       `json:"count,omitempty"`
-       Uniques   *int       `json:"uniques,omitempty"`
-}
-
-// TrafficViews represent information about the number of views in the last 14 days.
-type TrafficViews struct {
-       Views   []*TrafficData `json:"views,omitempty"`
-       Count   *int           `json:"count,omitempty"`
-       Uniques *int           `json:"uniques,omitempty"`
-}
-
-// TrafficClones represent information about the number of clones in the last 14 days.
-type TrafficClones struct {
-       Clones  []*TrafficData `json:"clones,omitempty"`
-       Count   *int           `json:"count,omitempty"`
-       Uniques *int           `json:"uniques,omitempty"`
-}
-
-// TrafficBreakdownOptions specifies the parameters to methods that support breakdown per day or week.
-// Can be one of: day, week. Default: day.
-type TrafficBreakdownOptions struct {
-       Per string `url:"per,omitempty"`
-}
-
-// ListTrafficReferrers list the top 10 referrers over the last 14 days.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/traffic/#get-top-referral-sources
-func (s *RepositoriesService) ListTrafficReferrers(ctx context.Context, owner, repo string) ([]*TrafficReferrer, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/traffic/popular/referrers", owner, repo)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var trafficReferrers []*TrafficReferrer
-       resp, err := s.client.Do(ctx, req, &trafficReferrers)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return trafficReferrers, resp, nil
-}
-
-// ListTrafficPaths list the top 10 popular content over the last 14 days.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/traffic/#get-top-referral-paths
-func (s *RepositoriesService) ListTrafficPaths(ctx context.Context, owner, repo string) ([]*TrafficPath, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/traffic/popular/paths", owner, repo)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var paths []*TrafficPath
-       resp, err := s.client.Do(ctx, req, &paths)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return paths, resp, nil
-}
-
-// ListTrafficViews get total number of views for the last 14 days and breaks it down either per day or week.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/traffic/#get-page-views
-func (s *RepositoriesService) ListTrafficViews(ctx context.Context, owner, repo string, opts *TrafficBreakdownOptions) (*TrafficViews, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/traffic/views", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       trafficViews := new(TrafficViews)
-       resp, err := s.client.Do(ctx, req, &trafficViews)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return trafficViews, resp, nil
-}
-
-// ListTrafficClones get total number of clones for the last 14 days and breaks it down either per day or week for the last 14 days.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/traffic/#get-repository-clones
-func (s *RepositoriesService) ListTrafficClones(ctx context.Context, owner, repo string, opts *TrafficBreakdownOptions) (*TrafficClones, *Response, error) {
-       u := fmt.Sprintf("repos/%v/%v/traffic/clones", owner, repo)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       trafficClones := new(TrafficClones)
-       resp, err := s.client.Do(ctx, req, &trafficClones)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return trafficClones, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/search.go b/vendor/github.com/google/go-github/v32/github/search.go
deleted file mode 100644 (file)
index c15c1f2..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "strconv"
-
-       qs "github.com/google/go-querystring/query"
-)
-
-// SearchService provides access to the search related functions
-// in the GitHub API.
-//
-// Each method takes a query string defining the search keywords and any search qualifiers.
-// For example, when searching issues, the query "gopher is:issue language:go" will search
-// for issues containing the word "gopher" in Go repositories. The method call
-//   opts :=  &github.SearchOptions{Sort: "created", Order: "asc"}
-//   cl.Search.Issues(ctx, "gopher is:issue language:go", opts)
-// will search for such issues, sorting by creation date in ascending order
-// (i.e., oldest first).
-//
-// If query includes multiple conditions, it MUST NOT include "+" as the condition separator.
-// You have to use " " as the separator instead.
-// For example, querying with "language:c++" and "leveldb", then query should be
-// "language:c++ leveldb" but not "language:c+++leveldb".
-//
-// GitHub API docs: https://developer.github.com/v3/search/
-type SearchService service
-
-// SearchOptions specifies optional parameters to the SearchService methods.
-type SearchOptions struct {
-       // How to sort the search results. Possible values are:
-       //   - for repositories: stars, fork, updated
-       //   - for commits: author-date, committer-date
-       //   - for code: indexed
-       //   - for issues: comments, created, updated
-       //   - for users: followers, repositories, joined
-       //
-       // Default is to sort by best match.
-       Sort string `url:"sort,omitempty"`
-
-       // Sort order if sort parameter is provided. Possible values are: asc,
-       // desc. Default is desc.
-       Order string `url:"order,omitempty"`
-
-       // Whether to retrieve text match metadata with a query
-       TextMatch bool `url:"-"`
-
-       ListOptions
-}
-
-// Common search parameters.
-type searchParameters struct {
-       Query        string
-       RepositoryID *int64 // Sent if non-nil.
-}
-
-// RepositoriesSearchResult represents the result of a repositories search.
-type RepositoriesSearchResult struct {
-       Total             *int          `json:"total_count,omitempty"`
-       IncompleteResults *bool         `json:"incomplete_results,omitempty"`
-       Repositories      []*Repository `json:"items,omitempty"`
-}
-
-// Repositories searches repositories via various criteria.
-//
-// GitHub API docs: https://developer.github.com/v3/search/#search-repositories
-func (s *SearchService) Repositories(ctx context.Context, query string, opts *SearchOptions) (*RepositoriesSearchResult, *Response, error) {
-       result := new(RepositoriesSearchResult)
-       resp, err := s.search(ctx, "repositories", &searchParameters{Query: query}, opts, result)
-       return result, resp, err
-}
-
-// TopicsSearchResult represents the result of a topics search.
-type TopicsSearchResult struct {
-       Total             *int           `json:"total_count,omitempty"`
-       IncompleteResults *bool          `json:"incomplete_results,omitempty"`
-       Topics            []*TopicResult `json:"items,omitempty"`
-}
-
-type TopicResult struct {
-       Name             *string    `json:"name,omitempty"`
-       DisplayName      *string    `json:"display_name,omitempty"`
-       ShortDescription *string    `json:"short_description,omitempty"`
-       Description      *string    `json:"description,omitempty"`
-       CreatedBy        *string    `json:"created_by,omitempty"`
-       CreatedAt        *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt        *string    `json:"updated_at,omitempty"`
-       Featured         *bool      `json:"featured,omitempty"`
-       Curated          *bool      `json:"curated,omitempty"`
-       Score            *float64   `json:"score,omitempty"`
-}
-
-// Topics finds topics via various criteria. Results are sorted by best match.
-// Please see https://help.github.com/en/articles/searching-topics for more
-// information about search qualifiers.
-//
-// GitHub API docs: https://developer.github.com/v3/search/#search-topics
-func (s *SearchService) Topics(ctx context.Context, query string, opts *SearchOptions) (*TopicsSearchResult, *Response, error) {
-       result := new(TopicsSearchResult)
-       resp, err := s.search(ctx, "topics", &searchParameters{Query: query}, opts, result)
-       return result, resp, err
-}
-
-// CommitsSearchResult represents the result of a commits search.
-type CommitsSearchResult struct {
-       Total             *int            `json:"total_count,omitempty"`
-       IncompleteResults *bool           `json:"incomplete_results,omitempty"`
-       Commits           []*CommitResult `json:"items,omitempty"`
-}
-
-// CommitResult represents a commit object as returned in commit search endpoint response.
-type CommitResult struct {
-       SHA         *string   `json:"sha,omitempty"`
-       Commit      *Commit   `json:"commit,omitempty"`
-       Author      *User     `json:"author,omitempty"`
-       Committer   *User     `json:"committer,omitempty"`
-       Parents     []*Commit `json:"parents,omitempty"`
-       HTMLURL     *string   `json:"html_url,omitempty"`
-       URL         *string   `json:"url,omitempty"`
-       CommentsURL *string   `json:"comments_url,omitempty"`
-
-       Repository *Repository `json:"repository,omitempty"`
-       Score      *float64    `json:"score,omitempty"`
-}
-
-// Commits searches commits via various criteria.
-//
-// GitHub API docs: https://developer.github.com/v3/search/#search-commits
-func (s *SearchService) Commits(ctx context.Context, query string, opts *SearchOptions) (*CommitsSearchResult, *Response, error) {
-       result := new(CommitsSearchResult)
-       resp, err := s.search(ctx, "commits", &searchParameters{Query: query}, opts, result)
-       return result, resp, err
-}
-
-// IssuesSearchResult represents the result of an issues search.
-type IssuesSearchResult struct {
-       Total             *int     `json:"total_count,omitempty"`
-       IncompleteResults *bool    `json:"incomplete_results,omitempty"`
-       Issues            []*Issue `json:"items,omitempty"`
-}
-
-// Issues searches issues via various criteria.
-//
-// GitHub API docs: https://developer.github.com/v3/search/#search-issues-and-pull-requests
-func (s *SearchService) Issues(ctx context.Context, query string, opts *SearchOptions) (*IssuesSearchResult, *Response, error) {
-       result := new(IssuesSearchResult)
-       resp, err := s.search(ctx, "issues", &searchParameters{Query: query}, opts, result)
-       return result, resp, err
-}
-
-// UsersSearchResult represents the result of a users search.
-type UsersSearchResult struct {
-       Total             *int    `json:"total_count,omitempty"`
-       IncompleteResults *bool   `json:"incomplete_results,omitempty"`
-       Users             []*User `json:"items,omitempty"`
-}
-
-// Users searches users via various criteria.
-//
-// GitHub API docs: https://developer.github.com/v3/search/#search-users
-func (s *SearchService) Users(ctx context.Context, query string, opts *SearchOptions) (*UsersSearchResult, *Response, error) {
-       result := new(UsersSearchResult)
-       resp, err := s.search(ctx, "users", &searchParameters{Query: query}, opts, result)
-       return result, resp, err
-}
-
-// Match represents a single text match.
-type Match struct {
-       Text    *string `json:"text,omitempty"`
-       Indices []int   `json:"indices,omitempty"`
-}
-
-// TextMatch represents a text match for a SearchResult
-type TextMatch struct {
-       ObjectURL  *string  `json:"object_url,omitempty"`
-       ObjectType *string  `json:"object_type,omitempty"`
-       Property   *string  `json:"property,omitempty"`
-       Fragment   *string  `json:"fragment,omitempty"`
-       Matches    []*Match `json:"matches,omitempty"`
-}
-
-func (tm TextMatch) String() string {
-       return Stringify(tm)
-}
-
-// CodeSearchResult represents the result of a code search.
-type CodeSearchResult struct {
-       Total             *int          `json:"total_count,omitempty"`
-       IncompleteResults *bool         `json:"incomplete_results,omitempty"`
-       CodeResults       []*CodeResult `json:"items,omitempty"`
-}
-
-// CodeResult represents a single search result.
-type CodeResult struct {
-       Name        *string      `json:"name,omitempty"`
-       Path        *string      `json:"path,omitempty"`
-       SHA         *string      `json:"sha,omitempty"`
-       HTMLURL     *string      `json:"html_url,omitempty"`
-       Repository  *Repository  `json:"repository,omitempty"`
-       TextMatches []*TextMatch `json:"text_matches,omitempty"`
-}
-
-func (c CodeResult) String() string {
-       return Stringify(c)
-}
-
-// Code searches code via various criteria.
-//
-// GitHub API docs: https://developer.github.com/v3/search/#search-code
-func (s *SearchService) Code(ctx context.Context, query string, opts *SearchOptions) (*CodeSearchResult, *Response, error) {
-       result := new(CodeSearchResult)
-       resp, err := s.search(ctx, "code", &searchParameters{Query: query}, opts, result)
-       return result, resp, err
-}
-
-// LabelsSearchResult represents the result of a code search.
-type LabelsSearchResult struct {
-       Total             *int           `json:"total_count,omitempty"`
-       IncompleteResults *bool          `json:"incomplete_results,omitempty"`
-       Labels            []*LabelResult `json:"items,omitempty"`
-}
-
-// LabelResult represents a single search result.
-type LabelResult struct {
-       ID          *int64   `json:"id,omitempty"`
-       URL         *string  `json:"url,omitempty"`
-       Name        *string  `json:"name,omitempty"`
-       Color       *string  `json:"color,omitempty"`
-       Default     *bool    `json:"default,omitempty"`
-       Description *string  `json:"description,omitempty"`
-       Score       *float64 `json:"score,omitempty"`
-}
-
-func (l LabelResult) String() string {
-       return Stringify(l)
-}
-
-// Labels searches labels in the repository with ID repoID via various criteria.
-//
-// GitHub API docs: https://developer.github.com/v3/search/#search-labels
-func (s *SearchService) Labels(ctx context.Context, repoID int64, query string, opts *SearchOptions) (*LabelsSearchResult, *Response, error) {
-       result := new(LabelsSearchResult)
-       resp, err := s.search(ctx, "labels", &searchParameters{RepositoryID: &repoID, Query: query}, opts, result)
-       return result, resp, err
-}
-
-// Helper function that executes search queries against different
-// GitHub search types (repositories, commits, code, issues, users, labels)
-//
-// If searchParameters.Query includes multiple condition, it MUST NOT include "+" as condition separator.
-// For example, querying with "language:c++" and "leveldb", then searchParameters.Query should be "language:c++ leveldb" but not "language:c+++leveldb".
-func (s *SearchService) search(ctx context.Context, searchType string, parameters *searchParameters, opts *SearchOptions, result interface{}) (*Response, error) {
-       params, err := qs.Values(opts)
-       if err != nil {
-               return nil, err
-       }
-       if parameters.RepositoryID != nil {
-               params.Set("repository_id", strconv.FormatInt(*parameters.RepositoryID, 10))
-       }
-       params.Set("q", parameters.Query)
-       u := fmt.Sprintf("search/%s?%s", searchType, params.Encode())
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       switch {
-       case searchType == "commits":
-               // Accept header for search commits preview endpoint
-               // TODO: remove custom Accept header when this API fully launches.
-               req.Header.Set("Accept", mediaTypeCommitSearchPreview)
-       case searchType == "topics":
-               // Accept header for search repositories based on topics preview endpoint
-               // TODO: remove custom Accept header when this API fully launches.
-               req.Header.Set("Accept", mediaTypeTopicsPreview)
-       case searchType == "repositories":
-               // Accept header for search repositories based on topics preview endpoint
-               // TODO: remove custom Accept header when this API fully launches.
-               req.Header.Set("Accept", mediaTypeTopicsPreview)
-       case opts != nil && opts.TextMatch:
-               // Accept header defaults to "application/vnd.github.v3+json"
-               // We change it here to fetch back text-match metadata
-               req.Header.Set("Accept", "application/vnd.github.v3.text-match+json")
-       }
-
-       return s.client.Do(ctx, req, result)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/strings.go b/vendor/github.com/google/go-github/v32/github/strings.go
deleted file mode 100644 (file)
index 431e1cc..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "bytes"
-       "fmt"
-       "io"
-
-       "reflect"
-)
-
-var timestampType = reflect.TypeOf(Timestamp{})
-
-// Stringify attempts to create a reasonable string representation of types in
-// the GitHub library. It does things like resolve pointers to their values
-// and omits struct fields with nil values.
-func Stringify(message interface{}) string {
-       var buf bytes.Buffer
-       v := reflect.ValueOf(message)
-       stringifyValue(&buf, v)
-       return buf.String()
-}
-
-// stringifyValue was heavily inspired by the goprotobuf library.
-
-func stringifyValue(w io.Writer, val reflect.Value) {
-       if val.Kind() == reflect.Ptr && val.IsNil() {
-               w.Write([]byte("<nil>"))
-               return
-       }
-
-       v := reflect.Indirect(val)
-
-       switch v.Kind() {
-       case reflect.String:
-               fmt.Fprintf(w, `"%s"`, v)
-       case reflect.Slice:
-               w.Write([]byte{'['})
-               for i := 0; i < v.Len(); i++ {
-                       if i > 0 {
-                               w.Write([]byte{' '})
-                       }
-
-                       stringifyValue(w, v.Index(i))
-               }
-
-               w.Write([]byte{']'})
-               return
-       case reflect.Struct:
-               if v.Type().Name() != "" {
-                       w.Write([]byte(v.Type().String()))
-               }
-
-               // special handling of Timestamp values
-               if v.Type() == timestampType {
-                       fmt.Fprintf(w, "{%s}", v.Interface())
-                       return
-               }
-
-               w.Write([]byte{'{'})
-
-               var sep bool
-               for i := 0; i < v.NumField(); i++ {
-                       fv := v.Field(i)
-                       if fv.Kind() == reflect.Ptr && fv.IsNil() {
-                               continue
-                       }
-                       if fv.Kind() == reflect.Slice && fv.IsNil() {
-                               continue
-                       }
-
-                       if sep {
-                               w.Write([]byte(", "))
-                       } else {
-                               sep = true
-                       }
-
-                       w.Write([]byte(v.Type().Field(i).Name))
-                       w.Write([]byte{':'})
-                       stringifyValue(w, fv)
-               }
-
-               w.Write([]byte{'}'})
-       default:
-               if v.CanInterface() {
-                       fmt.Fprint(w, v.Interface())
-               }
-       }
-}
diff --git a/vendor/github.com/google/go-github/v32/github/teams.go b/vendor/github.com/google/go-github/v32/github/teams.go
deleted file mode 100644 (file)
index 8b36112..0000000
+++ /dev/null
@@ -1,850 +0,0 @@
-// Copyright 2018 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "net/http"
-       "strings"
-       "time"
-)
-
-// TeamsService provides access to the team-related functions
-// in the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/
-type TeamsService service
-
-// Team represents a team within a GitHub organization. Teams are used to
-// manage access to an organization's repositories.
-type Team struct {
-       ID          *int64  `json:"id,omitempty"`
-       NodeID      *string `json:"node_id,omitempty"`
-       Name        *string `json:"name,omitempty"`
-       Description *string `json:"description,omitempty"`
-       URL         *string `json:"url,omitempty"`
-       Slug        *string `json:"slug,omitempty"`
-
-       // Permission specifies the default permission for repositories owned by the team.
-       Permission *string `json:"permission,omitempty"`
-
-       // Privacy identifies the level of privacy this team should have.
-       // Possible values are:
-       //     secret - only visible to organization owners and members of this team
-       //     closed - visible to all members of this organization
-       // Default is "secret".
-       Privacy *string `json:"privacy,omitempty"`
-
-       MembersCount    *int          `json:"members_count,omitempty"`
-       ReposCount      *int          `json:"repos_count,omitempty"`
-       Organization    *Organization `json:"organization,omitempty"`
-       MembersURL      *string       `json:"members_url,omitempty"`
-       RepositoriesURL *string       `json:"repositories_url,omitempty"`
-       Parent          *Team         `json:"parent,omitempty"`
-
-       // LDAPDN is only available in GitHub Enterprise and when the team
-       // membership is synchronized with LDAP.
-       LDAPDN *string `json:"ldap_dn,omitempty"`
-}
-
-func (t Team) String() string {
-       return Stringify(t)
-}
-
-// Invitation represents a team member's invitation status.
-type Invitation struct {
-       ID     *int64  `json:"id,omitempty"`
-       NodeID *string `json:"node_id,omitempty"`
-       Login  *string `json:"login,omitempty"`
-       Email  *string `json:"email,omitempty"`
-       // Role can be one of the values - 'direct_member', 'admin', 'billing_manager', 'hiring_manager', or 'reinstate'.
-       Role              *string    `json:"role,omitempty"`
-       CreatedAt         *time.Time `json:"created_at,omitempty"`
-       Inviter           *User      `json:"inviter,omitempty"`
-       TeamCount         *int       `json:"team_count,omitempty"`
-       InvitationTeamURL *string    `json:"invitation_team_url,omitempty"`
-}
-
-func (i Invitation) String() string {
-       return Stringify(i)
-}
-
-// ListTeams lists all of the teams for an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#list-teams
-func (s *TeamsService) ListTeams(ctx context.Context, org string, opts *ListOptions) ([]*Team, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var teams []*Team
-       resp, err := s.client.Do(ctx, req, &teams)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teams, resp, nil
-}
-
-// GetTeamByID fetches a team, given a specified organization ID, by ID.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#get-a-team-by-name
-func (s *TeamsService) GetTeamByID(ctx context.Context, orgID, teamID int64) (*Team, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v", orgID, teamID)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Team)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// GetTeamBySlug fetches a team, given a specified organization name, by slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#get-a-team-by-name
-func (s *TeamsService) GetTeamBySlug(ctx context.Context, org, slug string) (*Team, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v", org, slug)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Team)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// NewTeam represents a team to be created or modified.
-type NewTeam struct {
-       Name         string   `json:"name"` // Name of the team. (Required.)
-       Description  *string  `json:"description,omitempty"`
-       Maintainers  []string `json:"maintainers,omitempty"`
-       RepoNames    []string `json:"repo_names,omitempty"`
-       ParentTeamID *int64   `json:"parent_team_id,omitempty"`
-
-       // Deprecated: Permission is deprecated when creating or editing a team in an org
-       // using the new GitHub permission model. It no longer identifies the
-       // permission a team has on its repos, but only specifies the default
-       // permission a repo is initially added with. Avoid confusion by
-       // specifying a permission value when calling AddTeamRepo.
-       Permission *string `json:"permission,omitempty"`
-
-       // Privacy identifies the level of privacy this team should have.
-       // Possible values are:
-       //     secret - only visible to organization owners and members of this team
-       //     closed - visible to all members of this organization
-       // Default is "secret".
-       Privacy *string `json:"privacy,omitempty"`
-
-       // LDAPDN may be used in GitHub Enterprise when the team membership
-       // is synchronized with LDAP.
-       LDAPDN *string `json:"ldap_dn,omitempty"`
-}
-
-func (s NewTeam) String() string {
-       return Stringify(s)
-}
-
-// CreateTeam creates a new team within an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#create-a-team
-func (s *TeamsService) CreateTeam(ctx context.Context, org string, team NewTeam) (*Team, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams", org)
-       req, err := s.client.NewRequest("POST", u, team)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Team)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// newTeamNoParent is the same as NewTeam but ensures that the
-// "parent_team_id" field will be null. It is for internal use
-// only and should not be exported.
-type newTeamNoParent struct {
-       Name         string   `json:"name"`
-       Description  *string  `json:"description,omitempty"`
-       Maintainers  []string `json:"maintainers,omitempty"`
-       RepoNames    []string `json:"repo_names,omitempty"`
-       ParentTeamID *int64   `json:"parent_team_id"` // This will be "null"
-       Privacy      *string  `json:"privacy,omitempty"`
-       LDAPDN       *string  `json:"ldap_dn,omitempty"`
-}
-
-// copyNewTeamWithoutParent is used to set the "parent_team_id"
-// field to "null" after copying the other fields from a NewTeam.
-// It is for internal use only and should not be exported.
-func copyNewTeamWithoutParent(team *NewTeam) *newTeamNoParent {
-       return &newTeamNoParent{
-               Name:        team.Name,
-               Description: team.Description,
-               Maintainers: team.Maintainers,
-               RepoNames:   team.RepoNames,
-               Privacy:     team.Privacy,
-               LDAPDN:      team.LDAPDN,
-       }
-}
-
-// EditTeamByID edits a team, given an organization ID, selected by ID.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#update-a-team
-func (s *TeamsService) EditTeamByID(ctx context.Context, orgID, teamID int64, team NewTeam, removeParent bool) (*Team, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v", orgID, teamID)
-
-       var req *http.Request
-       var err error
-       if removeParent {
-               teamRemoveParent := copyNewTeamWithoutParent(&team)
-               req, err = s.client.NewRequest("PATCH", u, teamRemoveParent)
-       } else {
-               req, err = s.client.NewRequest("PATCH", u, team)
-       }
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Team)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// EditTeamBySlug edits a team, given an organization name, by slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#update-a-team
-func (s *TeamsService) EditTeamBySlug(ctx context.Context, org, slug string, team NewTeam, removeParent bool) (*Team, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v", org, slug)
-
-       var req *http.Request
-       var err error
-       if removeParent {
-               teamRemoveParent := copyNewTeamWithoutParent(&team)
-               req, err = s.client.NewRequest("PATCH", u, teamRemoveParent)
-       } else {
-               req, err = s.client.NewRequest("PATCH", u, team)
-       }
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Team)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// DeleteTeamByID deletes a team referenced by ID.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#delete-a-team
-func (s *TeamsService) DeleteTeamByID(ctx context.Context, orgID, teamID int64) (*Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v", orgID, teamID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DeleteTeamBySlug deletes a team reference by slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#delete-a-team
-func (s *TeamsService) DeleteTeamBySlug(ctx context.Context, org, slug string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v", org, slug)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListChildTeamsByParentID lists child teams for a parent team given parent ID.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#list-child-teams
-func (s *TeamsService) ListChildTeamsByParentID(ctx context.Context, orgID, teamID int64, opts *ListOptions) ([]*Team, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/teams", orgID, teamID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var teams []*Team
-       resp, err := s.client.Do(ctx, req, &teams)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teams, resp, nil
-}
-
-// ListChildTeamsByParentSlug lists child teams for a parent team given parent slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#list-child-teams
-func (s *TeamsService) ListChildTeamsByParentSlug(ctx context.Context, org, slug string, opts *ListOptions) ([]*Team, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/teams", org, slug)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var teams []*Team
-       resp, err := s.client.Do(ctx, req, &teams)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teams, resp, nil
-}
-
-// ListTeamReposByID lists the repositories given a team ID that the specified team has access to.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#list-team-repositories
-func (s *TeamsService) ListTeamReposByID(ctx context.Context, orgID, teamID int64, opts *ListOptions) ([]*Repository, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/repos", orgID, teamID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when topics API fully launches.
-       headers := []string{mediaTypeTopicsPreview}
-       req.Header.Set("Accept", strings.Join(headers, ", "))
-
-       var repos []*Repository
-       resp, err := s.client.Do(ctx, req, &repos)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repos, resp, nil
-}
-
-// ListTeamReposBySlug lists the repositories given a team slug that the specified team has access to.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#list-team-repositories
-func (s *TeamsService) ListTeamReposBySlug(ctx context.Context, org, slug string, opts *ListOptions) ([]*Repository, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/repos", org, slug)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when topics API fully launches.
-       headers := []string{mediaTypeTopicsPreview}
-       req.Header.Set("Accept", strings.Join(headers, ", "))
-
-       var repos []*Repository
-       resp, err := s.client.Do(ctx, req, &repos)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repos, resp, nil
-}
-
-// IsTeamRepoByID checks if a team, given its ID, manages the specified repository. If the
-// repository is managed by team, a Repository is returned which includes the
-// permissions team has for that repo.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#check-team-permissions-for-a-repository
-func (s *TeamsService) IsTeamRepoByID(ctx context.Context, orgID, teamID int64, owner, repo string) (*Repository, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/repos/%v/%v", orgID, teamID, owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       headers := []string{mediaTypeOrgPermissionRepo}
-       req.Header.Set("Accept", strings.Join(headers, ", "))
-
-       repository := new(Repository)
-       resp, err := s.client.Do(ctx, req, repository)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repository, resp, nil
-}
-
-// IsTeamRepoBySlug checks if a team, given its slug, manages the specified repository. If the
-// repository is managed by team, a Repository is returned which includes the
-// permissions team has for that repo.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#check-team-permissions-for-a-repository
-func (s *TeamsService) IsTeamRepoBySlug(ctx context.Context, org, slug, owner, repo string) (*Repository, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/repos/%v/%v", org, slug, owner, repo)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       headers := []string{mediaTypeOrgPermissionRepo}
-       req.Header.Set("Accept", strings.Join(headers, ", "))
-
-       repository := new(Repository)
-       resp, err := s.client.Do(ctx, req, repository)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return repository, resp, nil
-}
-
-// TeamAddTeamRepoOptions specifies the optional parameters to the
-// TeamsService.AddTeamRepo method.
-type TeamAddTeamRepoOptions struct {
-       // Permission specifies the permission to grant the team on this repository.
-       // Possible values are:
-       //     pull - team members can pull, but not push to or administer this repository
-       //     push - team members can pull and push, but not administer this repository
-       //     admin - team members can pull, push and administer this repository
-       //     maintain - team members can manage the repository without access to sensitive or destructive actions.
-       //     triage - team members can proactively manage issues and pull requests without write access.
-       //
-       // If not specified, the team's permission attribute will be used.
-       Permission string `json:"permission,omitempty"`
-}
-
-// AddTeamRepoByID adds a repository to be managed by the specified team given the team ID.
-// The specified repository must be owned by the organization to which the team
-// belongs, or a direct fork of a repository owned by the organization.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#add-or-update-team-repository-permissions
-func (s *TeamsService) AddTeamRepoByID(ctx context.Context, orgID, teamID int64, owner, repo string, opts *TeamAddTeamRepoOptions) (*Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/repos/%v/%v", orgID, teamID, owner, repo)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// AddTeamRepoBySlug adds a repository to be managed by the specified team given the team slug.
-// The specified repository must be owned by the organization to which the team
-// belongs, or a direct fork of a repository owned by the organization.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#add-or-update-team-repository-permissions
-func (s *TeamsService) AddTeamRepoBySlug(ctx context.Context, org, slug, owner, repo string, opts *TeamAddTeamRepoOptions) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/repos/%v/%v", org, slug, owner, repo)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// RemoveTeamRepoByID removes a repository from being managed by the specified
-// team given the team ID. Note that this does not delete the repository, it
-// just removes it from the team.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#remove-a-repository-from-a-team
-func (s *TeamsService) RemoveTeamRepoByID(ctx context.Context, orgID, teamID int64, owner, repo string) (*Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/repos/%v/%v", orgID, teamID, owner, repo)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// RemoveTeamRepoBySlug removes a repository from being managed by the specified
-// team given the team slug. Note that this does not delete the repository, it
-// just removes it from the team.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#remove-a-repository-from-a-team
-func (s *TeamsService) RemoveTeamRepoBySlug(ctx context.Context, org, slug, owner, repo string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/repos/%v/%v", org, slug, owner, repo)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListUserTeams lists a user's teams
-// GitHub API docs: https://developer.github.com/v3/teams/#list-teams-for-the-authenticated-user
-func (s *TeamsService) ListUserTeams(ctx context.Context, opts *ListOptions) ([]*Team, *Response, error) {
-       u := "user/teams"
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var teams []*Team
-       resp, err := s.client.Do(ctx, req, &teams)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teams, resp, nil
-}
-
-// ListTeamProjectsByID lists the organization projects for a team given the team ID.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#list-team-projects
-func (s *TeamsService) ListTeamProjectsByID(ctx context.Context, orgID, teamID int64) ([]*Project, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/projects", orgID, teamID)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeProjectsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var projects []*Project
-       resp, err := s.client.Do(ctx, req, &projects)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return projects, resp, nil
-}
-
-// ListTeamProjectsBySlug lists the organization projects for a team given the team slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#list-team-projects
-func (s *TeamsService) ListTeamProjectsBySlug(ctx context.Context, org, slug string) ([]*Project, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/projects", org, slug)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeProjectsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       var projects []*Project
-       resp, err := s.client.Do(ctx, req, &projects)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return projects, resp, nil
-}
-
-// ReviewTeamProjectsByID checks whether a team, given its ID, has read, write, or admin
-// permissions for an organization project.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#check-team-permissions-for-a-project
-func (s *TeamsService) ReviewTeamProjectsByID(ctx context.Context, orgID, teamID, projectID int64) (*Project, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/projects/%v", orgID, teamID, projectID)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeProjectsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       projects := &Project{}
-       resp, err := s.client.Do(ctx, req, &projects)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return projects, resp, nil
-}
-
-// ReviewTeamProjectsBySlug checks whether a team, given its slug, has read, write, or admin
-// permissions for an organization project.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#check-team-permissions-for-a-project
-func (s *TeamsService) ReviewTeamProjectsBySlug(ctx context.Context, org, slug string, projectID int64) (*Project, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/projects/%v", org, slug, projectID)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeProjectsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       projects := &Project{}
-       resp, err := s.client.Do(ctx, req, &projects)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return projects, resp, nil
-}
-
-// TeamProjectOptions specifies the optional parameters to the
-// TeamsService.AddTeamProject method.
-type TeamProjectOptions struct {
-       // Permission specifies the permission to grant to the team for this project.
-       // Possible values are:
-       //     "read" - team members can read, but not write to or administer this project.
-       //     "write" - team members can read and write, but not administer this project.
-       //     "admin" - team members can read, write and administer this project.
-       //
-       Permission *string `json:"permission,omitempty"`
-}
-
-// AddTeamProjectByID adds an organization project to a team given the team ID.
-// To add a project to a team or update the team's permission on a project, the
-// authenticated user must have admin permissions for the project.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#add-or-update-team-project-permissions
-func (s *TeamsService) AddTeamProjectByID(ctx context.Context, orgID, teamID, projectID int64, opts *TeamProjectOptions) (*Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/projects/%v", orgID, teamID, projectID)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeProjectsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// AddTeamProjectBySlug adds an organization project to a team given the team slug.
-// To add a project to a team or update the team's permission on a project, the
-// authenticated user must have admin permissions for the project.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#add-or-update-team-project-permissions
-func (s *TeamsService) AddTeamProjectBySlug(ctx context.Context, org, slug string, projectID int64, opts *TeamProjectOptions) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/projects/%v", org, slug, projectID)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeProjectsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// RemoveTeamProjectByID removes an organization project from a team given team ID.
-// An organization owner or a team maintainer can remove any project from the team.
-// To remove a project from a team as an organization member, the authenticated user
-// must have "read" access to both the team and project, or "admin" access to the team
-// or project.
-// Note: This endpoint removes the project from the team, but does not delete it.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#remove-a-project-from-a-team
-func (s *TeamsService) RemoveTeamProjectByID(ctx context.Context, orgID, teamID, projectID int64) (*Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/projects/%v", orgID, teamID, projectID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeProjectsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// RemoveTeamProjectBySlug removes an organization project from a team given team slug.
-// An organization owner or a team maintainer can remove any project from the team.
-// To remove a project from a team as an organization member, the authenticated user
-// must have "read" access to both the team and project, or "admin" access to the team
-// or project.
-// Note: This endpoint removes the project from the team, but does not delete it.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/#remove-a-project-from-a-team
-func (s *TeamsService) RemoveTeamProjectBySlug(ctx context.Context, org, slug string, projectID int64) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/projects/%v", org, slug, projectID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       acceptHeaders := []string{mediaTypeProjectsPreview}
-       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// IDPGroupList represents a list of external identity provider (IDP) groups.
-type IDPGroupList struct {
-       Groups []*IDPGroup `json:"groups"`
-}
-
-// IDPGroup represents an external identity provider (IDP) group.
-type IDPGroup struct {
-       GroupID          *string `json:"group_id,omitempty"`
-       GroupName        *string `json:"group_name,omitempty"`
-       GroupDescription *string `json:"group_description,omitempty"`
-}
-
-// ListIDPGroupsInOrganization lists IDP groups available in an organization.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/team_sync/#list-idp-groups-for-an-organization
-func (s *TeamsService) ListIDPGroupsInOrganization(ctx context.Context, org string, opts *ListCursorOptions) (*IDPGroupList, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/team-sync/groups", org)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       groups := new(IDPGroupList)
-       resp, err := s.client.Do(ctx, req, groups)
-       if err != nil {
-               return nil, resp, err
-       }
-       return groups, resp, nil
-}
-
-// ListIDPGroupsForTeamByID lists IDP groups connected to a team on GitHub
-// given organization and team IDs.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/team_sync/#list-idp-groups-for-a-team
-func (s *TeamsService) ListIDPGroupsForTeamByID(ctx context.Context, orgID, teamID int64) (*IDPGroupList, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/team-sync/group-mappings", orgID, teamID)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       groups := new(IDPGroupList)
-       resp, err := s.client.Do(ctx, req, groups)
-       if err != nil {
-               return nil, resp, err
-       }
-       return groups, resp, err
-}
-
-// ListIDPGroupsForTeamBySlug lists IDP groups connected to a team on GitHub
-// given organization name and team slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/team_sync/#list-idp-groups-for-a-team
-func (s *TeamsService) ListIDPGroupsForTeamBySlug(ctx context.Context, org, slug string) (*IDPGroupList, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/team-sync/group-mappings", org, slug)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       groups := new(IDPGroupList)
-       resp, err := s.client.Do(ctx, req, groups)
-       if err != nil {
-               return nil, resp, err
-       }
-       return groups, resp, err
-}
-
-// CreateOrUpdateIDPGroupConnectionsByID creates, updates, or removes a connection
-// between a team and an IDP group given organization and team IDs.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/team_sync/#create-or-update-idp-group-connections
-func (s *TeamsService) CreateOrUpdateIDPGroupConnectionsByID(ctx context.Context, orgID, teamID int64, opts IDPGroupList) (*IDPGroupList, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/team-sync/group-mappings", orgID, teamID)
-
-       req, err := s.client.NewRequest("PATCH", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       groups := new(IDPGroupList)
-       resp, err := s.client.Do(ctx, req, groups)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return groups, resp, nil
-}
-
-// CreateOrUpdateIDPGroupConnectionsBySlug creates, updates, or removes a connection
-// between a team and an IDP group given organization name and team slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/team_sync/#create-or-update-idp-group-connections
-func (s *TeamsService) CreateOrUpdateIDPGroupConnectionsBySlug(ctx context.Context, org, slug string, opts IDPGroupList) (*IDPGroupList, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/team-sync/group-mappings", org, slug)
-
-       req, err := s.client.NewRequest("PATCH", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       groups := new(IDPGroupList)
-       resp, err := s.client.Do(ctx, req, groups)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return groups, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/teams_discussion_comments.go b/vendor/github.com/google/go-github/v32/github/teams_discussion_comments.go
deleted file mode 100644 (file)
index 5bdda66..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-// Copyright 2018 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// DiscussionComment represents a GitHub dicussion in a team.
-type DiscussionComment struct {
-       Author        *User      `json:"author,omitempty"`
-       Body          *string    `json:"body,omitempty"`
-       BodyHTML      *string    `json:"body_html,omitempty"`
-       BodyVersion   *string    `json:"body_version,omitempty"`
-       CreatedAt     *Timestamp `json:"created_at,omitempty"`
-       LastEditedAt  *Timestamp `json:"last_edited_at,omitempty"`
-       DiscussionURL *string    `json:"discussion_url,omitempty"`
-       HTMLURL       *string    `json:"html_url,omitempty"`
-       NodeID        *string    `json:"node_id,omitempty"`
-       Number        *int       `json:"number,omitempty"`
-       UpdatedAt     *Timestamp `json:"updated_at,omitempty"`
-       URL           *string    `json:"url,omitempty"`
-       Reactions     *Reactions `json:"reactions,omitempty"`
-}
-
-func (c DiscussionComment) String() string {
-       return Stringify(c)
-}
-
-// DiscussionCommentListOptions specifies optional parameters to the
-// TeamServices.ListComments method.
-type DiscussionCommentListOptions struct {
-       // Sorts the discussion comments by the date they were created.
-       // Accepted values are asc and desc. Default is desc.
-       Direction string `url:"direction,omitempty"`
-       ListOptions
-}
-
-// ListCommentsByID lists all comments on a team discussion by team ID.
-// Authenticated user must grant read:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#list-discussion-comments
-func (s *TeamsService) ListCommentsByID(ctx context.Context, orgID, teamID int64, discussionNumber int, options *DiscussionCommentListOptions) ([]*DiscussionComment, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments", orgID, teamID, discussionNumber)
-       u, err := addOptions(u, options)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var comments []*DiscussionComment
-       resp, err := s.client.Do(ctx, req, &comments)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comments, resp, nil
-}
-
-// ListCommentsBySlug lists all comments on a team discussion by team slug.
-// Authenticated user must grant read:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#list-discussion-comments
-func (s *TeamsService) ListCommentsBySlug(ctx context.Context, org, slug string, discussionNumber int, options *DiscussionCommentListOptions) ([]*DiscussionComment, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments", org, slug, discussionNumber)
-       u, err := addOptions(u, options)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var comments []*DiscussionComment
-       resp, err := s.client.Do(ctx, req, &comments)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return comments, resp, nil
-}
-
-// GetCommentByID gets a specific comment on a team discussion by team ID.
-// Authenticated user must grant read:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#get-a-discussion-comment
-func (s *TeamsService) GetCommentByID(ctx context.Context, orgID, teamID int64, discussionNumber, commentNumber int) (*DiscussionComment, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments/%v", orgID, teamID, discussionNumber, commentNumber)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       discussionComment := &DiscussionComment{}
-       resp, err := s.client.Do(ctx, req, discussionComment)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return discussionComment, resp, nil
-}
-
-// GetCommentBySlug gets a specific comment on a team discussion by team slug.
-// Authenticated user must grant read:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#get-a-discussion-comment
-func (s *TeamsService) GetCommentBySlug(ctx context.Context, org, slug string, discussionNumber, commentNumber int) (*DiscussionComment, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments/%v", org, slug, discussionNumber, commentNumber)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       discussionComment := &DiscussionComment{}
-       resp, err := s.client.Do(ctx, req, discussionComment)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return discussionComment, resp, nil
-}
-
-// CreateCommentByID creates a new comment on a team discussion by team ID.
-// Authenticated user must grant write:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#create-a-discussion-comment
-func (s *TeamsService) CreateCommentByID(ctx context.Context, orgID, teamID int64, discsusionNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments", orgID, teamID, discsusionNumber)
-       req, err := s.client.NewRequest("POST", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       discussionComment := &DiscussionComment{}
-       resp, err := s.client.Do(ctx, req, discussionComment)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return discussionComment, resp, nil
-}
-
-// CreateCommentBySlug creates a new comment on a team discussion by team slug.
-// Authenticated user must grant write:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#create-a-discussion-comment
-func (s *TeamsService) CreateCommentBySlug(ctx context.Context, org, slug string, discsusionNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments", org, slug, discsusionNumber)
-       req, err := s.client.NewRequest("POST", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       discussionComment := &DiscussionComment{}
-       resp, err := s.client.Do(ctx, req, discussionComment)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return discussionComment, resp, nil
-}
-
-// EditCommentByID edits the body text of a discussion comment by team ID.
-// Authenticated user must grant write:discussion scope.
-// User is allowed to edit body of a comment only.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#update-a-discussion-comment
-func (s *TeamsService) EditCommentByID(ctx context.Context, orgID, teamID int64, discussionNumber, commentNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments/%v", orgID, teamID, discussionNumber, commentNumber)
-       req, err := s.client.NewRequest("PATCH", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       discussionComment := &DiscussionComment{}
-       resp, err := s.client.Do(ctx, req, discussionComment)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return discussionComment, resp, nil
-}
-
-// EditCommentBySlug edits the body text of a discussion comment by team slug.
-// Authenticated user must grant write:discussion scope.
-// User is allowed to edit body of a comment only.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#update-a-discussion-comment
-func (s *TeamsService) EditCommentBySlug(ctx context.Context, org, slug string, discussionNumber, commentNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments/%v", org, slug, discussionNumber, commentNumber)
-       req, err := s.client.NewRequest("PATCH", u, comment)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       discussionComment := &DiscussionComment{}
-       resp, err := s.client.Do(ctx, req, discussionComment)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return discussionComment, resp, nil
-}
-
-// DeleteCommentByID deletes a comment on a team discussion by team ID.
-// Authenticated user must grant write:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#delete-a-discussion-comment
-func (s *TeamsService) DeleteCommentByID(ctx context.Context, orgID, teamID int64, discussionNumber, commentNumber int) (*Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments/%v", orgID, teamID, discussionNumber, commentNumber)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DeleteCommentBySlug deletes a comment on a team discussion by team slug.
-// Authenticated user must grant write:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#delete-a-discussion-comment
-func (s *TeamsService) DeleteCommentBySlug(ctx context.Context, org, slug string, discussionNumber, commentNumber int) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments/%v", org, slug, discussionNumber, commentNumber)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/teams_discussions.go b/vendor/github.com/google/go-github/v32/github/teams_discussions.go
deleted file mode 100644 (file)
index 17abe5d..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-// Copyright 2018 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// TeamDiscussion represents a GitHub dicussion in a team.
-type TeamDiscussion struct {
-       Author        *User      `json:"author,omitempty"`
-       Body          *string    `json:"body,omitempty"`
-       BodyHTML      *string    `json:"body_html,omitempty"`
-       BodyVersion   *string    `json:"body_version,omitempty"`
-       CommentsCount *int       `json:"comments_count,omitempty"`
-       CommentsURL   *string    `json:"comments_url,omitempty"`
-       CreatedAt     *Timestamp `json:"created_at,omitempty"`
-       LastEditedAt  *Timestamp `json:"last_edited_at,omitempty"`
-       HTMLURL       *string    `json:"html_url,omitempty"`
-       NodeID        *string    `json:"node_id,omitempty"`
-       Number        *int       `json:"number,omitempty"`
-       Pinned        *bool      `json:"pinned,omitempty"`
-       Private       *bool      `json:"private,omitempty"`
-       TeamURL       *string    `json:"team_url,omitempty"`
-       Title         *string    `json:"title,omitempty"`
-       UpdatedAt     *Timestamp `json:"updated_at,omitempty"`
-       URL           *string    `json:"url,omitempty"`
-       Reactions     *Reactions `json:"reactions,omitempty"`
-}
-
-func (d TeamDiscussion) String() string {
-       return Stringify(d)
-}
-
-// DiscussionListOptions specifies optional parameters to the
-// TeamServices.ListDiscussions method.
-type DiscussionListOptions struct {
-       // Sorts the discussion by the date they were created.
-       // Accepted values are asc and desc. Default is desc.
-       Direction string `url:"direction,omitempty"`
-
-       ListOptions
-}
-
-// ListDiscussionsByID lists all discussions on team's page given Organization and Team ID.
-// Authenticated user must grant read:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussions/#list-discussions
-func (s *TeamsService) ListDiscussionsByID(ctx context.Context, orgID, teamID int64, opts *DiscussionListOptions) ([]*TeamDiscussion, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/discussions", orgID, teamID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var teamDiscussions []*TeamDiscussion
-       resp, err := s.client.Do(ctx, req, &teamDiscussions)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teamDiscussions, resp, nil
-}
-
-// ListDiscussionsBySlug lists all discussions on team's page given Organization name and Team's slug.
-// Authenticated user must grant read:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussions/#list-discussions
-func (s *TeamsService) ListDiscussionsBySlug(ctx context.Context, org, slug string, opts *DiscussionListOptions) ([]*TeamDiscussion, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/discussions", org, slug)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var teamDiscussions []*TeamDiscussion
-       resp, err := s.client.Do(ctx, req, &teamDiscussions)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teamDiscussions, resp, nil
-}
-
-// GetDiscussionByID gets a specific discussion on a team's page given Organization and Team ID.
-// Authenticated user must grant read:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussions/#get-a-discussion
-func (s *TeamsService) GetDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int) (*TeamDiscussion, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       teamDiscussion := &TeamDiscussion{}
-       resp, err := s.client.Do(ctx, req, teamDiscussion)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teamDiscussion, resp, nil
-}
-
-// GetDiscussionBySlug gets a specific discussion on a team's page given Organization name and Team's slug.
-// Authenticated user must grant read:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussions/#get-a-discussion
-func (s *TeamsService) GetDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int) (*TeamDiscussion, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       teamDiscussion := &TeamDiscussion{}
-       resp, err := s.client.Do(ctx, req, teamDiscussion)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teamDiscussion, resp, nil
-}
-
-// CreateDiscussionByID creates a new discussion post on a team's page given Organization and Team ID.
-// Authenticated user must grant write:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussions/#create-a-discussion
-func (s *TeamsService) CreateDiscussionByID(ctx context.Context, orgID, teamID int64, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/discussions", orgID, teamID)
-       req, err := s.client.NewRequest("POST", u, discussion)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       teamDiscussion := &TeamDiscussion{}
-       resp, err := s.client.Do(ctx, req, teamDiscussion)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teamDiscussion, resp, nil
-}
-
-// CreateDiscussionBySlug creates a new discussion post on a team's page given Organization name and Team's slug.
-// Authenticated user must grant write:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussions/#create-a-discussion
-func (s *TeamsService) CreateDiscussionBySlug(ctx context.Context, org, slug string, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/discussions", org, slug)
-       req, err := s.client.NewRequest("POST", u, discussion)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       teamDiscussion := &TeamDiscussion{}
-       resp, err := s.client.Do(ctx, req, teamDiscussion)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teamDiscussion, resp, nil
-}
-
-// EditDiscussionByID edits the title and body text of a discussion post given Organization and Team ID.
-// Authenticated user must grant write:discussion scope.
-// User is allowed to change Title and Body of a discussion only.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussions/#update-a-discussion
-func (s *TeamsService) EditDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber)
-       req, err := s.client.NewRequest("PATCH", u, discussion)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       teamDiscussion := &TeamDiscussion{}
-       resp, err := s.client.Do(ctx, req, teamDiscussion)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teamDiscussion, resp, nil
-}
-
-// EditDiscussionBySlug edits the title and body text of a discussion post given Organization name and Team's slug.
-// Authenticated user must grant write:discussion scope.
-// User is allowed to change Title and Body of a discussion only.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussions/#update-a-discussion
-func (s *TeamsService) EditDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber)
-       req, err := s.client.NewRequest("PATCH", u, discussion)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       teamDiscussion := &TeamDiscussion{}
-       resp, err := s.client.Do(ctx, req, teamDiscussion)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return teamDiscussion, resp, nil
-}
-
-// DeleteDiscussionByID deletes a discussion from team's page given Organization and Team ID.
-// Authenticated user must grant write:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussions/#delete-a-discussion
-func (s *TeamsService) DeleteDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int) (*Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DeleteDiscussionBySlug deletes a discussion from team's page given Organization name and Team's slug.
-// Authenticated user must grant write:discussion scope.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/discussions/#delete-a-discussion
-func (s *TeamsService) DeleteDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/teams_members.go b/vendor/github.com/google/go-github/v32/github/teams_members.go
deleted file mode 100644 (file)
index b5d31aa..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright 2018 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// TeamListTeamMembersOptions specifies the optional parameters to the
-// TeamsService.ListTeamMembers method.
-type TeamListTeamMembersOptions struct {
-       // Role filters members returned by their role in the team. Possible
-       // values are "all", "member", "maintainer". Default is "all".
-       Role string `url:"role,omitempty"`
-
-       ListOptions
-}
-
-// ListTeamMembersByID lists all of the users who are members of a team, given a specified
-// organization ID, by team ID.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/members/#list-team-members
-func (s *TeamsService) ListTeamMembersByID(ctx context.Context, orgID, teamID int64, opts *TeamListTeamMembersOptions) ([]*User, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/members", orgID, teamID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var members []*User
-       resp, err := s.client.Do(ctx, req, &members)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return members, resp, nil
-}
-
-// ListTeamMembersBySlug lists all of the users who are members of a team, given a specified
-// organization name, by team slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/members/#list-team-members
-func (s *TeamsService) ListTeamMembersBySlug(ctx context.Context, org, slug string, opts *TeamListTeamMembersOptions) ([]*User, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/members", org, slug)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var members []*User
-       resp, err := s.client.Do(ctx, req, &members)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return members, resp, nil
-}
-
-// GetTeamMembershipByID returns the membership status for a user in a team, given a specified
-// organization ID, by team ID.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/members/#get-team-membership-for-a-user
-func (s *TeamsService) GetTeamMembershipByID(ctx context.Context, orgID, teamID int64, user string) (*Membership, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/memberships/%v", orgID, teamID, user)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Membership)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// GetTeamMembershipBySlug returns the membership status for a user in a team, given a specified
-// organization name, by team slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/members/#get-team-membership-for-a-user
-func (s *TeamsService) GetTeamMembershipBySlug(ctx context.Context, org, slug, user string) (*Membership, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/memberships/%v", org, slug, user)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Membership)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// TeamAddTeamMembershipOptions specifies the optional
-// parameters to the TeamsService.AddTeamMembership method.
-type TeamAddTeamMembershipOptions struct {
-       // Role specifies the role the user should have in the team. Possible
-       // values are:
-       //     member - a normal member of the team
-       //     maintainer - a team maintainer. Able to add/remove other team
-       //                  members, promote other team members to team
-       //                  maintainer, and edit the team’s name and description
-       //
-       // Default value is "member".
-       Role string `json:"role,omitempty"`
-}
-
-// AddTeamMembership adds or invites a user to a team, given a specified
-// organization ID, by team ID.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/members/#add-or-update-team-membership-for-a-user
-func (s *TeamsService) AddTeamMembershipByID(ctx context.Context, orgID, teamID int64, user string, opts *TeamAddTeamMembershipOptions) (*Membership, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/memberships/%v", orgID, teamID, user)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Membership)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// AddTeamMembershipBySlug adds or invites a user to a team, given a specified
-// organization name, by team slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/members/#add-or-update-team-membership-for-a-user
-func (s *TeamsService) AddTeamMembershipBySlug(ctx context.Context, org, slug, user string, opts *TeamAddTeamMembershipOptions) (*Membership, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/memberships/%v", org, slug, user)
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       t := new(Membership)
-       resp, err := s.client.Do(ctx, req, t)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return t, resp, nil
-}
-
-// RemoveTeamMembership removes a user from a team, given a specified
-// organization ID, by team ID.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/members/#remove-team-membership-for-a-user
-func (s *TeamsService) RemoveTeamMembershipByID(ctx context.Context, orgID, teamID int64, user string) (*Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/memberships/%v", orgID, teamID, user)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// RemoveTeamMembership removes a user from a team, given a specified
-// organization name, by team slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/members/#remove-team-membership-for-a-user
-func (s *TeamsService) RemoveTeamMembershipBySlug(ctx context.Context, org, slug, user string) (*Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/memberships/%v", org, slug, user)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// ListPendingTeamInvitationsByID gets pending invitation list of a team, given a specified
-// organization ID, by team ID.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/members/#list-pending-team-invitations
-func (s *TeamsService) ListPendingTeamInvitationsByID(ctx context.Context, orgID, teamID int64, opts *ListOptions) ([]*Invitation, *Response, error) {
-       u := fmt.Sprintf("organizations/%v/team/%v/invitations", orgID, teamID)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var pendingInvitations []*Invitation
-       resp, err := s.client.Do(ctx, req, &pendingInvitations)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return pendingInvitations, resp, nil
-}
-
-// ListPendingTeamInvitationsByID get pending invitation list of a team, given a specified
-// organization name, by team slug.
-//
-// GitHub API docs: https://developer.github.com/v3/teams/members/#list-pending-team-invitations
-func (s *TeamsService) ListPendingTeamInvitationsBySlug(ctx context.Context, org, slug string, opts *ListOptions) ([]*Invitation, *Response, error) {
-       u := fmt.Sprintf("orgs/%v/teams/%v/invitations", org, slug)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var pendingInvitations []*Invitation
-       resp, err := s.client.Do(ctx, req, &pendingInvitations)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return pendingInvitations, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/timestamp.go b/vendor/github.com/google/go-github/v32/github/timestamp.go
deleted file mode 100644 (file)
index 90929d5..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "strconv"
-       "time"
-)
-
-// Timestamp represents a time that can be unmarshalled from a JSON string
-// formatted as either an RFC3339 or Unix timestamp. This is necessary for some
-// fields since the GitHub API is inconsistent in how it represents times. All
-// exported methods of time.Time can be called on Timestamp.
-type Timestamp struct {
-       time.Time
-}
-
-func (t Timestamp) String() string {
-       return t.Time.String()
-}
-
-// UnmarshalJSON implements the json.Unmarshaler interface.
-// Time is expected in RFC3339 or Unix format.
-func (t *Timestamp) UnmarshalJSON(data []byte) (err error) {
-       str := string(data)
-       i, err := strconv.ParseInt(str, 10, 64)
-       if err == nil {
-               t.Time = time.Unix(i, 0)
-       } else {
-               t.Time, err = time.Parse(`"`+time.RFC3339+`"`, str)
-       }
-       return
-}
-
-// Equal reports whether t and u are equal based on time.Equal
-func (t Timestamp) Equal(u Timestamp) bool {
-       return t.Time.Equal(u.Time)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/users.go b/vendor/github.com/google/go-github/v32/github/users.go
deleted file mode 100644 (file)
index a387ee1..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// UsersService handles communication with the user related
-// methods of the GitHub API.
-//
-// GitHub API docs: https://developer.github.com/v3/users/
-type UsersService service
-
-// User represents a GitHub user.
-type User struct {
-       Login                   *string    `json:"login,omitempty"`
-       ID                      *int64     `json:"id,omitempty"`
-       NodeID                  *string    `json:"node_id,omitempty"`
-       AvatarURL               *string    `json:"avatar_url,omitempty"`
-       HTMLURL                 *string    `json:"html_url,omitempty"`
-       GravatarID              *string    `json:"gravatar_id,omitempty"`
-       Name                    *string    `json:"name,omitempty"`
-       Company                 *string    `json:"company,omitempty"`
-       Blog                    *string    `json:"blog,omitempty"`
-       Location                *string    `json:"location,omitempty"`
-       Email                   *string    `json:"email,omitempty"`
-       Hireable                *bool      `json:"hireable,omitempty"`
-       Bio                     *string    `json:"bio,omitempty"`
-       TwitterUsername         *string    `json:"twitter_username,omitempty"`
-       PublicRepos             *int       `json:"public_repos,omitempty"`
-       PublicGists             *int       `json:"public_gists,omitempty"`
-       Followers               *int       `json:"followers,omitempty"`
-       Following               *int       `json:"following,omitempty"`
-       CreatedAt               *Timestamp `json:"created_at,omitempty"`
-       UpdatedAt               *Timestamp `json:"updated_at,omitempty"`
-       SuspendedAt             *Timestamp `json:"suspended_at,omitempty"`
-       Type                    *string    `json:"type,omitempty"`
-       SiteAdmin               *bool      `json:"site_admin,omitempty"`
-       TotalPrivateRepos       *int       `json:"total_private_repos,omitempty"`
-       OwnedPrivateRepos       *int       `json:"owned_private_repos,omitempty"`
-       PrivateGists            *int       `json:"private_gists,omitempty"`
-       DiskUsage               *int       `json:"disk_usage,omitempty"`
-       Collaborators           *int       `json:"collaborators,omitempty"`
-       TwoFactorAuthentication *bool      `json:"two_factor_authentication,omitempty"`
-       Plan                    *Plan      `json:"plan,omitempty"`
-       LdapDn                  *string    `json:"ldap_dn,omitempty"`
-
-       // API URLs
-       URL               *string `json:"url,omitempty"`
-       EventsURL         *string `json:"events_url,omitempty"`
-       FollowingURL      *string `json:"following_url,omitempty"`
-       FollowersURL      *string `json:"followers_url,omitempty"`
-       GistsURL          *string `json:"gists_url,omitempty"`
-       OrganizationsURL  *string `json:"organizations_url,omitempty"`
-       ReceivedEventsURL *string `json:"received_events_url,omitempty"`
-       ReposURL          *string `json:"repos_url,omitempty"`
-       StarredURL        *string `json:"starred_url,omitempty"`
-       SubscriptionsURL  *string `json:"subscriptions_url,omitempty"`
-
-       // TextMatches is only populated from search results that request text matches
-       // See: search.go and https://developer.github.com/v3/search/#text-match-metadata
-       TextMatches []*TextMatch `json:"text_matches,omitempty"`
-
-       // Permissions identifies the permissions that a user has on a given
-       // repository. This is only populated when calling Repositories.ListCollaborators.
-       Permissions *map[string]bool `json:"permissions,omitempty"`
-}
-
-func (u User) String() string {
-       return Stringify(u)
-}
-
-// Get fetches a user. Passing the empty string will fetch the authenticated
-// user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/#get-the-authenticated-user
-// GitHub API docs: https://developer.github.com/v3/users/#get-a-user
-func (s *UsersService) Get(ctx context.Context, user string) (*User, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v", user)
-       } else {
-               u = "user"
-       }
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       uResp := new(User)
-       resp, err := s.client.Do(ctx, req, uResp)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return uResp, resp, nil
-}
-
-// GetByID fetches a user.
-//
-// Note: GetByID uses the undocumented GitHub API endpoint /user/:id.
-func (s *UsersService) GetByID(ctx context.Context, id int64) (*User, *Response, error) {
-       u := fmt.Sprintf("user/%d", id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       user := new(User)
-       resp, err := s.client.Do(ctx, req, user)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return user, resp, nil
-}
-
-// Edit the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/#update-the-authenticated-user
-func (s *UsersService) Edit(ctx context.Context, user *User) (*User, *Response, error) {
-       u := "user"
-       req, err := s.client.NewRequest("PATCH", u, user)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       uResp := new(User)
-       resp, err := s.client.Do(ctx, req, uResp)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return uResp, resp, nil
-}
-
-// HovercardOptions specifies optional parameters to the UsersService.GetHovercard
-// method.
-type HovercardOptions struct {
-       // SubjectType specifies the additional information to be received about the hovercard.
-       // Possible values are: organization, repository, issue, pull_request. (Required when using subject_id.)
-       SubjectType string `url:"subject_type"`
-
-       // SubjectID specifies the ID for the SubjectType. (Required when using subject_type.)
-       SubjectID string `url:"subject_id"`
-}
-
-// Hovercard represents hovercard information about a user.
-type Hovercard struct {
-       Contexts []*UserContext `json:"contexts,omitempty"`
-}
-
-// UserContext represents the contextual information about user.
-type UserContext struct {
-       Message *string `json:"message,omitempty"`
-       Octicon *string `json:"octicon,omitempty"`
-}
-
-// GetHovercard fetches contextual information about user. It requires authentication
-// via Basic Auth or via OAuth with the repo scope.
-//
-// GitHub API docs: https://developer.github.com/v3/users/#get-contextual-information-for-a-user
-func (s *UsersService) GetHovercard(ctx context.Context, user string, opts *HovercardOptions) (*Hovercard, *Response, error) {
-       u := fmt.Sprintf("users/%v/hovercard", user)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       hc := new(Hovercard)
-       resp, err := s.client.Do(ctx, req, hc)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return hc, resp, nil
-}
-
-// UserListOptions specifies optional parameters to the UsersService.ListAll
-// method.
-type UserListOptions struct {
-       // ID of the last user seen
-       Since int64 `url:"since,omitempty"`
-
-       // Note: Pagination is powered exclusively by the Since parameter,
-       // ListOptions.Page has no effect.
-       // ListOptions.PerPage controls an undocumented GitHub API parameter.
-       ListOptions
-}
-
-// ListAll lists all GitHub users.
-//
-// To paginate through all users, populate 'Since' with the ID of the last user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/#list-users
-func (s *UsersService) ListAll(ctx context.Context, opts *UserListOptions) ([]*User, *Response, error) {
-       u, err := addOptions("users", opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var users []*User
-       resp, err := s.client.Do(ctx, req, &users)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return users, resp, nil
-}
-
-// ListInvitations lists all currently-open repository invitations for the
-// authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/invitations/#list-repository-invitations-for-the-authenticated-user
-func (s *UsersService) ListInvitations(ctx context.Context, opts *ListOptions) ([]*RepositoryInvitation, *Response, error) {
-       u, err := addOptions("user/repository_invitations", opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       invites := []*RepositoryInvitation{}
-       resp, err := s.client.Do(ctx, req, &invites)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return invites, resp, nil
-}
-
-// AcceptInvitation accepts the currently-open repository invitation for the
-// authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/invitations/#accept-a-repository-invitation
-func (s *UsersService) AcceptInvitation(ctx context.Context, invitationID int64) (*Response, error) {
-       u := fmt.Sprintf("user/repository_invitations/%v", invitationID)
-       req, err := s.client.NewRequest("PATCH", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DeclineInvitation declines the currently-open repository invitation for the
-// authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/repos/invitations/#decline-a-repository-invitation
-func (s *UsersService) DeclineInvitation(ctx context.Context, invitationID int64) (*Response, error) {
-       u := fmt.Sprintf("user/repository_invitations/%v", invitationID)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/users_administration.go b/vendor/github.com/google/go-github/v32/github/users_administration.go
deleted file mode 100644 (file)
index aef947e..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2014 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// PromoteSiteAdmin promotes a user to a site administrator of a GitHub Enterprise instance.
-//
-// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#promote-an-ordinary-user-to-a-site-administrator
-func (s *UsersService) PromoteSiteAdmin(ctx context.Context, user string) (*Response, error) {
-       u := fmt.Sprintf("users/%v/site_admin", user)
-
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// DemoteSiteAdmin demotes a user from site administrator of a GitHub Enterprise instance.
-//
-// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#demote-a-site-administrator-to-an-ordinary-user
-func (s *UsersService) DemoteSiteAdmin(ctx context.Context, user string) (*Response, error) {
-       u := fmt.Sprintf("users/%v/site_admin", user)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// UserSuspendOptions represents the reason a user is being suspended.
-type UserSuspendOptions struct {
-       Reason *string `json:"reason,omitempty"`
-}
-
-// Suspend a user on a GitHub Enterprise instance.
-//
-// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#suspend-a-user
-func (s *UsersService) Suspend(ctx context.Context, user string, opts *UserSuspendOptions) (*Response, error) {
-       u := fmt.Sprintf("users/%v/suspended", user)
-
-       req, err := s.client.NewRequest("PUT", u, opts)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// Unsuspend a user on a GitHub Enterprise instance.
-//
-// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#unsuspend-a-user
-func (s *UsersService) Unsuspend(ctx context.Context, user string) (*Response, error) {
-       u := fmt.Sprintf("users/%v/suspended", user)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/users_blocking.go b/vendor/github.com/google/go-github/v32/github/users_blocking.go
deleted file mode 100644 (file)
index 1c292e5..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListBlockedUsers lists all the blocked users by the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/blocking/#list-users-blocked-by-the-authenticated-user
-func (s *UsersService) ListBlockedUsers(ctx context.Context, opts *ListOptions) ([]*User, *Response, error) {
-       u := "user/blocks"
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
-
-       var blockedUsers []*User
-       resp, err := s.client.Do(ctx, req, &blockedUsers)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return blockedUsers, resp, nil
-}
-
-// IsBlocked reports whether specified user is blocked by the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/blocking/#check-if-a-user-is-blocked-by-the-authenticated-user
-func (s *UsersService) IsBlocked(ctx context.Context, user string) (bool, *Response, error) {
-       u := fmt.Sprintf("user/blocks/%v", user)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
-
-       resp, err := s.client.Do(ctx, req, nil)
-       isBlocked, err := parseBoolResponse(err)
-       return isBlocked, resp, err
-}
-
-// BlockUser blocks specified user for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/blocking/#block-a-user
-func (s *UsersService) BlockUser(ctx context.Context, user string) (*Response, error) {
-       u := fmt.Sprintf("user/blocks/%v", user)
-
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// UnblockUser unblocks specified user for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/blocking/#unblock-a-user
-func (s *UsersService) UnblockUser(ctx context.Context, user string) (*Response, error) {
-       u := fmt.Sprintf("user/blocks/%v", user)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/users_emails.go b/vendor/github.com/google/go-github/v32/github/users_emails.go
deleted file mode 100644 (file)
index 05870c0..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import "context"
-
-// UserEmail represents user's email address
-type UserEmail struct {
-       Email      *string `json:"email,omitempty"`
-       Primary    *bool   `json:"primary,omitempty"`
-       Verified   *bool   `json:"verified,omitempty"`
-       Visibility *string `json:"visibility,omitempty"`
-}
-
-// ListEmails lists all email addresses for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/emails/#list-email-addresses-for-the-authenticated-user
-func (s *UsersService) ListEmails(ctx context.Context, opts *ListOptions) ([]*UserEmail, *Response, error) {
-       u := "user/emails"
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var emails []*UserEmail
-       resp, err := s.client.Do(ctx, req, &emails)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return emails, resp, nil
-}
-
-// AddEmails adds email addresses of the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/emails/#add-an-email-address-for-the-authenticated-user
-func (s *UsersService) AddEmails(ctx context.Context, emails []string) ([]*UserEmail, *Response, error) {
-       u := "user/emails"
-       req, err := s.client.NewRequest("POST", u, emails)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var e []*UserEmail
-       resp, err := s.client.Do(ctx, req, &e)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return e, resp, nil
-}
-
-// DeleteEmails deletes email addresses from authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/emails/#delete-an-email-address-for-the-authenticated-user
-func (s *UsersService) DeleteEmails(ctx context.Context, emails []string) (*Response, error) {
-       u := "user/emails"
-       req, err := s.client.NewRequest("DELETE", u, emails)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/users_followers.go b/vendor/github.com/google/go-github/v32/github/users_followers.go
deleted file mode 100644 (file)
index bd0a373..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListFollowers lists the followers for a user. Passing the empty string will
-// fetch followers for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/followers/#list-followers-of-a-user
-// GitHub API docs: https://developer.github.com/v3/users/followers/#list-followers-of-the-authenticated-user
-func (s *UsersService) ListFollowers(ctx context.Context, user string, opts *ListOptions) ([]*User, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v/followers", user)
-       } else {
-               u = "user/followers"
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var users []*User
-       resp, err := s.client.Do(ctx, req, &users)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return users, resp, nil
-}
-
-// ListFollowing lists the people that a user is following. Passing the empty
-// string will list people the authenticated user is following.
-//
-// GitHub API docs: https://developer.github.com/v3/users/followers/#list-the-people-the-authenticated-user-follows
-// GitHub API docs: https://developer.github.com/v3/users/followers/#list-the-people-a-user-follows
-func (s *UsersService) ListFollowing(ctx context.Context, user string, opts *ListOptions) ([]*User, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v/following", user)
-       } else {
-               u = "user/following"
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var users []*User
-       resp, err := s.client.Do(ctx, req, &users)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return users, resp, nil
-}
-
-// IsFollowing checks if "user" is following "target". Passing the empty
-// string for "user" will check if the authenticated user is following "target".
-//
-// GitHub API docs: https://developer.github.com/v3/users/followers/#check-if-a-person-is-followed-by-the-authenticated-user
-// GitHub API docs: https://developer.github.com/v3/users/followers/#check-if-a-user-follows-another-user
-func (s *UsersService) IsFollowing(ctx context.Context, user, target string) (bool, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v/following/%v", user, target)
-       } else {
-               u = fmt.Sprintf("user/following/%v", target)
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return false, nil, err
-       }
-
-       resp, err := s.client.Do(ctx, req, nil)
-       following, err := parseBoolResponse(err)
-       return following, resp, err
-}
-
-// Follow will cause the authenticated user to follow the specified user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/followers/#follow-a-user
-func (s *UsersService) Follow(ctx context.Context, user string) (*Response, error) {
-       u := fmt.Sprintf("user/following/%v", user)
-       req, err := s.client.NewRequest("PUT", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
-
-// Unfollow will cause the authenticated user to unfollow the specified user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/followers/#unfollow-a-user
-func (s *UsersService) Unfollow(ctx context.Context, user string) (*Response, error) {
-       u := fmt.Sprintf("user/following/%v", user)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/users_gpg_keys.go b/vendor/github.com/google/go-github/v32/github/users_gpg_keys.go
deleted file mode 100644 (file)
index 077a6c2..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright 2016 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-       "time"
-)
-
-// GPGKey represents a GitHub user's public GPG key used to verify GPG signed commits and tags.
-//
-// https://developer.github.com/changes/2016-04-04-git-signing-api-preview/
-type GPGKey struct {
-       ID                *int64      `json:"id,omitempty"`
-       PrimaryKeyID      *int64      `json:"primary_key_id,omitempty"`
-       KeyID             *string     `json:"key_id,omitempty"`
-       PublicKey         *string     `json:"public_key,omitempty"`
-       Emails            []*GPGEmail `json:"emails,omitempty"`
-       Subkeys           []*GPGKey   `json:"subkeys,omitempty"`
-       CanSign           *bool       `json:"can_sign,omitempty"`
-       CanEncryptComms   *bool       `json:"can_encrypt_comms,omitempty"`
-       CanEncryptStorage *bool       `json:"can_encrypt_storage,omitempty"`
-       CanCertify        *bool       `json:"can_certify,omitempty"`
-       CreatedAt         *time.Time  `json:"created_at,omitempty"`
-       ExpiresAt         *time.Time  `json:"expires_at,omitempty"`
-}
-
-// String stringifies a GPGKey.
-func (k GPGKey) String() string {
-       return Stringify(k)
-}
-
-// GPGEmail represents an email address associated to a GPG key.
-type GPGEmail struct {
-       Email    *string `json:"email,omitempty"`
-       Verified *bool   `json:"verified,omitempty"`
-}
-
-// ListGPGKeys lists the public GPG keys for a user. Passing the empty
-// string will fetch keys for the authenticated user. It requires authentication
-// via Basic Auth or via OAuth with at least read:gpg_key scope.
-//
-// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#list-gpg-keys-for-a-user
-// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#list-gpg-keys-for-the-authenticated-user
-func (s *UsersService) ListGPGKeys(ctx context.Context, user string, opts *ListOptions) ([]*GPGKey, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v/gpg_keys", user)
-       } else {
-               u = "user/gpg_keys"
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var keys []*GPGKey
-       resp, err := s.client.Do(ctx, req, &keys)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return keys, resp, nil
-}
-
-// GetGPGKey gets extended details for a single GPG key. It requires authentication
-// via Basic Auth or via OAuth with at least read:gpg_key scope.
-//
-// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#get-a-gpg-key-for-the-authenticated-user
-func (s *UsersService) GetGPGKey(ctx context.Context, id int64) (*GPGKey, *Response, error) {
-       u := fmt.Sprintf("user/gpg_keys/%v", id)
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       key := &GPGKey{}
-       resp, err := s.client.Do(ctx, req, key)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return key, resp, nil
-}
-
-// CreateGPGKey creates a GPG key. It requires authenticatation via Basic Auth
-// or OAuth with at least write:gpg_key scope.
-//
-// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#create-a-gpg-key
-func (s *UsersService) CreateGPGKey(ctx context.Context, armoredPublicKey string) (*GPGKey, *Response, error) {
-       gpgKey := &struct {
-               ArmoredPublicKey string `json:"armored_public_key"`
-       }{ArmoredPublicKey: armoredPublicKey}
-       req, err := s.client.NewRequest("POST", "user/gpg_keys", gpgKey)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       key := &GPGKey{}
-       resp, err := s.client.Do(ctx, req, key)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return key, resp, nil
-}
-
-// DeleteGPGKey deletes a GPG key. It requires authentication via Basic Auth or
-// via OAuth with at least admin:gpg_key scope.
-//
-// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#delete-a-gpg-key-for-the-authenticated-user
-func (s *UsersService) DeleteGPGKey(ctx context.Context, id int64) (*Response, error) {
-       u := fmt.Sprintf("user/gpg_keys/%v", id)
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/users_keys.go b/vendor/github.com/google/go-github/v32/github/users_keys.go
deleted file mode 100644 (file)
index e6b6380..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2013 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// Key represents a public SSH key used to authenticate a user or deploy script.
-type Key struct {
-       ID        *int64     `json:"id,omitempty"`
-       Key       *string    `json:"key,omitempty"`
-       URL       *string    `json:"url,omitempty"`
-       Title     *string    `json:"title,omitempty"`
-       ReadOnly  *bool      `json:"read_only,omitempty"`
-       CreatedAt *Timestamp `json:"created_at,omitempty"`
-}
-
-func (k Key) String() string {
-       return Stringify(k)
-}
-
-// ListKeys lists the verified public keys for a user. Passing the empty
-// string will fetch keys for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/keys/#list-public-keys-for-a-user
-// GitHub API docs: https://developer.github.com/v3/users/keys/#list-public-ssh-keys-for-the-authenticated-user
-func (s *UsersService) ListKeys(ctx context.Context, user string, opts *ListOptions) ([]*Key, *Response, error) {
-       var u string
-       if user != "" {
-               u = fmt.Sprintf("users/%v/keys", user)
-       } else {
-               u = "user/keys"
-       }
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       var keys []*Key
-       resp, err := s.client.Do(ctx, req, &keys)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return keys, resp, nil
-}
-
-// GetKey fetches a single public key.
-//
-// GitHub API docs: https://developer.github.com/v3/users/keys/#get-a-public-ssh-key-for-the-authenticated-user
-func (s *UsersService) GetKey(ctx context.Context, id int64) (*Key, *Response, error) {
-       u := fmt.Sprintf("user/keys/%v", id)
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       key := new(Key)
-       resp, err := s.client.Do(ctx, req, key)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return key, resp, nil
-}
-
-// CreateKey adds a public key for the authenticated user.
-//
-// GitHub API docs: https://developer.github.com/v3/users/keys/#create-a-public-ssh-key-for-the-authenticated-user
-func (s *UsersService) CreateKey(ctx context.Context, key *Key) (*Key, *Response, error) {
-       u := "user/keys"
-
-       req, err := s.client.NewRequest("POST", u, key)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       k := new(Key)
-       resp, err := s.client.Do(ctx, req, k)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return k, resp, nil
-}
-
-// DeleteKey deletes a public key.
-//
-// GitHub API docs: https://developer.github.com/v3/users/keys/#delete-a-public-ssh-key-for-the-authenticated-user
-func (s *UsersService) DeleteKey(ctx context.Context, id int64) (*Response, error) {
-       u := fmt.Sprintf("user/keys/%v", id)
-
-       req, err := s.client.NewRequest("DELETE", u, nil)
-       if err != nil {
-               return nil, err
-       }
-
-       return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v32/github/users_projects.go b/vendor/github.com/google/go-github/v32/github/users_projects.go
deleted file mode 100644 (file)
index 1357055..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2019 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-       "context"
-       "fmt"
-)
-
-// ListProjects lists the projects for the specified user.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/#list-user-projects
-func (s *UsersService) ListProjects(ctx context.Context, user string, opts *ProjectListOptions) ([]*Project, *Response, error) {
-       u := fmt.Sprintf("users/%v/projects", user)
-       u, err := addOptions(u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       req, err := s.client.NewRequest("GET", u, nil)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       var projects []*Project
-       resp, err := s.client.Do(ctx, req, &projects)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return projects, resp, nil
-}
-
-// CreateUserProjectOptions specifies the parameters to the UsersService.CreateProject method.
-type CreateUserProjectOptions struct {
-       // The name of the project. (Required.)
-       Name string `json:"name"`
-       // The description of the project. (Optional.)
-       Body *string `json:"body,omitempty"`
-}
-
-// CreateProject creates a GitHub Project for the current user.
-//
-// GitHub API docs: https://developer.github.com/v3/projects/#create-a-user-project
-func (s *UsersService) CreateProject(ctx context.Context, opts *CreateUserProjectOptions) (*Project, *Response, error) {
-       u := "user/projects"
-       req, err := s.client.NewRequest("POST", u, opts)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       // TODO: remove custom Accept header when this API fully launches.
-       req.Header.Set("Accept", mediaTypeProjectsPreview)
-
-       project := &Project{}
-       resp, err := s.client.Do(ctx, req, project)
-       if err != nil {
-               return nil, resp, err
-       }
-
-       return project, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v32/github/with_appengine.go b/vendor/github.com/google/go-github/v32/github/with_appengine.go
deleted file mode 100644 (file)
index 59ce26b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build appengine
-
-// This file provides glue for making github work on App Engine.
-
-package github
-
-import (
-       "context"
-       "net/http"
-)
-
-func withContext(ctx context.Context, req *http.Request) *http.Request {
-       // No-op because App Engine adds context to a request differently.
-       return req
-}
diff --git a/vendor/github.com/google/go-github/v32/github/without_appengine.go b/vendor/github.com/google/go-github/v32/github/without_appengine.go
deleted file mode 100644 (file)
index 6f8fdac..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2017 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !appengine
-
-// This file provides glue for making github work without App Engine.
-
-package github
-
-import (
-       "context"
-       "net/http"
-)
-
-func withContext(ctx context.Context, req *http.Request) *http.Request {
-       return req.WithContext(ctx)
-}
diff --git a/vendor/github.com/google/go-github/v37/AUTHORS b/vendor/github.com/google/go-github/v37/AUTHORS
new file mode 100644 (file)
index 0000000..f8b2328
--- /dev/null
@@ -0,0 +1,335 @@
+# This is the official list of go-github authors for copyright purposes.
+#
+# This does not necessarily list everyone who has contributed code, since in
+# some cases, their employer may be the copyright holder. To see the full list
+# of contributors, see the revision history in source control or
+# https://github.com/google/go-github/graphs/contributors.
+#
+# Authors who wish to be recognized in this file should add themselves (or
+# their employer, as appropriate).
+
+178inaba <masahiro.furudate@gmail.com>
+2BFL <imqksl@gmail.com>
+413x <dedifferentiator@gmail.com>
+Abhinav Gupta <mail@abhinavg.net>
+adrienzieba <adrien.zieba@appdirect.com>
+afdesk <work@afdesk.com>
+Ahmed Hagy <a.akram93@gmail.com>
+Aidan Steele <aidan.steele@glassechidna.com.au>
+Ainsley Chong <ainsley.chong@gmail.com>
+ajz01 <azdenek@yahoo.com>
+Akeda Bagus <akeda@x-team.com>
+Akhil Mohan <akhilerm@gmail.com>
+Alec Thomas <alec@swapoff.org>
+Aleks Clark <aleks.clark@gmail.com>
+Alex Bramley <a.bramley@gmail.com>
+Alex Orr <Alexorr.CSE@gmail.com>
+Alex Unger <zyxancf@gmail.com>
+Alexander Harkness <me@bearbin.net>
+Ali Farooq <ali.farooq0@pm.me>
+Allen Sun <shlallen1990@gmail.com>
+Amey Sakhadeo <me@ameyms.com>
+Anders Janmyr <anders@janmyr.com>
+Andreas Garnæs <https://github.com/andreas>
+Andrew Ryabchun <aryabchun@mail.ua>
+Andy Grunwald <andygrunwald@gmail.com>
+Andy Hume <andyhume@gmail.com>
+Andy Lindeman <andy@lindeman.io>
+angie pinilla <angelinepinilla@gmail.com>
+anjanashenoy <anjanashenoy1@gmail.com>
+Anshuman Bhartiya <anshuman.bhartiya@gmail.com>
+Antoine <antoine.tu@mail.mcgill.ca>
+Antoine Pelisse <apelisse@gmail.com>
+Anton Nguyen <afnguyen85@gmail.com>
+Anubha Kushwaha <anubha_bt2k14@dtu.ac.in>
+appilon <apilon@hashicorp.com>
+aprp <doelaudi@gmail.com>
+Aravind <aravindkp@outlook.in>
+Arda Kuyumcu <kuyumcuarda@gmail.com>
+Arıl Bozoluk <arilbozoluk@hotmail.com>
+Asier Marruedo <asiermarruedo@gmail.com>
+Austin Burdine <acburdine@gmail.com>
+Austin Dizzy <dizzy@wow.com>
+Ben Batha <bhbatha@gmail.com>
+Benjamen Keroack <benjamen@dollarshaveclub.com>
+Beshr Kayali <beshrkayali@gmail.com>
+Beyang Liu <beyang.liu@gmail.com>
+Billy Keyes <bluekeyes@gmail.com>
+Billy Lynch <wlynch92@gmail.com>
+Björn Häuser <b.haeuser@rebuy.de>
+boljen <bol.christophe@gmail.com>
+Brad Harris <bmharris@gmail.com>
+Brad Moylan <moylan.brad@gmail.com>
+Bradley Falzon <brad@teambrad.net>
+Bradley McAllister <brad.mcallister@hotmail.com>
+Brandon Cook <phylake@gmail.com>
+Brian Egizi <brian@mojotech.com>
+Bryan Boreham <bryan@weave.works>
+Cami Diez <diezcami@gmail.com>
+Carl Johnson <me@carlmjohnson.net>
+Carlos Alexandro Becker <caarlos0@gmail.com>
+Carlos Tadeu Panato Junior <ctadeu@gmail.com>
+chandresh-pancholi <chandreshpancholi007@gmail.com>
+Charles Fenwick Elliott <Charles@FenwickElliott.io>
+Charlie Yan <charlieyan08@gmail.com>
+Chris King <chriskingnet@gmail.com>
+Chris Raborg <craborg57@gmail.com>
+Chris Roche <chris@vsco.co>
+Chris Schaefer <chris@dtzq.com>
+chrisforrette <chris@chrisforrette.com>
+Christian Muehlhaeuser <muesli@gmail.com>
+Christoph Sassenberg <defsprite@gmail.com>
+Colin Misare <github.com/cmisare>
+Craig Peterson <cpeterson@stackoverflow.com>
+Cristian Maglie <c.maglie@bug.st>
+Daehyeok Mun <daehyeok@gmail.com>
+Daniel Lanner <lanner.dan@gmail.com>
+Daniel Leavitt <daniel.leavitt@gmail.com>
+Daniel Nilsson <daniel.nilsson1989@gmail.com>
+Daoq <masseto2002@gmail.com>
+Dave Du Cros <davidducros@gmail.com>
+Dave Henderson <dhenderson@gmail.com>
+Dave Protasowski <dprotaso@gmail.com>
+David Deng <daviddengcn@gmail.com>
+David J. M. Karlsen <david@davidkarlsen.com>
+David Jannotta <djannotta@gmail.com>
+David Ji <github.com/davidji99>
+David Lopez Reyes <davidlopezre@gmail.com>
+Davide Zipeto <dawez1@gmail.com>
+Dennis Webb <dennis@bluesentryit.com>
+Dhi Aurrahman <diorahman@rockybars.com>
+Diego Lapiduz <diego.lapiduz@cfpb.gov>
+Dmitri Shuralyov <shurcooL@gmail.com>
+dmnlk <seikima2demon@gmail.com>
+Don Petersen <don@donpetersen.net>
+Doug Turner <doug.turner@gmail.com>
+Drew Fradette <drew.fradette@gmail.com>
+Dustin Deus <deusdustin@gmail.com>
+Eivind <eivindkn@gmail.com>
+Eli Uriegas <seemethere101@gmail.com>
+Elliott Beach <elliott2.71828@gmail.com>
+Emerson Wood <emersonwood94@gmail.com>
+eperm <staffordworrell@gmail.com>
+Erick Fejta <erick@fejta.com>
+Erik Nobel <hendrik.nobel@transferwise.com>
+erwinvaneyk <erwinvaneyk@gmail.com>
+Evan Elias <evanjelias@gmail.com>
+Fabrice <fabrice.vaillant@student.ecp.fr>
+Felix Geisendörfer <felix@debuggable.com>
+Filippo Valsorda <hi@filippo.io>
+Florian Forster <ff@octo.it>
+Francesc Gil <xescugil@gmail.com>
+Francis <hello@francismakes.com>
+Francisco Guimarães <francisco.cpg@gmail.com>
+Fredrik Jönsson <fredrik.jonsson@izettle.com>
+Garrett Squire <garrettsquire@gmail.com>
+George Kontridze <george.kontridze@gmail.com>
+Georgy Buranov <gburanov@gmail.com>
+Glen Mailer <glenjamin@gmail.com>
+Gnahz <p@oath.pl>
+Google Inc.
+Grachev Mikhail <work@mgrachev.com>
+griffin_stewie <panterathefamilyguy@gmail.com>
+Guillaume Jacquet <guillaume.jacquet@gmail.com>
+Guz Alexander <kalimatas@gmail.com>
+Guðmundur Bjarni Ã“lafsson <gudmundur@github.com>
+Hanno Hecker <hanno.hecker@zalando.de>
+Hari haran <hariharan.uno@gmail.com>
+haya14busa <haya14busa@gmail.com>
+haya14busa <hayabusa1419@gmail.com>
+Huy Tr <kingbazoka@gmail.com>
+huydx <doxuanhuy@gmail.com>
+i2bskn <i2bskn@gmail.com>
+Ioannis Georgoulas <igeorgoulas21@gmail.com>
+Isao Jonas <isao.jonas@gmail.com>
+ishan upadhyay <ishanupadhyay412@gmail.com>
+isqua <isqua@isqua.ru>
+Jacob Valdemar <jan@lunar.app>
+Jake Krammer <jake.krammer1@gmail.com>
+Jameel Haffejee <RC1140@republiccommandos.co.za>
+James Cockbain <james.cockbain@ibm.com>
+Jan Kosecki <jan.kosecki91@gmail.com>
+Javier Campanini <jcampanini@palantir.com>
+Jef LeCompte <jeffreylec@gmail.com>
+Jens Rantil <jens.rantil@gmail.com>
+Jeremy Morris <jeremylevanmorris@gmail.com>
+Jesse Haka <haka.jesse@gmail.com>
+Jesse Newland <jesse@jnewland.com>
+Jihoon Chung <j.c@navercorp.com>
+Jimmi Dyson <jimmidyson@gmail.com>
+Joan Saum <joan.saum@epitech.eu>
+Joe Tsai <joetsai@digital-static.net>
+John Barton <jrbarton@gmail.com>
+John Engelman <john.r.engelman@gmail.com>
+John Liu <john.liu@mongodb.com>
+Jordan Brockopp <jdbro94@gmail.com>
+Jordan Sussman <jordansail22@gmail.com>
+Joshua Bezaleel Abednego <joshua.bezaleel@gmail.com>
+JP Phillips <jonphill9@gmail.com>
+jpbelanger-mtl <jp.belanger@gmail.com>
+Juan <juan.rios.28@gmail.com>
+Juan Basso <jrbasso@gmail.com>
+Julien Garcia Gonzalez <garciagonzalez.julien@gmail.com>
+Julien Rostand <jrostand@users.noreply.github.com>
+Junya Kono <junya03dance@gmail.com>
+Justin Abrahms <justin@abrah.ms>
+Jusung Lee <e.jusunglee@gmail.com>
+jzhoucliqr <jzhou@cliqr.com>
+kadern0 <kaderno@gmail.com>
+Katrina Owen <kytrinyx@github.com>
+Kautilya Tripathi <tripathi.kautilya@gmail.com>
+Keita Urashima <ursm@ursm.jp>
+Kevin Burke <kev@inburke.com>
+Konrad Malawski <konrad.malawski@project13.pl>
+Kookheon Kwon <kucuny@gmail.com>
+Krzysztof Kowalczyk <kkowalczyk@gmail.com>
+Kshitij Saraogi <KshitijSaraogi@gmail.com>
+Kumar Saurabh <itsksaurabh@gmail.com>
+kyokomi <kyoko1220adword@gmail.com>
+Laurent Verdoïa <verdoialaurent@gmail.com>
+Liam Galvin <liam@liam-galvin.co.uk>
+Lovro Mažgon <lovro.mazgon@gmail.com>
+Lucas Alcantara <lucasalcantaraf@gmail.com>
+Luke Evers <me@lukevers.com>
+Luke Kysow <lkysow@gmail.com>
+Luke Roberts <email@luke-roberts.co.uk>
+Luke Young <luke@hydrantlabs.org>
+lynn [they] <lynncyrin@gmail.com>
+Maksim Zhylinski <uzzable@gmail.com>
+Marcelo Carlos <marcelo@permutive.com>
+Mark Tareshawty <tarebyte@github.com>
+Martin Holman <me@martinholman.co.nz>
+Martin-Louis Bright <mlbright@gmail.com>
+Martins Sipenko <martins.sipenko@gmail.com>
+Marwan Sulaiman <marwan.sameer@gmail.com>
+Masayuki Izumi <m@izum.in>
+Mat Geist <matgeist@gmail.com>
+Matt <alpmatthew@gmail.com>
+Matt Brender <mjbrender@gmail.com>
+Matt Gaunt <matt@gauntface.co.uk>
+Matt Landis <landis.matt@gmail.com>
+Matt Moore <mattmoor@vmware.com>
+Maxime Bury <maxime.bury@gmail.com>
+Michael Spiegel <michael.m.spiegel@gmail.com>
+Michael Tiller <michael.tiller@gmail.com>
+MichaÅ‚ Glapa <michal.glapa@gmail.com>
+Michelangelo Morrillo <michelangelo@morrillo.it>
+Mukundan Senthil <mukundan314@gmail.com>
+Nadav Kaner <nadavkaner1@gmail.com>
+Nathan VanBenschoten <nvanbenschoten@gmail.com>
+Navaneeth Suresh <navaneeths1998@gmail.com>
+Neil O'Toole <neilotoole@apache.org>
+Nick Miyake <nmiyake@palantir.com>
+Nick Platt <hello@nickplatt.co.uk>
+Nick Spragg <nick.spragg@bbc.co.uk>
+Nikhita Raghunath <nikitaraghunath@gmail.com>
+Nilesh Singh <nilesh.singh24@outlook.com>
+Noah Zoschke <noah+sso2@convox.com>
+ns-cweber <cweber@narrativescience.com>
+Ole Orhagen <ole.orhagen@northern.tech>
+Oleg Kovalov <iamolegkovalov@gmail.com>
+OndÅ™ej Kupka <ondra.cap@gmail.com>
+Pablo Pérez Schröder <pablo.perezschroder@wetransfer.com>
+Palash Nigam <npalash25@gmail.com>
+Panagiotis Moustafellos <pmoust@gmail.com>
+Parham Alvani <parham.alvani@gmail.com>
+Parker Moore <parkrmoore@gmail.com>
+parkhyukjun89 <park.hyukjun89@gmail.com>
+Patrick DeVivo <patrick.devivo@gmail.com>
+Patrick Marabeas <patrick@marabeas.io>
+Pavel Shtanko <pavel.shtanko@gmail.com>
+Pete Wagner <thepwagner@github.com>
+Petr Shevtsov <petr.shevtsov@gmail.com>
+Pierre Carrier <pierre@meteor.com>
+Piotr Zurek <p.zurek@gmail.com>
+Piyush Chugh <piyushchugh1993@gmail.com>
+Pratik Mallya <pratik.mallya@gmail.com>
+Qais Patankar <qaisjp@gmail.com>
+Quang Le Hong <iamquang95@gmail.com>
+Quentin Leffray <fiahil@gmail.com>
+Quinn Slack <qslack@qslack.com>
+Rackspace US, Inc.
+Radek Simko <radek.simko@gmail.com>
+RadliÅ„ski Ignacy <radlinsk@student.agh.edu.pl>
+Rajat Jindal <rajatjindal83@gmail.com>
+Rajendra arora <rajendraarora16@yahoo.com>
+Ranbir Singh <binkkatal.r@gmail.com>
+Ravi Shekhar Jethani <rsjethani@gmail.com>
+RaviTeja Pothana <ravi-teja@live.com>
+rc1140 <jameel@republiccommandos.co.za>
+Red Hat, Inc.
+Reetuparna Mukherjee <reetuparna.1988@gmail.com>
+Reinier Timmer <reinier.timmer@ah.nl>
+Renjith R <renjithr201097@gmail.com>
+Ricco Førgaard <ricco@fiskeben.dk>
+Rob Figueiredo <robfig@yext.com>
+Rohit Upadhyay <urohit011@gmail.com>
+Ronak Jain <ronakjain@outlook.in>
+Ruben Vereecken <rubenvereecken@gmail.com>
+Russell Boley <raboley@gmail.com>
+Ryan Leung <rleungx@gmail.com>
+Ryan Lower <rpjlower@gmail.com>
+Ryo Nakao <nakabonne@gmail.com>
+Safwan Olaimat <safwan.olaimat@gmail.com>
+Sahil Dua <sahildua2305@gmail.com>
+saisi <saisi@users.noreply.github.com>
+Sam Minnée <sam@silverstripe.com>
+Sandeep Sukhani <sandeep.d.sukhani@gmail.com>
+Sander Knape <s.knape88@gmail.com>
+Sander van Harmelen <svanharmelen@schubergphilis.com>
+Sanket Payghan <sanket.payghan8@gmail.com>
+Sarasa Kisaragi <lingsamuelgrace@gmail.com>
+Sean Wang <sean@decrypted.org>
+Sebastian Mandrean <sebastian.mandrean@gmail.com>
+Sebastian Mæland Pedersen <sem.pedersen@stud.uis.no>
+Sergey Romanov <xxsmotur@gmail.com>
+Sergio Garcia <sergio.garcia@gmail.com>
+Seth Vargo <seth@sethvargo.com>
+Sevki <s@sevki.org>
+Shagun Khemka <shagun.khemka60@gmail.com>
+shakeelrao <shakeelrao79@gmail.com>
+Shawn Catanzarite <me@shawncatz.com>
+Shawn Smith <shawnpsmith@gmail.com>
+Shibasis Patel <patelshibasis@gmail.com>
+Shrikrishna Singh <krishnasingh.ss30@gmail.com>
+Simon Davis <sdavis@hashicorp.com>
+sona-tar <sona.zip@gmail.com>
+SoundCloud, Ltd.
+Sridhar Mocherla <srmocher@microsoft.com>
+SriVignessh Pss <sriknowledge@gmail.com>
+Stefan Sedich <stefan.sedich@gmail.com>
+Steve Teuber <github@steveteuber.com>
+Stian Eikeland <stian@eikeland.se>
+Suhaib Mujahid <suhaibmujahid@gmail.com>
+Szymon Kodrebski <simonkey007@gmail.com>
+Søren Hansen <soren@dinero.dk>
+Takayuki Watanabe <takanabe.w@gmail.com>
+Taketoshi Fujiwara <fujiwara@leapmind.io>
+Taketoshi Fujiwara <taketoshi.fujiwara@gmail.com>
+Tasya Aditya Rukmana <tadityar@gmail.com>
+Theo Henson <theodorehenson@protonmail.com>
+Thomas Aidan Curran <thomas@ory.sh>
+Thomas Bruyelle <thomas.bruyelle@gmail.com>
+Timothée Peignier <timothee.peignier@tryphon.org>
+tkhandel <tarunkhandelwal.iitr@gmail.com>
+Trey Tacon <ttacon@gmail.com>
+ttacon <ttacon@gmail.com>
+Vaibhav Singh <vaibhav.singh.14cse@bml.edu.in>
+Varadarajan Aravamudhan <varadaraajan@gmail.com>
+Victor Castell <victor@victorcastell.com>
+Victor Vrantchan <vrancean+github@gmail.com>
+vikkyomkar <vikky.omkar@samsung.com>
+Vlad Ungureanu <vladu@palantir.com>
+Wasim Thabraze <wasim@thabraze.me>
+Weslei Juan Moser Pereira <wesleimsr@gmail.com>
+Will Maier <wcmaier@gmail.com>
+Willem D'Haeseleer <dhwillem@gmail.com>
+William Bailey <mail@williambailey.org.uk>
+William Cooke <pipeston@gmail.com>
+xibz <impactbchang@gmail.com>
+Yann Malet <yann.malet@gmail.com>
+Yannick Utard <yannickutard@gmail.com>
+Yicheng Qin <qycqycqycqycqyc@gmail.com>
+Yosuke Akatsuka <yosuke.akatsuka@access-company.com>
+Yumikiyo Osanai <yumios.art@gmail.com>
+Zach Latta <zach@zachlatta.com>
diff --git a/vendor/github.com/google/go-github/v37/LICENSE b/vendor/github.com/google/go-github/v37/LICENSE
new file mode 100644 (file)
index 0000000..28b6486
--- /dev/null
@@ -0,0 +1,27 @@
+Copyright (c) 2013 The go-github AUTHORS. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/google/go-github/v37/github/actions.go b/vendor/github.com/google/go-github/v37/github/actions.go
new file mode 100644 (file)
index 0000000..ce15d95
--- /dev/null
@@ -0,0 +1,12 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+// ActionsService handles communication with the actions related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/
+type ActionsService service
diff --git a/vendor/github.com/google/go-github/v37/github/actions_artifacts.go b/vendor/github.com/google/go-github/v37/github/actions_artifacts.go
new file mode 100644 (file)
index 0000000..016ce7a
--- /dev/null
@@ -0,0 +1,164 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "net/http"
+       "net/url"
+)
+
+// Artifact reprents a GitHub artifact.  Artifacts allow sharing
+// data between jobs in a workflow and provide storage for data
+// once a workflow is complete.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/artifacts/
+type Artifact struct {
+       ID                 *int64     `json:"id,omitempty"`
+       NodeID             *string    `json:"node_id,omitempty"`
+       Name               *string    `json:"name,omitempty"`
+       SizeInBytes        *int64     `json:"size_in_bytes,omitempty"`
+       ArchiveDownloadURL *string    `json:"archive_download_url,omitempty"`
+       Expired            *bool      `json:"expired,omitempty"`
+       CreatedAt          *Timestamp `json:"created_at,omitempty"`
+       ExpiresAt          *Timestamp `json:"expires_at,omitempty"`
+}
+
+// ArtifactList represents a list of GitHub artifacts.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/artifacts/
+type ArtifactList struct {
+       TotalCount *int64      `json:"total_count,omitempty"`
+       Artifacts  []*Artifact `json:"artifacts,omitempty"`
+}
+
+// ListArtifacts lists all artifacts that belong to a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-artifacts-for-a-repository
+func (s *ActionsService) ListArtifacts(ctx context.Context, owner, repo string, opts *ListOptions) (*ArtifactList, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/artifacts", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       artifactList := new(ArtifactList)
+       resp, err := s.client.Do(ctx, req, artifactList)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return artifactList, resp, nil
+}
+
+// ListWorkflowRunArtifacts lists all artifacts that belong to a workflow run.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-workflow-run-artifacts
+func (s *ActionsService) ListWorkflowRunArtifacts(ctx context.Context, owner, repo string, runID int64, opts *ListOptions) (*ArtifactList, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/artifacts", owner, repo, runID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       artifactList := new(ArtifactList)
+       resp, err := s.client.Do(ctx, req, artifactList)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return artifactList, resp, nil
+}
+
+// GetArtifact gets a specific artifact for a workflow run.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-an-artifact
+func (s *ActionsService) GetArtifact(ctx context.Context, owner, repo string, artifactID int64) (*Artifact, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/artifacts/%v", owner, repo, artifactID)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       artifact := new(Artifact)
+       resp, err := s.client.Do(ctx, req, artifact)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return artifact, resp, nil
+}
+
+// DownloadArtifact gets a redirect URL to download an archive for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/artifacts/#download-an-artifact
+func (s *ActionsService) DownloadArtifact(ctx context.Context, owner, repo string, artifactID int64, followRedirects bool) (*url.URL, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/artifacts/%v/zip", owner, repo, artifactID)
+
+       resp, err := s.getDownloadArtifactFromURL(ctx, u, followRedirects)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       if resp.StatusCode != http.StatusFound {
+               return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status)
+       }
+       parsedURL, err := url.Parse(resp.Header.Get("Location"))
+       return parsedURL, newResponse(resp), nil
+}
+
+func (s *ActionsService) getDownloadArtifactFromURL(ctx context.Context, u string, followRedirects bool) (*http.Response, error) {
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       var resp *http.Response
+       // Use http.DefaultTransport if no custom Transport is configured
+       req = withContext(ctx, req)
+       if s.client.client.Transport == nil {
+               resp, err = http.DefaultTransport.RoundTrip(req)
+       } else {
+               resp, err = s.client.client.Transport.RoundTrip(req)
+       }
+       if err != nil {
+               return nil, err
+       }
+       resp.Body.Close()
+
+       // If redirect response is returned, follow it
+       if followRedirects && resp.StatusCode == http.StatusMovedPermanently {
+               u = resp.Header.Get("Location")
+               resp, err = s.getDownloadArtifactFromURL(ctx, u, false)
+       }
+       return resp, err
+}
+
+// DeleteArtifact deletes a workflow run artifact.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#delete-an-artifact
+func (s *ActionsService) DeleteArtifact(ctx context.Context, owner, repo string, artifactID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/artifacts/%v", owner, repo, artifactID)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/actions_runner_groups.go b/vendor/github.com/google/go-github/v37/github/actions_runner_groups.go
new file mode 100644 (file)
index 0000000..5772daa
--- /dev/null
@@ -0,0 +1,286 @@
+// Copyright 2021 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// RunnerGroup represents a self-hosted runner group configured in an organization.
+type RunnerGroup struct {
+       ID                       *int64  `json:"id,omitempty"`
+       Name                     *string `json:"name,omitempty"`
+       Visibility               *string `json:"visibility,omitempty"`
+       Default                  *bool   `json:"default,omitempty"`
+       SelectedRepositoriesURL  *string `json:"selected_repositories_url,omitempty"`
+       RunnersURL               *string `json:"runners_url,omitempty"`
+       Inherited                *bool   `json:"inherited,omitempty"`
+       AllowsPublicRepositories *bool   `json:"allows_public_repositories,omitempty"`
+}
+
+// RunnerGroups represents a collection of self-hosted runner groups configured for an organization.
+type RunnerGroups struct {
+       TotalCount   int            `json:"total_count"`
+       RunnerGroups []*RunnerGroup `json:"runner_groups"`
+}
+
+// CreateRunnerGroupRequest represents a request to create a Runner group for an organization.
+type CreateRunnerGroupRequest struct {
+       Name       *string `json:"name,omitempty"`
+       Visibility *string `json:"visibility,omitempty"`
+       // List of repository IDs that can access the runner group.
+       SelectedRepositoryIDs []int64 `json:"selected_repository_ids,omitempty"`
+       // Runners represent a list of runner IDs to add to the runner group.
+       Runners []int64 `json:"runners,omitempty"`
+}
+
+// UpdateRunnerGroupRequest represents a request to update a Runner group for an organization.
+type UpdateRunnerGroupRequest struct {
+       Name       *string `json:"name,omitempty"`
+       Visibility *string `json:"visibility,omitempty"`
+}
+
+// SetRepoAccessRunnerGroupRequest represents a request to replace the list of repositories
+// that can access a self-hosted runner group configured in an organization.
+type SetRepoAccessRunnerGroupRequest struct {
+       // Updated list of repository IDs that should be given access to the runner group.
+       SelectedRepositoryIDs []int64 `json:"selected_repository_ids"`
+}
+
+// SetRunnerGroupRunnersRequest represents a request to replace the list of
+// self-hosted runners that are part of an organization runner group.
+type SetRunnerGroupRunnersRequest struct {
+       // Updated list of runner IDs that should be given access to the runner group.
+       Runners []int64 `json:"runners"`
+}
+
+// ListOrganizationRunnerGroups lists all self-hosted runner groups configured in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#list-self-hosted-runner-groups-for-an-organization
+func (s *ActionsService) ListOrganizationRunnerGroups(ctx context.Context, org string, opts *ListOptions) (*RunnerGroups, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       groups := &RunnerGroups{}
+       resp, err := s.client.Do(ctx, req, &groups)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return groups, resp, nil
+}
+
+// GetOrganizationRunnerGroup gets a specific self-hosted runner group for an organization using its RunnerGroup ID.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-a-self-hosted-runner-group-for-an-organization
+func (s *ActionsService) GetOrganizationRunnerGroup(ctx context.Context, org string, groupID int64) (*RunnerGroup, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v", org, groupID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runnerGroup := new(RunnerGroup)
+       resp, err := s.client.Do(ctx, req, runnerGroup)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runnerGroup, resp, nil
+}
+
+// DeleteOrganizationRunnerGroup deletes a self-hosted runner group from an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#delete-a-self-hosted-runner-group-from-an-organization
+func (s *ActionsService) DeleteOrganizationRunnerGroup(ctx context.Context, org string, groupID int64) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v", org, groupID)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// CreateOrganizationRunnerGroup creates a new self-hosted runner group for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#create-a-self-hosted-runner-group-for-an-organization
+func (s *ActionsService) CreateOrganizationRunnerGroup(ctx context.Context, org string, createReq CreateRunnerGroupRequest) (*RunnerGroup, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups", org)
+       req, err := s.client.NewRequest("POST", u, createReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runnerGroup := new(RunnerGroup)
+       resp, err := s.client.Do(ctx, req, runnerGroup)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runnerGroup, resp, nil
+}
+
+// UpdateOrganizationRunnerGroup updates a self-hosted runner group for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#update-a-self-hosted-runner-group-for-an-organization
+func (s *ActionsService) UpdateOrganizationRunnerGroup(ctx context.Context, org string, groupID int64, updateReq UpdateRunnerGroupRequest) (*RunnerGroup, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v", org, groupID)
+       req, err := s.client.NewRequest("PATCH", u, updateReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runnerGroup := new(RunnerGroup)
+       resp, err := s.client.Do(ctx, req, runnerGroup)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runnerGroup, resp, nil
+}
+
+// ListRepositoryAccessRunnerGroup lists the repositories with access to a self-hosted runner group configured in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#list-repository-access-to-a-self-hosted-runner-group-in-an-organization
+func (s *ActionsService) ListRepositoryAccessRunnerGroup(ctx context.Context, org string, groupID int64) (*ListRepositories, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/repositories", org, groupID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       repos := &ListRepositories{}
+       resp, err := s.client.Do(ctx, req, &repos)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repos, resp, nil
+}
+
+// SetRepositoryAccessRunnerGroup replaces the list of repositories that have access to a self-hosted runner group configured in an organization
+// with a new List of repositories.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-repository-access-for-a-self-hosted-runner-group-in-an-organization
+func (s *ActionsService) SetRepositoryAccessRunnerGroup(ctx context.Context, org string, groupID int64, ids SetRepoAccessRunnerGroupRequest) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/repositories", org, groupID)
+
+       req, err := s.client.NewRequest("PUT", u, ids)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// AddRepositoryAccessRunnerGroup adds a repository to the list of selected repositories that can access a self-hosted runner group.
+// The runner group must have visibility set to 'selected'.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#add-repository-access-to-a-self-hosted-runner-group-in-an-organization
+func (s *ActionsService) AddRepositoryAccessRunnerGroup(ctx context.Context, org string, groupID, repoID int64) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/repositories/%v", org, groupID, repoID)
+
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// RemoveRepositoryAccessRunnerGroup removes a repository from the list of selected repositories that can access a self-hosted runner group.
+// The runner group must have visibility set to 'selected'.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#remove-repository-access-to-a-self-hosted-runner-group-in-an-organization
+func (s *ActionsService) RemoveRepositoryAccessRunnerGroup(ctx context.Context, org string, groupID, repoID int64) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/repositories/%v", org, groupID, repoID)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListRunnerGroupRunners lists self-hosted runners that are in a specific organization group.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#list-self-hosted-runners-in-a-group-for-an-organization
+func (s *ActionsService) ListRunnerGroupRunners(ctx context.Context, org string, groupID int64, opts *ListOptions) (*Runners, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/runners", org, groupID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runners := &Runners{}
+       resp, err := s.client.Do(ctx, req, &runners)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runners, resp, nil
+}
+
+// SetRunnerGroupRunners replaces the list of self-hosted runners that are part of an organization runner group
+// with a new list of runners.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-self-hosted-runners-in-a-group-for-an-organization
+func (s *ActionsService) SetRunnerGroupRunners(ctx context.Context, org string, groupID int64, ids SetRunnerGroupRunnersRequest) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/runners", org, groupID)
+
+       req, err := s.client.NewRequest("PUT", u, ids)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// AddRunnerGroupRunners adds a self-hosted runner to a runner group configured in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#add-a-self-hosted-runner-to-a-group-for-an-organization
+func (s *ActionsService) AddRunnerGroupRunners(ctx context.Context, org string, groupID, runnerID int64) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/runners/%v", org, groupID, runnerID)
+
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// RemoveRunnerGroupRunners removes a self-hosted runner from a group configured in an organization.
+// The runner is then returned to the default group.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#remove-a-self-hosted-runner-from-a-group-for-an-organization
+func (s *ActionsService) RemoveRunnerGroupRunners(ctx context.Context, org string, groupID, runnerID int64) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/runners/%v", org, groupID, runnerID)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/actions_runners.go b/vendor/github.com/google/go-github/v37/github/actions_runners.go
new file mode 100644 (file)
index 0000000..5bdebb3
--- /dev/null
@@ -0,0 +1,318 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// RunnerApplicationDownload represents a binary for the self-hosted runner application that can be downloaded.
+type RunnerApplicationDownload struct {
+       OS                *string `json:"os,omitempty"`
+       Architecture      *string `json:"architecture,omitempty"`
+       DownloadURL       *string `json:"download_url,omitempty"`
+       Filename          *string `json:"filename,omitempty"`
+       TempDownloadToken *string `json:"temp_download_token,omitempty"`
+       SHA256Checksum    *string `json:"sha256_checksum,omitempty"`
+}
+
+// ActionsEnabledOnOrgRepos represents all the repositories in an organization for which Actions is enabled.
+type ActionsEnabledOnOrgRepos struct {
+       TotalCount   int           `json:"total_count"`
+       Repositories []*Repository `json:"repositories"`
+}
+
+// ListRunnerApplicationDownloads lists self-hosted runner application binaries that can be downloaded and run.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-runner-applications-for-a-repository
+func (s *ActionsService) ListRunnerApplicationDownloads(ctx context.Context, owner, repo string) ([]*RunnerApplicationDownload, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runners/downloads", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var rads []*RunnerApplicationDownload
+       resp, err := s.client.Do(ctx, req, &rads)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return rads, resp, nil
+}
+
+// RegistrationToken represents a token that can be used to add a self-hosted runner to a repository.
+type RegistrationToken struct {
+       Token     *string    `json:"token,omitempty"`
+       ExpiresAt *Timestamp `json:"expires_at,omitempty"`
+}
+
+// CreateRegistrationToken creates a token that can be used to add a self-hosted runner.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#create-a-registration-token-for-a-repository
+func (s *ActionsService) CreateRegistrationToken(ctx context.Context, owner, repo string) (*RegistrationToken, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runners/registration-token", owner, repo)
+
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       registrationToken := new(RegistrationToken)
+       resp, err := s.client.Do(ctx, req, registrationToken)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return registrationToken, resp, nil
+}
+
+// Runner represents a self-hosted runner registered with a repository.
+type Runner struct {
+       ID     *int64          `json:"id,omitempty"`
+       Name   *string         `json:"name,omitempty"`
+       OS     *string         `json:"os,omitempty"`
+       Status *string         `json:"status,omitempty"`
+       Busy   *bool           `json:"busy,omitempty"`
+       Labels []*RunnerLabels `json:"labels,omitempty"`
+}
+
+// RunnerLabels represents a collection of labels attached to each runner.
+type RunnerLabels struct {
+       ID   *int64  `json:"id,omitempty"`
+       Name *string `json:"name,omitempty"`
+       Type *string `json:"type,omitempty"`
+}
+
+// Runners represents a collection of self-hosted runners for a repository.
+type Runners struct {
+       TotalCount int       `json:"total_count"`
+       Runners    []*Runner `json:"runners"`
+}
+
+// ListRunners lists all the self-hosted runners for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-self-hosted-runners-for-a-repository
+func (s *ActionsService) ListRunners(ctx context.Context, owner, repo string, opts *ListOptions) (*Runners, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runners", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runners := &Runners{}
+       resp, err := s.client.Do(ctx, req, &runners)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runners, resp, nil
+}
+
+// GetRunner gets a specific self-hosted runner for a repository using its runner ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-self-hosted-runner-for-a-repository
+func (s *ActionsService) GetRunner(ctx context.Context, owner, repo string, runnerID int64) (*Runner, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runners/%v", owner, repo, runnerID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runner := new(Runner)
+       resp, err := s.client.Do(ctx, req, runner)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runner, resp, nil
+}
+
+// RemoveToken represents a token that can be used to remove a self-hosted runner from a repository.
+type RemoveToken struct {
+       Token     *string    `json:"token,omitempty"`
+       ExpiresAt *Timestamp `json:"expires_at,omitempty"`
+}
+
+// CreateRemoveToken creates a token that can be used to remove a self-hosted runner from a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#create-a-remove-token-for-a-repository
+func (s *ActionsService) CreateRemoveToken(ctx context.Context, owner, repo string) (*RemoveToken, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runners/remove-token", owner, repo)
+
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       removeToken := new(RemoveToken)
+       resp, err := s.client.Do(ctx, req, removeToken)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return removeToken, resp, nil
+}
+
+// RemoveRunner forces the removal of a self-hosted runner in a repository using the runner id.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#delete-a-self-hosted-runner-from-a-repository
+func (s *ActionsService) RemoveRunner(ctx context.Context, owner, repo string, runnerID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runners/%v", owner, repo, runnerID)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListOrganizationRunnerApplicationDownloads lists self-hosted runner application binaries that can be downloaded and run.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-runner-applications-for-an-organization
+func (s *ActionsService) ListOrganizationRunnerApplicationDownloads(ctx context.Context, owner string) ([]*RunnerApplicationDownload, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runners/downloads", owner)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var rads []*RunnerApplicationDownload
+       resp, err := s.client.Do(ctx, req, &rads)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return rads, resp, nil
+}
+
+// CreateOrganizationRegistrationToken creates a token that can be used to add a self-hosted runner to an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#create-a-registration-token-for-an-organization
+func (s *ActionsService) CreateOrganizationRegistrationToken(ctx context.Context, owner string) (*RegistrationToken, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runners/registration-token", owner)
+
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       registrationToken := new(RegistrationToken)
+       resp, err := s.client.Do(ctx, req, registrationToken)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return registrationToken, resp, nil
+}
+
+// ListOrganizationRunners lists all the self-hosted runners for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-self-hosted-runners-for-an-organization
+func (s *ActionsService) ListOrganizationRunners(ctx context.Context, owner string, opts *ListOptions) (*Runners, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runners", owner)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runners := &Runners{}
+       resp, err := s.client.Do(ctx, req, &runners)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runners, resp, nil
+}
+
+// ListEnabledReposInOrg lists the selected repositories that are enabled for GitHub Actions in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-selected-repositories-enabled-for-github-actions-in-an-organization
+func (s *ActionsService) ListEnabledReposInOrg(ctx context.Context, owner string, opts *ListOptions) (*ActionsEnabledOnOrgRepos, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/permissions/repositories", owner)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       repos := &ActionsEnabledOnOrgRepos{}
+       resp, err := s.client.Do(ctx, req, repos)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repos, resp, nil
+}
+
+// GetOrganizationRunner gets a specific self-hosted runner for an organization using its runner ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-self-hosted-runner-for-an-organization
+func (s *ActionsService) GetOrganizationRunner(ctx context.Context, owner string, runnerID int64) (*Runner, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runners/%v", owner, runnerID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runner := new(Runner)
+       resp, err := s.client.Do(ctx, req, runner)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runner, resp, nil
+}
+
+// CreateOrganizationRemoveToken creates a token that can be used to remove a self-hosted runner from an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#create-a-remove-token-for-an-organization
+func (s *ActionsService) CreateOrganizationRemoveToken(ctx context.Context, owner string) (*RemoveToken, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runners/remove-token", owner)
+
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       removeToken := new(RemoveToken)
+       resp, err := s.client.Do(ctx, req, removeToken)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return removeToken, resp, nil
+}
+
+// RemoveOrganizationRunner forces the removal of a self-hosted runner from an organization using the runner id.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#delete-a-self-hosted-runner-from-an-organization
+func (s *ActionsService) RemoveOrganizationRunner(ctx context.Context, owner string, runnerID int64) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/runners/%v", owner, runnerID)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/actions_secrets.go b/vendor/github.com/google/go-github/v37/github/actions_secrets.go
new file mode 100644 (file)
index 0000000..379eab8
--- /dev/null
@@ -0,0 +1,425 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "encoding/json"
+       "fmt"
+       "strconv"
+)
+
+// PublicKey represents the public key that should be used to encrypt secrets.
+type PublicKey struct {
+       KeyID *string `json:"key_id"`
+       Key   *string `json:"key"`
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+// This ensures GitHub Enterprise versions which return a numeric key id
+// do not error out when unmarshaling.
+func (p *PublicKey) UnmarshalJSON(data []byte) error {
+       var pk struct {
+               KeyID interface{} `json:"key_id,string"`
+               Key   *string     `json:"key"`
+       }
+
+       if err := json.Unmarshal(data, &pk); err != nil {
+               return err
+       }
+
+       p.Key = pk.Key
+
+       switch v := pk.KeyID.(type) {
+       case nil:
+               return nil
+       case string:
+               p.KeyID = &v
+       case float64:
+               p.KeyID = String(strconv.FormatFloat(v, 'f', -1, 64))
+       default:
+               return fmt.Errorf("unable to unmarshal %T as a string", v)
+       }
+
+       return nil
+}
+
+// GetRepoPublicKey gets a public key that should be used for secret encryption.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-repository-public-key
+func (s *ActionsService) GetRepoPublicKey(ctx context.Context, owner, repo string) (*PublicKey, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/secrets/public-key", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       pubKey := new(PublicKey)
+       resp, err := s.client.Do(ctx, req, pubKey)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return pubKey, resp, nil
+}
+
+// GetOrgPublicKey gets a public key that should be used for secret encryption.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-an-organization-public-key
+func (s *ActionsService) GetOrgPublicKey(ctx context.Context, org string) (*PublicKey, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/secrets/public-key", org)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       pubKey := new(PublicKey)
+       resp, err := s.client.Do(ctx, req, pubKey)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return pubKey, resp, nil
+}
+
+// GetEnvPublicKey gets a public key that should be used for secret encryption.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-an-environment-public-key
+func (s *ActionsService) GetEnvPublicKey(ctx context.Context, repoID int, env string) (*PublicKey, *Response, error) {
+       u := fmt.Sprintf("repositories/%v/environments/%v/secrets/public-key", repoID, env)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       pubKey := new(PublicKey)
+       resp, err := s.client.Do(ctx, req, pubKey)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return pubKey, resp, nil
+}
+
+// Secret represents a repository action secret.
+type Secret struct {
+       Name                    string    `json:"name"`
+       CreatedAt               Timestamp `json:"created_at"`
+       UpdatedAt               Timestamp `json:"updated_at"`
+       Visibility              string    `json:"visibility,omitempty"`
+       SelectedRepositoriesURL string    `json:"selected_repositories_url,omitempty"`
+}
+
+// Secrets represents one item from the ListSecrets response.
+type Secrets struct {
+       TotalCount int       `json:"total_count"`
+       Secrets    []*Secret `json:"secrets"`
+}
+
+// ListRepoSecrets lists all secrets available in a repository
+// without revealing their encrypted values.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-repository-secrets
+func (s *ActionsService) ListRepoSecrets(ctx context.Context, owner, repo string, opts *ListOptions) (*Secrets, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/secrets", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       secrets := new(Secrets)
+       resp, err := s.client.Do(ctx, req, &secrets)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return secrets, resp, nil
+}
+
+// GetRepoSecret gets a single repository secret without revealing its encrypted value.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-repository-secret
+func (s *ActionsService) GetRepoSecret(ctx context.Context, owner, repo, name string) (*Secret, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/secrets/%v", owner, repo, name)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       secret := new(Secret)
+       resp, err := s.client.Do(ctx, req, secret)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return secret, resp, nil
+}
+
+// SelectedRepoIDs are the repository IDs that have access to the secret.
+type SelectedRepoIDs []int64
+
+// EncryptedSecret represents a secret that is encrypted using a public key.
+//
+// The value of EncryptedValue must be your secret, encrypted with
+// LibSodium (see documentation here: https://libsodium.gitbook.io/doc/bindings_for_other_languages)
+// using the public key retrieved using the GetPublicKey method.
+type EncryptedSecret struct {
+       Name                  string          `json:"-"`
+       KeyID                 string          `json:"key_id"`
+       EncryptedValue        string          `json:"encrypted_value"`
+       Visibility            string          `json:"visibility,omitempty"`
+       SelectedRepositoryIDs SelectedRepoIDs `json:"selected_repository_ids,omitempty"`
+}
+
+// CreateOrUpdateRepoSecret creates or updates a repository secret with an encrypted value.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#create-or-update-a-repository-secret
+func (s *ActionsService) CreateOrUpdateRepoSecret(ctx context.Context, owner, repo string, eSecret *EncryptedSecret) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/secrets/%v", owner, repo, eSecret.Name)
+
+       req, err := s.client.NewRequest("PUT", u, eSecret)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeleteRepoSecret deletes a secret in a repository using the secret name.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#delete-a-repository-secret
+func (s *ActionsService) DeleteRepoSecret(ctx context.Context, owner, repo, name string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/secrets/%v", owner, repo, name)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListOrgSecrets lists all secrets available in an organization
+// without revealing their encrypted values.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-organization-secrets
+func (s *ActionsService) ListOrgSecrets(ctx context.Context, org string, opts *ListOptions) (*Secrets, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/secrets", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       secrets := new(Secrets)
+       resp, err := s.client.Do(ctx, req, &secrets)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return secrets, resp, nil
+}
+
+// GetOrgSecret gets a single organization secret without revealing its encrypted value.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-an-organization-secret
+func (s *ActionsService) GetOrgSecret(ctx context.Context, org, name string) (*Secret, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/secrets/%v", org, name)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       secret := new(Secret)
+       resp, err := s.client.Do(ctx, req, secret)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return secret, resp, nil
+}
+
+// CreateOrUpdateOrgSecret creates or updates an organization secret with an encrypted value.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#create-or-update-an-organization-secret
+func (s *ActionsService) CreateOrUpdateOrgSecret(ctx context.Context, org string, eSecret *EncryptedSecret) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/secrets/%v", org, eSecret.Name)
+
+       req, err := s.client.NewRequest("PUT", u, eSecret)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// SelectedReposList represents the list of repositories selected for an organization secret.
+type SelectedReposList struct {
+       TotalCount   *int          `json:"total_count,omitempty"`
+       Repositories []*Repository `json:"repositories,omitempty"`
+}
+
+// ListSelectedReposForOrgSecret lists all repositories that have access to a secret.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-selected-repositories-for-an-organization-secret
+func (s *ActionsService) ListSelectedReposForOrgSecret(ctx context.Context, org, name string, opts *ListOptions) (*SelectedReposList, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/secrets/%v/repositories", org, name)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       result := new(SelectedReposList)
+       resp, err := s.client.Do(ctx, req, result)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return result, resp, nil
+}
+
+// SetSelectedReposForOrgSecret sets the repositories that have access to a secret.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#set-selected-repositories-for-an-organization-secret
+func (s *ActionsService) SetSelectedReposForOrgSecret(ctx context.Context, org, name string, ids SelectedRepoIDs) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/secrets/%v/repositories", org, name)
+
+       type repoIDs struct {
+               SelectedIDs SelectedRepoIDs `json:"selected_repository_ids,omitempty"`
+       }
+
+       req, err := s.client.NewRequest("PUT", u, repoIDs{SelectedIDs: ids})
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// AddSelectedRepoToOrgSecret adds a repository to an organization secret.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#add-selected-repository-to-an-organization-secret
+func (s *ActionsService) AddSelectedRepoToOrgSecret(ctx context.Context, org, name string, repo *Repository) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/secrets/%v/repositories/%v", org, name, *repo.ID)
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// RemoveSelectedRepoFromOrgSecret removes a repository from an organization secret.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#remove-selected-repository-from-an-organization-secret
+func (s *ActionsService) RemoveSelectedRepoFromOrgSecret(ctx context.Context, org, name string, repo *Repository) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/secrets/%v/repositories/%v", org, name, *repo.ID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeleteOrgSecret deletes a secret in an organization using the secret name.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#delete-an-organization-secret
+func (s *ActionsService) DeleteOrgSecret(ctx context.Context, org, name string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/secrets/%v", org, name)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListEnvSecrets lists all secrets available in an environment.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#list-environment-secrets
+func (s *ActionsService) ListEnvSecrets(ctx context.Context, repoID int, env string, opts *ListOptions) (*Secrets, *Response, error) {
+       u := fmt.Sprintf("repositories/%v/environments/%v/secrets", repoID, env)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       secrets := new(Secrets)
+       resp, err := s.client.Do(ctx, req, &secrets)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return secrets, resp, nil
+}
+
+// GetEnvSecret gets a single environment secret without revealing its encrypted value.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#list-environment-secrets
+func (s *ActionsService) GetEnvSecret(ctx context.Context, repoID int, env, secretName string) (*Secret, *Response, error) {
+       u := fmt.Sprintf("repositories/%v/environments/%v/secrets/%v", repoID, env, secretName)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       secret := new(Secret)
+       resp, err := s.client.Do(ctx, req, secret)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return secret, resp, nil
+}
+
+// CreateOrUpdateEnvSecret creates or updates a repository secret with an encrypted value.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#create-or-update-an-environment-secret
+func (s *ActionsService) CreateOrUpdateEnvSecret(ctx context.Context, repoID int, env string, eSecret *EncryptedSecret) (*Response, error) {
+       u := fmt.Sprintf("repositories/%v/environments/%v/secrets/%v", repoID, env, eSecret.Name)
+
+       req, err := s.client.NewRequest("PUT", u, eSecret)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeleteEnvSecret deletes a secret in an environment using the secret name.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#delete-an-environment-secret
+func (s *ActionsService) DeleteEnvSecret(ctx context.Context, repoID int, env, secretName string) (*Response, error) {
+       u := fmt.Sprintf("repositories/%v/environments/%v/secrets/%v", repoID, env, secretName)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/actions_workflow_jobs.go b/vendor/github.com/google/go-github/v37/github/actions_workflow_jobs.go
new file mode 100644 (file)
index 0000000..1102a75
--- /dev/null
@@ -0,0 +1,149 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "net/http"
+       "net/url"
+)
+
+// TaskStep represents a single task step from a sequence of tasks of a job.
+type TaskStep struct {
+       Name        *string    `json:"name,omitempty"`
+       Status      *string    `json:"status,omitempty"`
+       Conclusion  *string    `json:"conclusion,omitempty"`
+       Number      *int64     `json:"number,omitempty"`
+       StartedAt   *Timestamp `json:"started_at,omitempty"`
+       CompletedAt *Timestamp `json:"completed_at,omitempty"`
+}
+
+// WorkflowJob represents a repository action workflow job.
+type WorkflowJob struct {
+       ID          *int64      `json:"id,omitempty"`
+       RunID       *int64      `json:"run_id,omitempty"`
+       RunURL      *string     `json:"run_url,omitempty"`
+       NodeID      *string     `json:"node_id,omitempty"`
+       HeadSHA     *string     `json:"head_sha,omitempty"`
+       URL         *string     `json:"url,omitempty"`
+       HTMLURL     *string     `json:"html_url,omitempty"`
+       Status      *string     `json:"status,omitempty"`
+       Conclusion  *string     `json:"conclusion,omitempty"`
+       StartedAt   *Timestamp  `json:"started_at,omitempty"`
+       CompletedAt *Timestamp  `json:"completed_at,omitempty"`
+       Name        *string     `json:"name,omitempty"`
+       Steps       []*TaskStep `json:"steps,omitempty"`
+       CheckRunURL *string     `json:"check_run_url,omitempty"`
+}
+
+// Jobs represents a slice of repository action workflow job.
+type Jobs struct {
+       TotalCount *int           `json:"total_count,omitempty"`
+       Jobs       []*WorkflowJob `json:"jobs,omitempty"`
+}
+
+// ListWorkflowJobsOptions specifies optional parameters to ListWorkflowJobs.
+type ListWorkflowJobsOptions struct {
+       // Filter specifies how jobs should be filtered by their completed_at timestamp.
+       // Possible values are:
+       //     latest - Returns jobs from the most recent execution of the workflow run
+       //     all - Returns all jobs for a workflow run, including from old executions of the workflow run
+       //
+       // Default value is "latest".
+       Filter string `url:"filter,omitempty"`
+       ListOptions
+}
+
+// ListWorkflowJobs lists all jobs for a workflow run.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-jobs-for-a-workflow-run
+func (s *ActionsService) ListWorkflowJobs(ctx context.Context, owner, repo string, runID int64, opts *ListWorkflowJobsOptions) (*Jobs, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/actions/runs/%v/jobs", owner, repo, runID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       jobs := new(Jobs)
+       resp, err := s.client.Do(ctx, req, &jobs)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return jobs, resp, nil
+}
+
+// GetWorkflowJobByID gets a specific job in a workflow run by ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-job-for-a-workflow-run
+func (s *ActionsService) GetWorkflowJobByID(ctx context.Context, owner, repo string, jobID int64) (*WorkflowJob, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/jobs/%v", owner, repo, jobID)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       job := new(WorkflowJob)
+       resp, err := s.client.Do(ctx, req, job)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return job, resp, nil
+}
+
+// GetWorkflowJobLogs gets a redirect URL to download a plain text file of logs for a workflow job.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#download-job-logs-for-a-workflow-run
+func (s *ActionsService) GetWorkflowJobLogs(ctx context.Context, owner, repo string, jobID int64, followRedirects bool) (*url.URL, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/jobs/%v/logs", owner, repo, jobID)
+
+       resp, err := s.getWorkflowLogsFromURL(ctx, u, followRedirects)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       if resp.StatusCode != http.StatusFound {
+               return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status)
+       }
+       parsedURL, err := url.Parse(resp.Header.Get("Location"))
+       return parsedURL, newResponse(resp), err
+}
+
+func (s *ActionsService) getWorkflowLogsFromURL(ctx context.Context, u string, followRedirects bool) (*http.Response, error) {
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       var resp *http.Response
+       // Use http.DefaultTransport if no custom Transport is configured
+       req = withContext(ctx, req)
+       if s.client.client.Transport == nil {
+               resp, err = http.DefaultTransport.RoundTrip(req)
+       } else {
+               resp, err = s.client.client.Transport.RoundTrip(req)
+       }
+       if err != nil {
+               return nil, err
+       }
+       resp.Body.Close()
+
+       // If redirect response is returned, follow it
+       if followRedirects && resp.StatusCode == http.StatusMovedPermanently {
+               u = resp.Header.Get("Location")
+               resp, err = s.getWorkflowLogsFromURL(ctx, u, false)
+       }
+       return resp, err
+
+}
diff --git a/vendor/github.com/google/go-github/v37/github/actions_workflow_runs.go b/vendor/github.com/google/go-github/v37/github/actions_workflow_runs.go
new file mode 100644 (file)
index 0000000..64274a3
--- /dev/null
@@ -0,0 +1,236 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "net/http"
+       "net/url"
+)
+
+// WorkflowRun represents a repository action workflow run.
+type WorkflowRun struct {
+       ID             *int64         `json:"id,omitempty"`
+       Name           *string        `json:"name,omitempty"`
+       NodeID         *string        `json:"node_id,omitempty"`
+       HeadBranch     *string        `json:"head_branch,omitempty"`
+       HeadSHA        *string        `json:"head_sha,omitempty"`
+       RunNumber      *int           `json:"run_number,omitempty"`
+       Event          *string        `json:"event,omitempty"`
+       Status         *string        `json:"status,omitempty"`
+       Conclusion     *string        `json:"conclusion,omitempty"`
+       WorkflowID     *int64         `json:"workflow_id,omitempty"`
+       URL            *string        `json:"url,omitempty"`
+       HTMLURL        *string        `json:"html_url,omitempty"`
+       PullRequests   []*PullRequest `json:"pull_requests,omitempty"`
+       CreatedAt      *Timestamp     `json:"created_at,omitempty"`
+       UpdatedAt      *Timestamp     `json:"updated_at,omitempty"`
+       JobsURL        *string        `json:"jobs_url,omitempty"`
+       LogsURL        *string        `json:"logs_url,omitempty"`
+       CheckSuiteURL  *string        `json:"check_suite_url,omitempty"`
+       ArtifactsURL   *string        `json:"artifacts_url,omitempty"`
+       CancelURL      *string        `json:"cancel_url,omitempty"`
+       RerunURL       *string        `json:"rerun_url,omitempty"`
+       HeadCommit     *HeadCommit    `json:"head_commit,omitempty"`
+       WorkflowURL    *string        `json:"workflow_url,omitempty"`
+       Repository     *Repository    `json:"repository,omitempty"`
+       HeadRepository *Repository    `json:"head_repository,omitempty"`
+}
+
+// WorkflowRuns represents a slice of repository action workflow run.
+type WorkflowRuns struct {
+       TotalCount   *int           `json:"total_count,omitempty"`
+       WorkflowRuns []*WorkflowRun `json:"workflow_runs,omitempty"`
+}
+
+// ListWorkflowRunsOptions specifies optional parameters to ListWorkflowRuns.
+type ListWorkflowRunsOptions struct {
+       Actor  string `url:"actor,omitempty"`
+       Branch string `url:"branch,omitempty"`
+       Event  string `url:"event,omitempty"`
+       Status string `url:"status,omitempty"`
+       ListOptions
+}
+
+// WorkflowRunUsage represents a usage of a specific workflow run.
+type WorkflowRunUsage struct {
+       Billable      *WorkflowRunEnvironment `json:"billable,omitempty"`
+       RunDurationMS *int64                  `json:"run_duration_ms,omitempty"`
+}
+
+// WorkflowRunEnvironment represents different runner environments available for a workflow run.
+type WorkflowRunEnvironment struct {
+       Ubuntu  *WorkflowRunBill `json:"UBUNTU,omitempty"`
+       MacOS   *WorkflowRunBill `json:"MACOS,omitempty"`
+       Windows *WorkflowRunBill `json:"WINDOWS,omitempty"`
+}
+
+// WorkflowRunBill specifies billable time for a specific environment in a workflow run.
+type WorkflowRunBill struct {
+       TotalMS *int64 `json:"total_ms,omitempty"`
+       Jobs    *int   `json:"jobs,omitempty"`
+}
+
+func (s *ActionsService) listWorkflowRuns(ctx context.Context, endpoint string, opts *ListWorkflowRunsOptions) (*WorkflowRuns, *Response, error) {
+       u, err := addOptions(endpoint, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runs := new(WorkflowRuns)
+       resp, err := s.client.Do(ctx, req, &runs)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runs, resp, nil
+}
+
+// ListWorkflowRunsByID lists all workflow runs by workflow ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-workflow-runs
+func (s *ActionsService) ListWorkflowRunsByID(ctx context.Context, owner, repo string, workflowID int64, opts *ListWorkflowRunsOptions) (*WorkflowRuns, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/actions/workflows/%v/runs", owner, repo, workflowID)
+       return s.listWorkflowRuns(ctx, u, opts)
+}
+
+// ListWorkflowRunsByFileName lists all workflow runs by workflow file name.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-workflow-runs
+func (s *ActionsService) ListWorkflowRunsByFileName(ctx context.Context, owner, repo, workflowFileName string, opts *ListWorkflowRunsOptions) (*WorkflowRuns, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/actions/workflows/%v/runs", owner, repo, workflowFileName)
+       return s.listWorkflowRuns(ctx, u, opts)
+}
+
+// ListRepositoryWorkflowRuns lists all workflow runs for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-workflow-runs-for-a-repository
+func (s *ActionsService) ListRepositoryWorkflowRuns(ctx context.Context, owner, repo string, opts *ListWorkflowRunsOptions) (*WorkflowRuns, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/actions/runs", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runs := new(WorkflowRuns)
+       resp, err := s.client.Do(ctx, req, &runs)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runs, resp, nil
+}
+
+// GetWorkflowRunByID gets a specific workflow run by ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-workflow-run
+func (s *ActionsService) GetWorkflowRunByID(ctx context.Context, owner, repo string, runID int64) (*WorkflowRun, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v", owner, repo, runID)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       run := new(WorkflowRun)
+       resp, err := s.client.Do(ctx, req, run)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return run, resp, nil
+}
+
+// RerunWorkflowByID re-runs a workflow by ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#re-run-a-workflow
+func (s *ActionsService) RerunWorkflowByID(ctx context.Context, owner, repo string, runID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/rerun", owner, repo, runID)
+
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// CancelWorkflowRunByID cancels a workflow run by ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#cancel-a-workflow-run
+func (s *ActionsService) CancelWorkflowRunByID(ctx context.Context, owner, repo string, runID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/cancel", owner, repo, runID)
+
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// GetWorkflowRunLogs gets a redirect URL to download a plain text file of logs for a workflow run.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#download-workflow-run-logs
+func (s *ActionsService) GetWorkflowRunLogs(ctx context.Context, owner, repo string, runID int64, followRedirects bool) (*url.URL, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/logs", owner, repo, runID)
+
+       resp, err := s.getWorkflowLogsFromURL(ctx, u, followRedirects)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       if resp.StatusCode != http.StatusFound {
+               return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status)
+       }
+       parsedURL, err := url.Parse(resp.Header.Get("Location"))
+       return parsedURL, newResponse(resp), err
+}
+
+// DeleteWorkflowRunLogs deletes all logs for a workflow run.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#delete-workflow-run-logs
+func (s *ActionsService) DeleteWorkflowRunLogs(ctx context.Context, owner, repo string, runID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/logs", owner, repo, runID)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// GetWorkflowRunUsageByID gets a specific workflow usage run by run ID in the unit of billable milliseconds.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-workflow-run-usage
+func (s *ActionsService) GetWorkflowRunUsageByID(ctx context.Context, owner, repo string, runID int64) (*WorkflowRunUsage, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/runs/%v/timing", owner, repo, runID)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       workflowRunUsage := new(WorkflowRunUsage)
+       resp, err := s.client.Do(ctx, req, workflowRunUsage)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return workflowRunUsage, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/actions_workflows.go b/vendor/github.com/google/go-github/v37/github/actions_workflows.go
new file mode 100644 (file)
index 0000000..3ce926f
--- /dev/null
@@ -0,0 +1,218 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// Workflow represents a repository action workflow.
+type Workflow struct {
+       ID        *int64     `json:"id,omitempty"`
+       NodeID    *string    `json:"node_id,omitempty"`
+       Name      *string    `json:"name,omitempty"`
+       Path      *string    `json:"path,omitempty"`
+       State     *string    `json:"state,omitempty"`
+       CreatedAt *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt *Timestamp `json:"updated_at,omitempty"`
+       URL       *string    `json:"url,omitempty"`
+       HTMLURL   *string    `json:"html_url,omitempty"`
+       BadgeURL  *string    `json:"badge_url,omitempty"`
+}
+
+// Workflows represents a slice of repository action workflows.
+type Workflows struct {
+       TotalCount *int        `json:"total_count,omitempty"`
+       Workflows  []*Workflow `json:"workflows,omitempty"`
+}
+
+// WorkflowUsage represents a usage of a specific workflow.
+type WorkflowUsage struct {
+       Billable *WorkflowEnvironment `json:"billable,omitempty"`
+}
+
+// WorkflowEnvironment represents different runner environments available for a workflow.
+type WorkflowEnvironment struct {
+       Ubuntu  *WorkflowBill `json:"UBUNTU,omitempty"`
+       MacOS   *WorkflowBill `json:"MACOS,omitempty"`
+       Windows *WorkflowBill `json:"WINDOWS,omitempty"`
+}
+
+// WorkflowBill specifies billable time for a specific environment in a workflow.
+type WorkflowBill struct {
+       TotalMS *int64 `json:"total_ms,omitempty"`
+}
+
+// CreateWorkflowDispatchEventRequest represents a request to create a workflow dispatch event.
+type CreateWorkflowDispatchEventRequest struct {
+       // Ref represents the reference of the workflow run.
+       // The reference can be a branch, tag, or a commit SHA.
+       // Ref is required when creating a workflow dispatch event.
+       Ref string `json:"ref"`
+       // Inputs represents input keys and values configured in the workflow file.
+       // The maximum number of properties is 10.
+       // Default: Any default properties configured in the workflow file will be used when `inputs` are omitted.
+       Inputs map[string]interface{} `json:"inputs,omitempty"`
+}
+
+// ListWorkflows lists all workflows in a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#list-repository-workflows
+func (s *ActionsService) ListWorkflows(ctx context.Context, owner, repo string, opts *ListOptions) (*Workflows, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/actions/workflows", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       workflows := new(Workflows)
+       resp, err := s.client.Do(ctx, req, &workflows)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return workflows, resp, nil
+}
+
+// GetWorkflowByID gets a specific workflow by ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-workflow
+func (s *ActionsService) GetWorkflowByID(ctx context.Context, owner, repo string, workflowID int64) (*Workflow, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v", owner, repo, workflowID)
+
+       return s.getWorkflow(ctx, u)
+}
+
+// GetWorkflowByFileName gets a specific workflow by file name.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-workflow
+func (s *ActionsService) GetWorkflowByFileName(ctx context.Context, owner, repo, workflowFileName string) (*Workflow, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v", owner, repo, workflowFileName)
+
+       return s.getWorkflow(ctx, u)
+}
+
+func (s *ActionsService) getWorkflow(ctx context.Context, url string) (*Workflow, *Response, error) {
+       req, err := s.client.NewRequest("GET", url, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       workflow := new(Workflow)
+       resp, err := s.client.Do(ctx, req, workflow)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return workflow, resp, nil
+}
+
+// GetWorkflowUsageByID gets a specific workflow usage by ID in the unit of billable milliseconds.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-workflow-usage
+func (s *ActionsService) GetWorkflowUsageByID(ctx context.Context, owner, repo string, workflowID int64) (*WorkflowUsage, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v/timing", owner, repo, workflowID)
+
+       return s.getWorkflowUsage(ctx, u)
+}
+
+// GetWorkflowUsageByFileName gets a specific workflow usage by file name in the unit of billable milliseconds.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-workflow-usage
+func (s *ActionsService) GetWorkflowUsageByFileName(ctx context.Context, owner, repo, workflowFileName string) (*WorkflowUsage, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v/timing", owner, repo, workflowFileName)
+
+       return s.getWorkflowUsage(ctx, u)
+}
+
+func (s *ActionsService) getWorkflowUsage(ctx context.Context, url string) (*WorkflowUsage, *Response, error) {
+       req, err := s.client.NewRequest("GET", url, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       workflowUsage := new(WorkflowUsage)
+       resp, err := s.client.Do(ctx, req, workflowUsage)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return workflowUsage, resp, nil
+}
+
+// CreateWorkflowDispatchEventByID manually triggers a GitHub Actions workflow run.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#create-a-workflow-dispatch-event
+func (s *ActionsService) CreateWorkflowDispatchEventByID(ctx context.Context, owner, repo string, workflowID int64, event CreateWorkflowDispatchEventRequest) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v/dispatches", owner, repo, workflowID)
+
+       return s.createWorkflowDispatchEvent(ctx, u, &event)
+}
+
+// CreateWorkflowDispatchEventByFileName manually triggers a GitHub Actions workflow run.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#create-a-workflow-dispatch-event
+func (s *ActionsService) CreateWorkflowDispatchEventByFileName(ctx context.Context, owner, repo, workflowFileName string, event CreateWorkflowDispatchEventRequest) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v/dispatches", owner, repo, workflowFileName)
+
+       return s.createWorkflowDispatchEvent(ctx, u, &event)
+}
+
+func (s *ActionsService) createWorkflowDispatchEvent(ctx context.Context, url string, event *CreateWorkflowDispatchEventRequest) (*Response, error) {
+       req, err := s.client.NewRequest("POST", url, event)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// EnableWorkflowByID enables a workflow and sets the state of the workflow to "active".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#enable-a-workflow
+func (s *ActionsService) EnableWorkflowByID(ctx context.Context, owner, repo string, workflowID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v/enable", owner, repo, workflowID)
+       return s.doNewPutRequest(ctx, u)
+}
+
+// EnableWorkflowByFileName enables a workflow and sets the state of the workflow to "active".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#enable-a-workflow
+func (s *ActionsService) EnableWorkflowByFileName(ctx context.Context, owner, repo, workflowFileName string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v/enable", owner, repo, workflowFileName)
+       return s.doNewPutRequest(ctx, u)
+}
+
+// DisableWorkflowByID disables a workflow and sets the state of the workflow to "disabled_manually".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#disable-a-workflow
+func (s *ActionsService) DisableWorkflowByID(ctx context.Context, owner, repo string, workflowID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v/disable", owner, repo, workflowID)
+       return s.doNewPutRequest(ctx, u)
+}
+
+// DisableWorkflowByFileName disables a workflow and sets the state of the workflow to "disabled_manually".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#disable-a-workflow
+func (s *ActionsService) DisableWorkflowByFileName(ctx context.Context, owner, repo, workflowFileName string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/actions/workflows/%v/disable", owner, repo, workflowFileName)
+       return s.doNewPutRequest(ctx, u)
+}
+
+func (s *ActionsService) doNewPutRequest(ctx context.Context, url string) (*Response, error) {
+       req, err := s.client.NewRequest("PUT", url, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/activity.go b/vendor/github.com/google/go-github/v37/github/activity.go
new file mode 100644 (file)
index 0000000..e683afb
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import "context"
+
+// ActivityService handles communication with the activity related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/
+type ActivityService service
+
+// FeedLink represents a link to a related resource.
+type FeedLink struct {
+       HRef *string `json:"href,omitempty"`
+       Type *string `json:"type,omitempty"`
+}
+
+// Feeds represents timeline resources in Atom format.
+type Feeds struct {
+       TimelineURL                 *string    `json:"timeline_url,omitempty"`
+       UserURL                     *string    `json:"user_url,omitempty"`
+       CurrentUserPublicURL        *string    `json:"current_user_public_url,omitempty"`
+       CurrentUserURL              *string    `json:"current_user_url,omitempty"`
+       CurrentUserActorURL         *string    `json:"current_user_actor_url,omitempty"`
+       CurrentUserOrganizationURL  *string    `json:"current_user_organization_url,omitempty"`
+       CurrentUserOrganizationURLs []string   `json:"current_user_organization_urls,omitempty"`
+       Links                       *FeedLinks `json:"_links,omitempty"`
+}
+
+// FeedLinks represents the links in a Feed.
+type FeedLinks struct {
+       Timeline                 *FeedLink   `json:"timeline,omitempty"`
+       User                     *FeedLink   `json:"user,omitempty"`
+       CurrentUserPublic        *FeedLink   `json:"current_user_public,omitempty"`
+       CurrentUser              *FeedLink   `json:"current_user,omitempty"`
+       CurrentUserActor         *FeedLink   `json:"current_user_actor,omitempty"`
+       CurrentUserOrganization  *FeedLink   `json:"current_user_organization,omitempty"`
+       CurrentUserOrganizations []*FeedLink `json:"current_user_organizations,omitempty"`
+}
+
+// ListFeeds lists all the feeds available to the authenticated user.
+//
+// GitHub provides several timeline resources in Atom format:
+//     Timeline: The GitHub global public timeline
+//     User: The public timeline for any user, using URI template
+//     Current user public: The public timeline for the authenticated user
+//     Current user: The private timeline for the authenticated user
+//     Current user actor: The private timeline for activity created by the
+//         authenticated user
+//     Current user organizations: The private timeline for the organizations
+//         the authenticated user is a member of.
+//
+// Note: Private feeds are only returned when authenticating via Basic Auth
+// since current feed URIs use the older, non revocable auth tokens.
+func (s *ActivityService) ListFeeds(ctx context.Context) (*Feeds, *Response, error) {
+       req, err := s.client.NewRequest("GET", "feeds", nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       f := &Feeds{}
+       resp, err := s.client.Do(ctx, req, f)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return f, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/activity_events.go b/vendor/github.com/google/go-github/v37/github/activity_events.go
new file mode 100644 (file)
index 0000000..19dc15c
--- /dev/null
@@ -0,0 +1,217 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ListEvents drinks from the firehose of all public events across GitHub.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-public-events
+func (s *ActivityService) ListEvents(ctx context.Context, opts *ListOptions) ([]*Event, *Response, error) {
+       u, err := addOptions("events", opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var events []*Event
+       resp, err := s.client.Do(ctx, req, &events)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return events, resp, nil
+}
+
+// ListRepositoryEvents lists events for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-repository-events
+func (s *ActivityService) ListRepositoryEvents(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Event, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/events", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var events []*Event
+       resp, err := s.client.Do(ctx, req, &events)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return events, resp, nil
+}
+
+// ListIssueEventsForRepository lists issue events for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-issue-events-for-a-repository
+func (s *ActivityService) ListIssueEventsForRepository(ctx context.Context, owner, repo string, opts *ListOptions) ([]*IssueEvent, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/events", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var events []*IssueEvent
+       resp, err := s.client.Do(ctx, req, &events)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return events, resp, nil
+}
+
+// ListEventsForRepoNetwork lists public events for a network of repositories.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-public-events-for-a-network-of-repositories
+func (s *ActivityService) ListEventsForRepoNetwork(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Event, *Response, error) {
+       u := fmt.Sprintf("networks/%v/%v/events", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var events []*Event
+       resp, err := s.client.Do(ctx, req, &events)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return events, resp, nil
+}
+
+// ListEventsForOrganization lists public events for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-public-organization-events
+func (s *ActivityService) ListEventsForOrganization(ctx context.Context, org string, opts *ListOptions) ([]*Event, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/events", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var events []*Event
+       resp, err := s.client.Do(ctx, req, &events)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return events, resp, nil
+}
+
+// ListEventsPerformedByUser lists the events performed by a user. If publicOnly is
+// true, only public events will be returned.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-events-for-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-public-events-for-a-user
+func (s *ActivityService) ListEventsPerformedByUser(ctx context.Context, user string, publicOnly bool, opts *ListOptions) ([]*Event, *Response, error) {
+       var u string
+       if publicOnly {
+               u = fmt.Sprintf("users/%v/events/public", user)
+       } else {
+               u = fmt.Sprintf("users/%v/events", user)
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var events []*Event
+       resp, err := s.client.Do(ctx, req, &events)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return events, resp, nil
+}
+
+// ListEventsReceivedByUser lists the events received by a user. If publicOnly is
+// true, only public events will be returned.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-events-received-by-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-public-events-received-by-a-user
+func (s *ActivityService) ListEventsReceivedByUser(ctx context.Context, user string, publicOnly bool, opts *ListOptions) ([]*Event, *Response, error) {
+       var u string
+       if publicOnly {
+               u = fmt.Sprintf("users/%v/received_events/public", user)
+       } else {
+               u = fmt.Sprintf("users/%v/received_events", user)
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var events []*Event
+       resp, err := s.client.Do(ctx, req, &events)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return events, resp, nil
+}
+
+// ListUserEventsForOrganization provides the user’s organization dashboard. You
+// must be authenticated as the user to view this.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-organization-events-for-the-authenticated-user
+func (s *ActivityService) ListUserEventsForOrganization(ctx context.Context, org, user string, opts *ListOptions) ([]*Event, *Response, error) {
+       u := fmt.Sprintf("users/%v/events/orgs/%v", user, org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var events []*Event
+       resp, err := s.client.Do(ctx, req, &events)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return events, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/activity_notifications.go b/vendor/github.com/google/go-github/v37/github/activity_notifications.go
new file mode 100644 (file)
index 0000000..9b6fbe2
--- /dev/null
@@ -0,0 +1,223 @@
+// Copyright 2014 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// Notification identifies a GitHub notification for a user.
+type Notification struct {
+       ID         *string              `json:"id,omitempty"`
+       Repository *Repository          `json:"repository,omitempty"`
+       Subject    *NotificationSubject `json:"subject,omitempty"`
+
+       // Reason identifies the event that triggered the notification.
+       //
+       // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity#notification-reasons
+       Reason *string `json:"reason,omitempty"`
+
+       Unread     *bool      `json:"unread,omitempty"`
+       UpdatedAt  *time.Time `json:"updated_at,omitempty"`
+       LastReadAt *time.Time `json:"last_read_at,omitempty"`
+       URL        *string    `json:"url,omitempty"`
+}
+
+// NotificationSubject identifies the subject of a notification.
+type NotificationSubject struct {
+       Title            *string `json:"title,omitempty"`
+       URL              *string `json:"url,omitempty"`
+       LatestCommentURL *string `json:"latest_comment_url,omitempty"`
+       Type             *string `json:"type,omitempty"`
+}
+
+// NotificationListOptions specifies the optional parameters to the
+// ActivityService.ListNotifications method.
+type NotificationListOptions struct {
+       All           bool      `url:"all,omitempty"`
+       Participating bool      `url:"participating,omitempty"`
+       Since         time.Time `url:"since,omitempty"`
+       Before        time.Time `url:"before,omitempty"`
+
+       ListOptions
+}
+
+// ListNotifications lists all notifications for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-notifications-for-the-authenticated-user
+func (s *ActivityService) ListNotifications(ctx context.Context, opts *NotificationListOptions) ([]*Notification, *Response, error) {
+       u := fmt.Sprintf("notifications")
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var notifications []*Notification
+       resp, err := s.client.Do(ctx, req, &notifications)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return notifications, resp, nil
+}
+
+// ListRepositoryNotifications lists all notifications in a given repository
+// for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-repository-notifications-for-the-authenticated-user
+func (s *ActivityService) ListRepositoryNotifications(ctx context.Context, owner, repo string, opts *NotificationListOptions) ([]*Notification, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/notifications", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var notifications []*Notification
+       resp, err := s.client.Do(ctx, req, &notifications)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return notifications, resp, nil
+}
+
+type markReadOptions struct {
+       LastReadAt time.Time `json:"last_read_at,omitempty"`
+}
+
+// MarkNotificationsRead marks all notifications up to lastRead as read.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity#mark-as-read
+func (s *ActivityService) MarkNotificationsRead(ctx context.Context, lastRead time.Time) (*Response, error) {
+       opts := &markReadOptions{
+               LastReadAt: lastRead,
+       }
+       req, err := s.client.NewRequest("PUT", "notifications", opts)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// MarkRepositoryNotificationsRead marks all notifications up to lastRead in
+// the specified repository as read.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#mark-repository-notifications-as-read
+func (s *ActivityService) MarkRepositoryNotificationsRead(ctx context.Context, owner, repo string, lastRead time.Time) (*Response, error) {
+       opts := &markReadOptions{
+               LastReadAt: lastRead,
+       }
+       u := fmt.Sprintf("repos/%v/%v/notifications", owner, repo)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// GetThread gets the specified notification thread.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#get-a-thread
+func (s *ActivityService) GetThread(ctx context.Context, id string) (*Notification, *Response, error) {
+       u := fmt.Sprintf("notifications/threads/%v", id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       notification := new(Notification)
+       resp, err := s.client.Do(ctx, req, notification)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return notification, resp, nil
+}
+
+// MarkThreadRead marks the specified thread as read.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#mark-a-thread-as-read
+func (s *ActivityService) MarkThreadRead(ctx context.Context, id string) (*Response, error) {
+       u := fmt.Sprintf("notifications/threads/%v", id)
+
+       req, err := s.client.NewRequest("PATCH", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// GetThreadSubscription checks to see if the authenticated user is subscribed
+// to a thread.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#get-a-thread-subscription-for-the-authenticated-user
+func (s *ActivityService) GetThreadSubscription(ctx context.Context, id string) (*Subscription, *Response, error) {
+       u := fmt.Sprintf("notifications/threads/%v/subscription", id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       sub := new(Subscription)
+       resp, err := s.client.Do(ctx, req, sub)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return sub, resp, nil
+}
+
+// SetThreadSubscription sets the subscription for the specified thread for the
+// authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#set-a-thread-subscription
+func (s *ActivityService) SetThreadSubscription(ctx context.Context, id string, subscription *Subscription) (*Subscription, *Response, error) {
+       u := fmt.Sprintf("notifications/threads/%v/subscription", id)
+
+       req, err := s.client.NewRequest("PUT", u, subscription)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       sub := new(Subscription)
+       resp, err := s.client.Do(ctx, req, sub)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return sub, resp, nil
+}
+
+// DeleteThreadSubscription deletes the subscription for the specified thread
+// for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#delete-a-thread-subscription
+func (s *ActivityService) DeleteThreadSubscription(ctx context.Context, id string) (*Response, error) {
+       u := fmt.Sprintf("notifications/threads/%v/subscription", id)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/activity_star.go b/vendor/github.com/google/go-github/v37/github/activity_star.go
new file mode 100644 (file)
index 0000000..ad07aac
--- /dev/null
@@ -0,0 +1,138 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "strings"
+)
+
+// StarredRepository is returned by ListStarred.
+type StarredRepository struct {
+       StarredAt  *Timestamp  `json:"starred_at,omitempty"`
+       Repository *Repository `json:"repo,omitempty"`
+}
+
+// Stargazer represents a user that has starred a repository.
+type Stargazer struct {
+       StarredAt *Timestamp `json:"starred_at,omitempty"`
+       User      *User      `json:"user,omitempty"`
+}
+
+// ListStargazers lists people who have starred the specified repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-stargazers
+func (s *ActivityService) ListStargazers(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Stargazer, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/stargazers", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeStarringPreview)
+
+       var stargazers []*Stargazer
+       resp, err := s.client.Do(ctx, req, &stargazers)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return stargazers, resp, nil
+}
+
+// ActivityListStarredOptions specifies the optional parameters to the
+// ActivityService.ListStarred method.
+type ActivityListStarredOptions struct {
+       // How to sort the repository list. Possible values are: created, updated,
+       // pushed, full_name. Default is "full_name".
+       Sort string `url:"sort,omitempty"`
+
+       // Direction in which to sort repositories. Possible values are: asc, desc.
+       // Default is "asc" when sort is "full_name", otherwise default is "desc".
+       Direction string `url:"direction,omitempty"`
+
+       ListOptions
+}
+
+// ListStarred lists all the repos starred by a user. Passing the empty string
+// will list the starred repositories for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-repositories-starred-by-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-repositories-starred-by-a-user
+func (s *ActivityService) ListStarred(ctx context.Context, user string, opts *ActivityListStarredOptions) ([]*StarredRepository, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v/starred", user)
+       } else {
+               u = "user/starred"
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when APIs fully launch
+       acceptHeaders := []string{mediaTypeStarringPreview, mediaTypeTopicsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       var repos []*StarredRepository
+       resp, err := s.client.Do(ctx, req, &repos)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repos, resp, nil
+}
+
+// IsStarred checks if a repository is starred by authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#check-if-a-repository-is-starred-by-the-authenticated-user
+func (s *ActivityService) IsStarred(ctx context.Context, owner, repo string) (bool, *Response, error) {
+       u := fmt.Sprintf("user/starred/%v/%v", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+       resp, err := s.client.Do(ctx, req, nil)
+       starred, err := parseBoolResponse(err)
+       return starred, resp, err
+}
+
+// Star a repository as the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#star-a-repository-for-the-authenticated-user
+func (s *ActivityService) Star(ctx context.Context, owner, repo string) (*Response, error) {
+       u := fmt.Sprintf("user/starred/%v/%v", owner, repo)
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// Unstar a repository as the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#unstar-a-repository-for-the-authenticated-user
+func (s *ActivityService) Unstar(ctx context.Context, owner, repo string) (*Response, error) {
+       u := fmt.Sprintf("user/starred/%v/%v", owner, repo)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/activity_watching.go b/vendor/github.com/google/go-github/v37/github/activity_watching.go
new file mode 100644 (file)
index 0000000..16cceb5
--- /dev/null
@@ -0,0 +1,147 @@
+// Copyright 2014 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// Subscription identifies a repository or thread subscription.
+type Subscription struct {
+       Subscribed *bool      `json:"subscribed,omitempty"`
+       Ignored    *bool      `json:"ignored,omitempty"`
+       Reason     *string    `json:"reason,omitempty"`
+       CreatedAt  *Timestamp `json:"created_at,omitempty"`
+       URL        *string    `json:"url,omitempty"`
+
+       // only populated for repository subscriptions
+       RepositoryURL *string `json:"repository_url,omitempty"`
+
+       // only populated for thread subscriptions
+       ThreadURL *string `json:"thread_url,omitempty"`
+}
+
+// ListWatchers lists watchers of a particular repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-watchers
+func (s *ActivityService) ListWatchers(ctx context.Context, owner, repo string, opts *ListOptions) ([]*User, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/subscribers", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var watchers []*User
+       resp, err := s.client.Do(ctx, req, &watchers)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return watchers, resp, nil
+}
+
+// ListWatched lists the repositories the specified user is watching. Passing
+// the empty string will fetch watched repos for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-repositories-watched-by-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-repositories-watched-by-a-user
+func (s *ActivityService) ListWatched(ctx context.Context, user string, opts *ListOptions) ([]*Repository, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v/subscriptions", user)
+       } else {
+               u = "user/subscriptions"
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var watched []*Repository
+       resp, err := s.client.Do(ctx, req, &watched)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return watched, resp, nil
+}
+
+// GetRepositorySubscription returns the subscription for the specified
+// repository for the authenticated user. If the authenticated user is not
+// watching the repository, a nil Subscription is returned.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#get-a-repository-subscription
+func (s *ActivityService) GetRepositorySubscription(ctx context.Context, owner, repo string) (*Subscription, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       sub := new(Subscription)
+       resp, err := s.client.Do(ctx, req, sub)
+       if err != nil {
+               // if it's just a 404, don't return that as an error
+               _, err = parseBoolResponse(err)
+               return nil, resp, err
+       }
+
+       return sub, resp, nil
+}
+
+// SetRepositorySubscription sets the subscription for the specified repository
+// for the authenticated user.
+//
+// To watch a repository, set subscription.Subscribed to true.
+// To ignore notifications made within a repository, set subscription.Ignored to true.
+// To stop watching a repository, use DeleteRepositorySubscription.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#set-a-repository-subscription
+func (s *ActivityService) SetRepositorySubscription(ctx context.Context, owner, repo string, subscription *Subscription) (*Subscription, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo)
+
+       req, err := s.client.NewRequest("PUT", u, subscription)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       sub := new(Subscription)
+       resp, err := s.client.Do(ctx, req, sub)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return sub, resp, nil
+}
+
+// DeleteRepositorySubscription deletes the subscription for the specified
+// repository for the authenticated user.
+//
+// This is used to stop watching a repository. To control whether or not to
+// receive notifications from a repository, use SetRepositorySubscription.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#delete-a-repository-subscription
+func (s *ActivityService) DeleteRepositorySubscription(ctx context.Context, owner, repo string) (*Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/admin.go b/vendor/github.com/google/go-github/v37/github/admin.go
new file mode 100644 (file)
index 0000000..7bf0f22
--- /dev/null
@@ -0,0 +1,119 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// AdminService handles communication with the admin related methods of the
+// GitHub API. These API routes are normally only accessible for GitHub
+// Enterprise installations.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/enterprise/
+type AdminService service
+
+// TeamLDAPMapping represents the mapping between a GitHub team and an LDAP group.
+type TeamLDAPMapping struct {
+       ID          *int64  `json:"id,omitempty"`
+       LDAPDN      *string `json:"ldap_dn,omitempty"`
+       URL         *string `json:"url,omitempty"`
+       Name        *string `json:"name,omitempty"`
+       Slug        *string `json:"slug,omitempty"`
+       Description *string `json:"description,omitempty"`
+       Privacy     *string `json:"privacy,omitempty"`
+       Permission  *string `json:"permission,omitempty"`
+
+       MembersURL      *string `json:"members_url,omitempty"`
+       RepositoriesURL *string `json:"repositories_url,omitempty"`
+}
+
+func (m TeamLDAPMapping) String() string {
+       return Stringify(m)
+}
+
+// UserLDAPMapping represents the mapping between a GitHub user and an LDAP user.
+type UserLDAPMapping struct {
+       ID         *int64  `json:"id,omitempty"`
+       LDAPDN     *string `json:"ldap_dn,omitempty"`
+       Login      *string `json:"login,omitempty"`
+       AvatarURL  *string `json:"avatar_url,omitempty"`
+       GravatarID *string `json:"gravatar_id,omitempty"`
+       Type       *string `json:"type,omitempty"`
+       SiteAdmin  *bool   `json:"site_admin,omitempty"`
+
+       URL               *string `json:"url,omitempty"`
+       EventsURL         *string `json:"events_url,omitempty"`
+       FollowingURL      *string `json:"following_url,omitempty"`
+       FollowersURL      *string `json:"followers_url,omitempty"`
+       GistsURL          *string `json:"gists_url,omitempty"`
+       OrganizationsURL  *string `json:"organizations_url,omitempty"`
+       ReceivedEventsURL *string `json:"received_events_url,omitempty"`
+       ReposURL          *string `json:"repos_url,omitempty"`
+       StarredURL        *string `json:"starred_url,omitempty"`
+       SubscriptionsURL  *string `json:"subscriptions_url,omitempty"`
+}
+
+func (m UserLDAPMapping) String() string {
+       return Stringify(m)
+}
+
+// Enterprise represents the GitHub enterprise profile.
+type Enterprise struct {
+       ID          *int       `json:"id,omitempty"`
+       Slug        *string    `json:"slug,omitempty"`
+       Name        *string    `json:"name,omitempty"`
+       NodeID      *string    `json:"node_id,omitempty"`
+       AvatarURL   *string    `json:"avatar_url,omitempty"`
+       Description *string    `json:"description,omitempty"`
+       WebsiteURL  *string    `json:"website_url,omitempty"`
+       HTMLURL     *string    `json:"html_url,omitempty"`
+       CreatedAt   *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt   *Timestamp `json:"updated_at,omitempty"`
+}
+
+func (m Enterprise) String() string {
+       return Stringify(m)
+}
+
+// UpdateUserLDAPMapping updates the mapping between a GitHub user and an LDAP user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/enterprise/ldap/#update-ldap-mapping-for-a-user
+func (s *AdminService) UpdateUserLDAPMapping(ctx context.Context, user string, mapping *UserLDAPMapping) (*UserLDAPMapping, *Response, error) {
+       u := fmt.Sprintf("admin/ldap/users/%v/mapping", user)
+       req, err := s.client.NewRequest("PATCH", u, mapping)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       m := new(UserLDAPMapping)
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// UpdateTeamLDAPMapping updates the mapping between a GitHub team and an LDAP group.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/enterprise/ldap/#update-ldap-mapping-for-a-team
+func (s *AdminService) UpdateTeamLDAPMapping(ctx context.Context, team int64, mapping *TeamLDAPMapping) (*TeamLDAPMapping, *Response, error) {
+       u := fmt.Sprintf("admin/ldap/teams/%v/mapping", team)
+       req, err := s.client.NewRequest("PATCH", u, mapping)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       m := new(TeamLDAPMapping)
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/admin_orgs.go b/vendor/github.com/google/go-github/v37/github/admin_orgs.go
new file mode 100644 (file)
index 0000000..448e51f
--- /dev/null
@@ -0,0 +1,89 @@
+// Copyright 2019 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// createOrgRequest is a subset of Organization and is used internally
+// by CreateOrg to pass only the known fields for the endpoint.
+type createOrgRequest struct {
+       Login *string `json:"login,omitempty"`
+       Admin *string `json:"admin,omitempty"`
+}
+
+// CreateOrg creates a new organization in GitHub Enterprise.
+//
+// Note that only a subset of the org fields are used and org must
+// not be nil.
+//
+// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/orgs/#create-an-organization
+func (s *AdminService) CreateOrg(ctx context.Context, org *Organization, admin string) (*Organization, *Response, error) {
+       u := "admin/organizations"
+
+       orgReq := &createOrgRequest{
+               Login: org.Login,
+               Admin: &admin,
+       }
+
+       req, err := s.client.NewRequest("POST", u, orgReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       o := new(Organization)
+       resp, err := s.client.Do(ctx, req, o)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return o, resp, nil
+}
+
+// renameOrgRequest is a subset of Organization and is used internally
+// by RenameOrg and RenameOrgByName to pass only the known fields for the endpoint.
+type renameOrgRequest struct {
+       Login *string `json:"login,omitempty"`
+}
+
+// RenameOrgResponse is the response given when renaming an Organization.
+type RenameOrgResponse struct {
+       Message *string `json:"message,omitempty"`
+       URL     *string `json:"url,omitempty"`
+}
+
+// RenameOrg renames an organization in GitHub Enterprise.
+//
+// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/orgs/#rename-an-organization
+func (s *AdminService) RenameOrg(ctx context.Context, org *Organization, newName string) (*RenameOrgResponse, *Response, error) {
+       return s.RenameOrgByName(ctx, *org.Login, newName)
+}
+
+// RenameOrgByName renames an organization in GitHub Enterprise using its current name.
+//
+// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/orgs/#rename-an-organization
+func (s *AdminService) RenameOrgByName(ctx context.Context, org, newName string) (*RenameOrgResponse, *Response, error) {
+       u := fmt.Sprintf("admin/organizations/%v", org)
+
+       orgReq := &renameOrgRequest{
+               Login: &newName,
+       }
+
+       req, err := s.client.NewRequest("PATCH", u, orgReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       o := new(RenameOrgResponse)
+       resp, err := s.client.Do(ctx, req, o)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return o, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/admin_stats.go b/vendor/github.com/google/go-github/v37/github/admin_stats.go
new file mode 100644 (file)
index 0000000..0744ffa
--- /dev/null
@@ -0,0 +1,171 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// AdminStats represents a variety of stats of a GitHub Enterprise
+// installation.
+type AdminStats struct {
+       Issues     *IssueStats     `json:"issues,omitempty"`
+       Hooks      *HookStats      `json:"hooks,omitempty"`
+       Milestones *MilestoneStats `json:"milestones,omitempty"`
+       Orgs       *OrgStats       `json:"orgs,omitempty"`
+       Comments   *CommentStats   `json:"comments,omitempty"`
+       Pages      *PageStats      `json:"pages,omitempty"`
+       Users      *UserStats      `json:"users,omitempty"`
+       Gists      *GistStats      `json:"gists,omitempty"`
+       Pulls      *PullStats      `json:"pulls,omitempty"`
+       Repos      *RepoStats      `json:"repos,omitempty"`
+}
+
+func (s AdminStats) String() string {
+       return Stringify(s)
+}
+
+// IssueStats represents the number of total, open and closed issues.
+type IssueStats struct {
+       TotalIssues  *int `json:"total_issues,omitempty"`
+       OpenIssues   *int `json:"open_issues,omitempty"`
+       ClosedIssues *int `json:"closed_issues,omitempty"`
+}
+
+func (s IssueStats) String() string {
+       return Stringify(s)
+}
+
+// HookStats represents the number of total, active and inactive hooks.
+type HookStats struct {
+       TotalHooks    *int `json:"total_hooks,omitempty"`
+       ActiveHooks   *int `json:"active_hooks,omitempty"`
+       InactiveHooks *int `json:"inactive_hooks,omitempty"`
+}
+
+func (s HookStats) String() string {
+       return Stringify(s)
+}
+
+// MilestoneStats represents the number of total, open and close milestones.
+type MilestoneStats struct {
+       TotalMilestones  *int `json:"total_milestones,omitempty"`
+       OpenMilestones   *int `json:"open_milestones,omitempty"`
+       ClosedMilestones *int `json:"closed_milestones,omitempty"`
+}
+
+func (s MilestoneStats) String() string {
+       return Stringify(s)
+}
+
+// OrgStats represents the number of total, disabled organizations and the team
+// and team member count.
+type OrgStats struct {
+       TotalOrgs        *int `json:"total_orgs,omitempty"`
+       DisabledOrgs     *int `json:"disabled_orgs,omitempty"`
+       TotalTeams       *int `json:"total_teams,omitempty"`
+       TotalTeamMembers *int `json:"total_team_members,omitempty"`
+}
+
+func (s OrgStats) String() string {
+       return Stringify(s)
+}
+
+// CommentStats represents the number of total comments on commits, gists, issues
+// and pull requests.
+type CommentStats struct {
+       TotalCommitComments      *int `json:"total_commit_comments,omitempty"`
+       TotalGistComments        *int `json:"total_gist_comments,omitempty"`
+       TotalIssueComments       *int `json:"total_issue_comments,omitempty"`
+       TotalPullRequestComments *int `json:"total_pull_request_comments,omitempty"`
+}
+
+func (s CommentStats) String() string {
+       return Stringify(s)
+}
+
+// PageStats represents the total number of github pages.
+type PageStats struct {
+       TotalPages *int `json:"total_pages,omitempty"`
+}
+
+func (s PageStats) String() string {
+       return Stringify(s)
+}
+
+// UserStats represents the number of total, admin and suspended users.
+type UserStats struct {
+       TotalUsers     *int `json:"total_users,omitempty"`
+       AdminUsers     *int `json:"admin_users,omitempty"`
+       SuspendedUsers *int `json:"suspended_users,omitempty"`
+}
+
+func (s UserStats) String() string {
+       return Stringify(s)
+}
+
+// GistStats represents the number of total, private and public gists.
+type GistStats struct {
+       TotalGists   *int `json:"total_gists,omitempty"`
+       PrivateGists *int `json:"private_gists,omitempty"`
+       PublicGists  *int `json:"public_gists,omitempty"`
+}
+
+func (s GistStats) String() string {
+       return Stringify(s)
+}
+
+// PullStats represents the number of total, merged, mergable and unmergeable
+// pull-requests.
+type PullStats struct {
+       TotalPulls      *int `json:"total_pulls,omitempty"`
+       MergedPulls     *int `json:"merged_pulls,omitempty"`
+       MergablePulls   *int `json:"mergeable_pulls,omitempty"`
+       UnmergablePulls *int `json:"unmergeable_pulls,omitempty"`
+}
+
+func (s PullStats) String() string {
+       return Stringify(s)
+}
+
+// RepoStats represents the number of total, root, fork, organization repositories
+// together with the total number of pushes and wikis.
+type RepoStats struct {
+       TotalRepos  *int `json:"total_repos,omitempty"`
+       RootRepos   *int `json:"root_repos,omitempty"`
+       ForkRepos   *int `json:"fork_repos,omitempty"`
+       OrgRepos    *int `json:"org_repos,omitempty"`
+       TotalPushes *int `json:"total_pushes,omitempty"`
+       TotalWikis  *int `json:"total_wikis,omitempty"`
+}
+
+func (s RepoStats) String() string {
+       return Stringify(s)
+}
+
+// GetAdminStats returns a variety of metrics about a GitHub Enterprise
+// installation.
+//
+// Please note that this is only available to site administrators,
+// otherwise it will error with a 404 not found (instead of 401 or 403).
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/enterprise-admin/admin_stats/
+func (s *AdminService) GetAdminStats(ctx context.Context) (*AdminStats, *Response, error) {
+       u := fmt.Sprintf("enterprise/stats/all")
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       m := new(AdminStats)
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/admin_users.go b/vendor/github.com/google/go-github/v37/github/admin_users.go
new file mode 100644 (file)
index 0000000..d756a77
--- /dev/null
@@ -0,0 +1,133 @@
+// Copyright 2019 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// createUserRequest is a subset of User and is used internally
+// by CreateUser to pass only the known fields for the endpoint.
+type createUserRequest struct {
+       Login *string `json:"login,omitempty"`
+       Email *string `json:"email,omitempty"`
+}
+
+// CreateUser creates a new user in GitHub Enterprise.
+//
+// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#create-a-new-user
+func (s *AdminService) CreateUser(ctx context.Context, login, email string) (*User, *Response, error) {
+       u := "admin/users"
+
+       userReq := &createUserRequest{
+               Login: &login,
+               Email: &email,
+       }
+
+       req, err := s.client.NewRequest("POST", u, userReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var user User
+       resp, err := s.client.Do(ctx, req, &user)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return &user, resp, nil
+}
+
+// DeleteUser deletes a user in GitHub Enterprise.
+//
+// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#delete-a-user
+func (s *AdminService) DeleteUser(ctx context.Context, username string) (*Response, error) {
+       u := "admin/users/" + username
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       resp, err := s.client.Do(ctx, req, nil)
+       if err != nil {
+               return resp, err
+       }
+
+       return resp, nil
+}
+
+// ImpersonateUserOptions represents the scoping for the OAuth token.
+type ImpersonateUserOptions struct {
+       Scopes []string `json:"scopes,omitempty"`
+}
+
+// OAuthAPP represents the GitHub Site Administrator OAuth app.
+type OAuthAPP struct {
+       URL      *string `json:"url,omitempty"`
+       Name     *string `json:"name,omitempty"`
+       ClientID *string `json:"client_id,omitempty"`
+}
+
+func (s OAuthAPP) String() string {
+       return Stringify(s)
+}
+
+// UserAuthorization represents the impersonation response.
+type UserAuthorization struct {
+       ID             *int64     `json:"id,omitempty"`
+       URL            *string    `json:"url,omitempty"`
+       Scopes         []string   `json:"scopes,omitempty"`
+       Token          *string    `json:"token,omitempty"`
+       TokenLastEight *string    `json:"token_last_eight,omitempty"`
+       HashedToken    *string    `json:"hashed_token,omitempty"`
+       App            *OAuthAPP  `json:"app,omitempty"`
+       Note           *string    `json:"note,omitempty"`
+       NoteURL        *string    `json:"note_url,omitempty"`
+       UpdatedAt      *Timestamp `json:"updated_at,omitempty"`
+       CreatedAt      *Timestamp `json:"created_at,omitempty"`
+       Fingerprint    *string    `json:"fingerprint,omitempty"`
+}
+
+// CreateUserImpersonation creates an impersonation OAuth token.
+//
+// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#create-an-impersonation-oauth-token
+func (s *AdminService) CreateUserImpersonation(ctx context.Context, username string, opts *ImpersonateUserOptions) (*UserAuthorization, *Response, error) {
+       u := fmt.Sprintf("admin/users/%s/authorizations", username)
+
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       a := new(UserAuthorization)
+       resp, err := s.client.Do(ctx, req, a)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return a, resp, nil
+}
+
+// DeleteUserImpersonation deletes an impersonation OAuth token.
+//
+// GitHub Enterprise API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#delete-an-impersonation-oauth-token
+func (s *AdminService) DeleteUserImpersonation(ctx context.Context, username string) (*Response, error) {
+       u := fmt.Sprintf("admin/users/%s/authorizations", username)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       resp, err := s.client.Do(ctx, req, nil)
+       if err != nil {
+               return resp, err
+       }
+
+       return resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/apps.go b/vendor/github.com/google/go-github/v37/github/apps.go
new file mode 100644 (file)
index 0000000..8b850d9
--- /dev/null
@@ -0,0 +1,352 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// AppsService provides access to the installation related functions
+// in the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/
+type AppsService service
+
+// App represents a GitHub App.
+type App struct {
+       ID          *int64                   `json:"id,omitempty"`
+       Slug        *string                  `json:"slug,omitempty"`
+       NodeID      *string                  `json:"node_id,omitempty"`
+       Owner       *User                    `json:"owner,omitempty"`
+       Name        *string                  `json:"name,omitempty"`
+       Description *string                  `json:"description,omitempty"`
+       ExternalURL *string                  `json:"external_url,omitempty"`
+       HTMLURL     *string                  `json:"html_url,omitempty"`
+       CreatedAt   *Timestamp               `json:"created_at,omitempty"`
+       UpdatedAt   *Timestamp               `json:"updated_at,omitempty"`
+       Permissions *InstallationPermissions `json:"permissions,omitempty"`
+       Events      []string                 `json:"events,omitempty"`
+}
+
+// InstallationToken represents an installation token.
+type InstallationToken struct {
+       Token        *string                  `json:"token,omitempty"`
+       ExpiresAt    *time.Time               `json:"expires_at,omitempty"`
+       Permissions  *InstallationPermissions `json:"permissions,omitempty"`
+       Repositories []*Repository            `json:"repositories,omitempty"`
+}
+
+// InstallationTokenOptions allow restricting a token's access to specific repositories.
+type InstallationTokenOptions struct {
+       // The IDs of the repositories that the installation token can access.
+       // Providing repository IDs restricts the access of an installation token to specific repositories.
+       RepositoryIDs []int64 `json:"repository_ids,omitempty"`
+
+       // The permissions granted to the access token.
+       // The permissions object includes the permission names and their access type.
+       Permissions *InstallationPermissions `json:"permissions,omitempty"`
+}
+
+// InstallationPermissions lists the repository and organization permissions for an installation.
+//
+// Permission names taken from:
+//   https://docs.github.com/en/enterprise-server@3.0/rest/reference/apps#create-an-installation-access-token-for-an-app
+//   https://docs.github.com/en/rest/reference/apps#create-an-installation-access-token-for-an-app
+type InstallationPermissions struct {
+       Actions                       *string `json:"actions,omitempty"`
+       Administration                *string `json:"administration,omitempty"`
+       Blocking                      *string `json:"blocking,omitempty"`
+       Checks                        *string `json:"checks,omitempty"`
+       Contents                      *string `json:"contents,omitempty"`
+       ContentReferences             *string `json:"content_references,omitempty"`
+       Deployments                   *string `json:"deployments,omitempty"`
+       Emails                        *string `json:"emails,omitempty"`
+       Environments                  *string `json:"environments,omitempty"`
+       Followers                     *string `json:"followers,omitempty"`
+       Issues                        *string `json:"issues,omitempty"`
+       Metadata                      *string `json:"metadata,omitempty"`
+       Members                       *string `json:"members,omitempty"`
+       OrganizationAdministration    *string `json:"organization_administration,omitempty"`
+       OrganizationHooks             *string `json:"organization_hooks,omitempty"`
+       OrganizationPlan              *string `json:"organization_plan,omitempty"`
+       OrganizationPreReceiveHooks   *string `json:"organization_pre_receive_hooks,omitempty"`
+       OrganizationProjects          *string `json:"organization_projects,omitempty"`
+       OrganizationSecrets           *string `json:"organization_secrets,omitempty"`
+       OrganizationSelfHostedRunners *string `json:"organization_self_hosted_runners,omitempty"`
+       OrganizationUserBlocking      *string `json:"organization_user_blocking,omitempty"`
+       Packages                      *string `json:"packages,omitempty"`
+       Pages                         *string `json:"pages,omitempty"`
+       PullRequests                  *string `json:"pull_requests,omitempty"`
+       RepositoryHooks               *string `json:"repository_hooks,omitempty"`
+       RepositoryProjects            *string `json:"repository_projects,omitempty"`
+       RepositoryPreReceiveHooks     *string `json:"repository_pre_receive_hooks,omitempty"`
+       Secrets                       *string `json:"secrets,omitempty"`
+       SecretScanningAlerts          *string `json:"secret_scanning_alerts,omitempty"`
+       SecurityEvents                *string `json:"security_events,omitempty"`
+       SingleFile                    *string `json:"single_file,omitempty"`
+       Statuses                      *string `json:"statuses,omitempty"`
+       TeamDiscussions               *string `json:"team_discussions,omitempty"`
+       VulnerabilityAlerts           *string `json:"vulnerability_alerts,omitempty"`
+       Workflows                     *string `json:"workflows,omitempty"`
+}
+
+// Installation represents a GitHub Apps installation.
+type Installation struct {
+       ID                     *int64                   `json:"id,omitempty"`
+       NodeID                 *string                  `json:"node_id,omitempty"`
+       AppID                  *int64                   `json:"app_id,omitempty"`
+       AppSlug                *string                  `json:"app_slug,omitempty"`
+       TargetID               *int64                   `json:"target_id,omitempty"`
+       Account                *User                    `json:"account,omitempty"`
+       AccessTokensURL        *string                  `json:"access_tokens_url,omitempty"`
+       RepositoriesURL        *string                  `json:"repositories_url,omitempty"`
+       HTMLURL                *string                  `json:"html_url,omitempty"`
+       TargetType             *string                  `json:"target_type,omitempty"`
+       SingleFileName         *string                  `json:"single_file_name,omitempty"`
+       RepositorySelection    *string                  `json:"repository_selection,omitempty"`
+       Events                 []string                 `json:"events,omitempty"`
+       SingleFilePaths        []string                 `json:"single_file_paths,omitempty"`
+       Permissions            *InstallationPermissions `json:"permissions,omitempty"`
+       CreatedAt              *Timestamp               `json:"created_at,omitempty"`
+       UpdatedAt              *Timestamp               `json:"updated_at,omitempty"`
+       HasMultipleSingleFiles *bool                    `json:"has_multiple_single_files,omitempty"`
+       SuspendedBy            *User                    `json:"suspended_by,omitempty"`
+       SuspendedAt            *Timestamp               `json:"suspended_at,omitempty"`
+}
+
+// Attachment represents a GitHub Apps attachment.
+type Attachment struct {
+       ID    *int64  `json:"id,omitempty"`
+       Title *string `json:"title,omitempty"`
+       Body  *string `json:"body,omitempty"`
+}
+
+// ContentReference represents a reference to a URL in an issue or pull request.
+type ContentReference struct {
+       ID        *int64  `json:"id,omitempty"`
+       NodeID    *string `json:"node_id,omitempty"`
+       Reference *string `json:"reference,omitempty"`
+}
+
+func (i Installation) String() string {
+       return Stringify(i)
+}
+
+// Get a single GitHub App. Passing the empty string will get
+// the authenticated GitHub App.
+//
+// Note: appSlug is just the URL-friendly name of your GitHub App.
+// You can find this on the settings page for your GitHub App
+// (e.g., https://github.com/settings/apps/:app_slug).
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#get-the-authenticated-app
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#get-an-app
+func (s *AppsService) Get(ctx context.Context, appSlug string) (*App, *Response, error) {
+       var u string
+       if appSlug != "" {
+               u = fmt.Sprintf("apps/%v", appSlug)
+       } else {
+               u = "app"
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       app := new(App)
+       resp, err := s.client.Do(ctx, req, app)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return app, resp, nil
+}
+
+// ListInstallations lists the installations that the current GitHub App has.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#list-installations-for-the-authenticated-app
+func (s *AppsService) ListInstallations(ctx context.Context, opts *ListOptions) ([]*Installation, *Response, error) {
+       u, err := addOptions("app/installations", opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var i []*Installation
+       resp, err := s.client.Do(ctx, req, &i)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return i, resp, nil
+}
+
+// GetInstallation returns the specified installation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#get-an-installation-for-the-authenticated-app
+func (s *AppsService) GetInstallation(ctx context.Context, id int64) (*Installation, *Response, error) {
+       return s.getInstallation(ctx, fmt.Sprintf("app/installations/%v", id))
+}
+
+// ListUserInstallations lists installations that are accessible to the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#list-app-installations-accessible-to-the-user-access-token
+func (s *AppsService) ListUserInstallations(ctx context.Context, opts *ListOptions) ([]*Installation, *Response, error) {
+       u, err := addOptions("user/installations", opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var i struct {
+               Installations []*Installation `json:"installations"`
+       }
+       resp, err := s.client.Do(ctx, req, &i)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return i.Installations, resp, nil
+}
+
+// SuspendInstallation suspends the specified installation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#suspend-an-app-installation
+func (s *AppsService) SuspendInstallation(ctx context.Context, id int64) (*Response, error) {
+       u := fmt.Sprintf("app/installations/%v/suspended", id)
+
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// UnsuspendInstallation unsuspends the specified installation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#unsuspend-an-app-installation
+func (s *AppsService) UnsuspendInstallation(ctx context.Context, id int64) (*Response, error) {
+       u := fmt.Sprintf("app/installations/%v/suspended", id)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeleteInstallation deletes the specified installation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#delete-an-installation-for-the-authenticated-app
+func (s *AppsService) DeleteInstallation(ctx context.Context, id int64) (*Response, error) {
+       u := fmt.Sprintf("app/installations/%v", id)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// CreateInstallationToken creates a new installation token.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#create-an-installation-access-token-for-an-app
+func (s *AppsService) CreateInstallationToken(ctx context.Context, id int64, opts *InstallationTokenOptions) (*InstallationToken, *Response, error) {
+       u := fmt.Sprintf("app/installations/%v/access_tokens", id)
+
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(InstallationToken)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// CreateAttachment creates a new attachment on user comment containing a url.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#create-a-content-attachment
+func (s *AppsService) CreateAttachment(ctx context.Context, contentReferenceID int64, title, body string) (*Attachment, *Response, error) {
+       u := fmt.Sprintf("content_references/%v/attachments", contentReferenceID)
+       payload := &Attachment{Title: String(title), Body: String(body)}
+       req, err := s.client.NewRequest("POST", u, payload)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeContentAttachmentsPreview)
+
+       m := &Attachment{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// FindOrganizationInstallation finds the organization's installation information.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#get-an-organization-installation-for-the-authenticated-app
+func (s *AppsService) FindOrganizationInstallation(ctx context.Context, org string) (*Installation, *Response, error) {
+       return s.getInstallation(ctx, fmt.Sprintf("orgs/%v/installation", org))
+}
+
+// FindRepositoryInstallation finds the repository's installation information.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#get-a-repository-installation-for-the-authenticated-app
+func (s *AppsService) FindRepositoryInstallation(ctx context.Context, owner, repo string) (*Installation, *Response, error) {
+       return s.getInstallation(ctx, fmt.Sprintf("repos/%v/%v/installation", owner, repo))
+}
+
+// FindRepositoryInstallationByID finds the repository's installation information.
+//
+// Note: FindRepositoryInstallationByID uses the undocumented GitHub API endpoint /repositories/:id/installation.
+func (s *AppsService) FindRepositoryInstallationByID(ctx context.Context, id int64) (*Installation, *Response, error) {
+       return s.getInstallation(ctx, fmt.Sprintf("repositories/%d/installation", id))
+}
+
+// FindUserInstallation finds the user's installation information.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#get-a-user-installation-for-the-authenticated-app
+func (s *AppsService) FindUserInstallation(ctx context.Context, user string) (*Installation, *Response, error) {
+       return s.getInstallation(ctx, fmt.Sprintf("users/%v/installation", user))
+}
+
+func (s *AppsService) getInstallation(ctx context.Context, url string) (*Installation, *Response, error) {
+       req, err := s.client.NewRequest("GET", url, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       i := new(Installation)
+       resp, err := s.client.Do(ctx, req, i)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return i, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/apps_installation.go b/vendor/github.com/google/go-github/v37/github/apps_installation.go
new file mode 100644 (file)
index 0000000..521860d
--- /dev/null
@@ -0,0 +1,128 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "strings"
+)
+
+// ListRepositories represents the response from the list repos endpoints.
+type ListRepositories struct {
+       TotalCount   *int          `json:"total_count,omitempty"`
+       Repositories []*Repository `json:"repositories"`
+}
+
+// ListRepos lists the repositories that are accessible to the authenticated installation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#list-repositories-accessible-to-the-app-installation
+func (s *AppsService) ListRepos(ctx context.Context, opts *ListOptions) (*ListRepositories, *Response, error) {
+       u, err := addOptions("installation/repositories", opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       acceptHeaders := []string{
+               mediaTypeTopicsPreview,
+               mediaTypeRepositoryVisibilityPreview,
+               mediaTypeRepositoryTemplatePreview,
+       }
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       var r *ListRepositories
+
+       resp, err := s.client.Do(ctx, req, &r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// ListUserRepos lists repositories that are accessible
+// to the authenticated user for an installation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#list-repositories-accessible-to-the-user-access-token
+func (s *AppsService) ListUserRepos(ctx context.Context, id int64, opts *ListOptions) (*ListRepositories, *Response, error) {
+       u := fmt.Sprintf("user/installations/%v/repositories", id)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       acceptHeaders := []string{
+               mediaTypeTopicsPreview,
+               mediaTypeRepositoryVisibilityPreview,
+               mediaTypeRepositoryTemplatePreview,
+       }
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       var r *ListRepositories
+       resp, err := s.client.Do(ctx, req, &r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// AddRepository adds a single repository to an installation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#add-a-repository-to-an-app-installation
+func (s *AppsService) AddRepository(ctx context.Context, instID, repoID int64) (*Repository, *Response, error) {
+       u := fmt.Sprintf("user/installations/%v/repositories/%v", instID, repoID)
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(Repository)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// RemoveRepository removes a single repository from an installation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#remove-a-repository-from-an-app-installation
+func (s *AppsService) RemoveRepository(ctx context.Context, instID, repoID int64) (*Response, error) {
+       u := fmt.Sprintf("user/installations/%v/repositories/%v", instID, repoID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// RevokeInstallationToken revokes an installation token.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#revoke-an-installation-access-token
+func (s *AppsService) RevokeInstallationToken(ctx context.Context) (*Response, error) {
+       u := "installation/token"
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/apps_manifest.go b/vendor/github.com/google/go-github/v37/github/apps_manifest.go
new file mode 100644 (file)
index 0000000..defd6c0
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2019 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// AppConfig describes the configuration of a GitHub App.
+type AppConfig struct {
+       ID            *int64     `json:"id,omitempty"`
+       NodeID        *string    `json:"node_id,omitempty"`
+       Owner         *User      `json:"owner,omitempty"`
+       Name          *string    `json:"name,omitempty"`
+       Description   *string    `json:"description,omitempty"`
+       ExternalURL   *string    `json:"external_url,omitempty"`
+       HTMLURL       *string    `json:"html_url,omitempty"`
+       CreatedAt     *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt     *Timestamp `json:"updated_at,omitempty"`
+       ClientID      *string    `json:"client_id,omitempty"`
+       ClientSecret  *string    `json:"client_secret,omitempty"`
+       WebhookSecret *string    `json:"webhook_secret,omitempty"`
+       PEM           *string    `json:"pem,omitempty"`
+}
+
+// CompleteAppManifest completes the App manifest handshake flow for the given
+// code.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#create-a-github-app-from-a-manifest
+func (s *AppsService) CompleteAppManifest(ctx context.Context, code string) (*AppConfig, *Response, error) {
+       u := fmt.Sprintf("app-manifests/%s/conversions", code)
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       cfg := new(AppConfig)
+       resp, err := s.client.Do(ctx, req, cfg)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return cfg, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/apps_marketplace.go b/vendor/github.com/google/go-github/v37/github/apps_marketplace.go
new file mode 100644 (file)
index 0000000..13d09f2
--- /dev/null
@@ -0,0 +1,180 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// MarketplaceService handles communication with the marketplace related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps#marketplace
+type MarketplaceService struct {
+       client *Client
+       // Stubbed controls whether endpoints that return stubbed data are used
+       // instead of production endpoints. Stubbed data is fake data that's useful
+       // for testing your GitHub Apps. Stubbed data is hard-coded and will not
+       // change based on actual subscriptions.
+       //
+       // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps#testing-with-stubbed-endpoints
+       Stubbed bool
+}
+
+// MarketplacePlan represents a GitHub Apps Marketplace Listing Plan.
+type MarketplacePlan struct {
+       URL                 *string `json:"url,omitempty"`
+       AccountsURL         *string `json:"accounts_url,omitempty"`
+       ID                  *int64  `json:"id,omitempty"`
+       Number              *int    `json:"number,omitempty"`
+       Name                *string `json:"name,omitempty"`
+       Description         *string `json:"description,omitempty"`
+       MonthlyPriceInCents *int    `json:"monthly_price_in_cents,omitempty"`
+       YearlyPriceInCents  *int    `json:"yearly_price_in_cents,omitempty"`
+       // The pricing model for this listing.  Can be one of "flat-rate", "per-unit", or "free".
+       PriceModel *string   `json:"price_model,omitempty"`
+       UnitName   *string   `json:"unit_name,omitempty"`
+       Bullets    *[]string `json:"bullets,omitempty"`
+       // State can be one of the values "draft" or "published".
+       State        *string `json:"state,omitempty"`
+       HasFreeTrial *bool   `json:"has_free_trial,omitempty"`
+}
+
+// MarketplacePurchase represents a GitHub Apps Marketplace Purchase.
+type MarketplacePurchase struct {
+       // BillingCycle can be one of the values "yearly", "monthly" or nil.
+       BillingCycle    *string          `json:"billing_cycle,omitempty"`
+       NextBillingDate *Timestamp       `json:"next_billing_date,omitempty"`
+       UnitCount       *int             `json:"unit_count,omitempty"`
+       Plan            *MarketplacePlan `json:"plan,omitempty"`
+       OnFreeTrial     *bool            `json:"on_free_trial,omitempty"`
+       FreeTrialEndsOn *Timestamp       `json:"free_trial_ends_on,omitempty"`
+       UpdatedAt       *Timestamp       `json:"updated_at,omitempty"`
+}
+
+// MarketplacePendingChange represents a pending change to a GitHub Apps Marketplace Plan.
+type MarketplacePendingChange struct {
+       EffectiveDate *Timestamp       `json:"effective_date,omitempty"`
+       UnitCount     *int             `json:"unit_count,omitempty"`
+       ID            *int64           `json:"id,omitempty"`
+       Plan          *MarketplacePlan `json:"plan,omitempty"`
+}
+
+// MarketplacePlanAccount represents a GitHub Account (user or organization) on a specific plan.
+type MarketplacePlanAccount struct {
+       URL                      *string                   `json:"url,omitempty"`
+       Type                     *string                   `json:"type,omitempty"`
+       ID                       *int64                    `json:"id,omitempty"`
+       Login                    *string                   `json:"login,omitempty"`
+       OrganizationBillingEmail *string                   `json:"organization_billing_email,omitempty"`
+       MarketplacePurchase      *MarketplacePurchase      `json:"marketplace_purchase,omitempty"`
+       MarketplacePendingChange *MarketplacePendingChange `json:"marketplace_pending_change,omitempty"`
+}
+
+// ListPlans lists all plans for your Marketplace listing.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps#list-plans
+func (s *MarketplaceService) ListPlans(ctx context.Context, opts *ListOptions) ([]*MarketplacePlan, *Response, error) {
+       uri := s.marketplaceURI("plans")
+       u, err := addOptions(uri, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var plans []*MarketplacePlan
+       resp, err := s.client.Do(ctx, req, &plans)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return plans, resp, nil
+}
+
+// ListPlanAccountsForPlan lists all GitHub accounts (user or organization) on a specific plan.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/apps#list-accounts-for-a-plan
+func (s *MarketplaceService) ListPlanAccountsForPlan(ctx context.Context, planID int64, opts *ListOptions) ([]*MarketplacePlanAccount, *Response, error) {
+       uri := s.marketplaceURI(fmt.Sprintf("plans/%v/accounts", planID))
+       u, err := addOptions(uri, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var accounts []*MarketplacePlanAccount
+       resp, err := s.client.Do(ctx, req, &accounts)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return accounts, resp, nil
+}
+
+// GetPlanAccountForAccount get GitHub account (user or organization) associated with an account.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/apps#get-a-subscription-plan-for-an-account
+func (s *MarketplaceService) GetPlanAccountForAccount(ctx context.Context, accountID int64) (*MarketplacePlanAccount, *Response, error) {
+       uri := s.marketplaceURI(fmt.Sprintf("accounts/%v", accountID))
+
+       req, err := s.client.NewRequest("GET", uri, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var account *MarketplacePlanAccount
+       resp, err := s.client.Do(ctx, req, &account)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return account, resp, nil
+}
+
+// ListMarketplacePurchasesForUser lists all GitHub marketplace purchases made by a user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#list-subscriptions-for-the-authenticated-user-stubbed
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#list-subscriptions-for-the-authenticated-user
+func (s *MarketplaceService) ListMarketplacePurchasesForUser(ctx context.Context, opts *ListOptions) ([]*MarketplacePurchase, *Response, error) {
+       uri := "user/marketplace_purchases"
+       if s.Stubbed {
+               uri = "user/marketplace_purchases/stubbed"
+       }
+
+       u, err := addOptions(uri, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var purchases []*MarketplacePurchase
+       resp, err := s.client.Do(ctx, req, &purchases)
+       if err != nil {
+               return nil, resp, err
+       }
+       return purchases, resp, nil
+}
+
+func (s *MarketplaceService) marketplaceURI(endpoint string) string {
+       url := "marketplace_listing"
+       if s.Stubbed {
+               url = "marketplace_listing/stubbed"
+       }
+       return url + "/" + endpoint
+}
diff --git a/vendor/github.com/google/go-github/v37/github/authorizations.go b/vendor/github.com/google/go-github/v37/github/authorizations.go
new file mode 100644 (file)
index 0000000..76a14c3
--- /dev/null
@@ -0,0 +1,281 @@
+// Copyright 2015 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// Scope models a GitHub authorization scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/oauth/#scopes
+type Scope string
+
+// This is the set of scopes for GitHub API V3
+const (
+       ScopeNone           Scope = "(no scope)" // REVISIT: is this actually returned, or just a documentation artifact?
+       ScopeUser           Scope = "user"
+       ScopeUserEmail      Scope = "user:email"
+       ScopeUserFollow     Scope = "user:follow"
+       ScopePublicRepo     Scope = "public_repo"
+       ScopeRepo           Scope = "repo"
+       ScopeRepoDeployment Scope = "repo_deployment"
+       ScopeRepoStatus     Scope = "repo:status"
+       ScopeDeleteRepo     Scope = "delete_repo"
+       ScopeNotifications  Scope = "notifications"
+       ScopeGist           Scope = "gist"
+       ScopeReadRepoHook   Scope = "read:repo_hook"
+       ScopeWriteRepoHook  Scope = "write:repo_hook"
+       ScopeAdminRepoHook  Scope = "admin:repo_hook"
+       ScopeAdminOrgHook   Scope = "admin:org_hook"
+       ScopeReadOrg        Scope = "read:org"
+       ScopeWriteOrg       Scope = "write:org"
+       ScopeAdminOrg       Scope = "admin:org"
+       ScopeReadPublicKey  Scope = "read:public_key"
+       ScopeWritePublicKey Scope = "write:public_key"
+       ScopeAdminPublicKey Scope = "admin:public_key"
+       ScopeReadGPGKey     Scope = "read:gpg_key"
+       ScopeWriteGPGKey    Scope = "write:gpg_key"
+       ScopeAdminGPGKey    Scope = "admin:gpg_key"
+       ScopeSecurityEvents Scope = "security_events"
+)
+
+// AuthorizationsService handles communication with the authorization related
+// methods of the GitHub API.
+//
+// This service requires HTTP Basic Authentication; it cannot be accessed using
+// an OAuth token.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/oauth_authorizations/
+type AuthorizationsService service
+
+// Authorization represents an individual GitHub authorization.
+type Authorization struct {
+       ID             *int64            `json:"id,omitempty"`
+       URL            *string           `json:"url,omitempty"`
+       Scopes         []Scope           `json:"scopes,omitempty"`
+       Token          *string           `json:"token,omitempty"`
+       TokenLastEight *string           `json:"token_last_eight,omitempty"`
+       HashedToken    *string           `json:"hashed_token,omitempty"`
+       App            *AuthorizationApp `json:"app,omitempty"`
+       Note           *string           `json:"note,omitempty"`
+       NoteURL        *string           `json:"note_url,omitempty"`
+       UpdatedAt      *Timestamp        `json:"updated_at,omitempty"`
+       CreatedAt      *Timestamp        `json:"created_at,omitempty"`
+       Fingerprint    *string           `json:"fingerprint,omitempty"`
+
+       // User is only populated by the Check and Reset methods.
+       User *User `json:"user,omitempty"`
+}
+
+func (a Authorization) String() string {
+       return Stringify(a)
+}
+
+// AuthorizationApp represents an individual GitHub app (in the context of authorization).
+type AuthorizationApp struct {
+       URL      *string `json:"url,omitempty"`
+       Name     *string `json:"name,omitempty"`
+       ClientID *string `json:"client_id,omitempty"`
+}
+
+func (a AuthorizationApp) String() string {
+       return Stringify(a)
+}
+
+// Grant represents an OAuth application that has been granted access to an account.
+type Grant struct {
+       ID        *int64            `json:"id,omitempty"`
+       URL       *string           `json:"url,omitempty"`
+       App       *AuthorizationApp `json:"app,omitempty"`
+       CreatedAt *Timestamp        `json:"created_at,omitempty"`
+       UpdatedAt *Timestamp        `json:"updated_at,omitempty"`
+       Scopes    []string          `json:"scopes,omitempty"`
+}
+
+func (g Grant) String() string {
+       return Stringify(g)
+}
+
+// AuthorizationRequest represents a request to create an authorization.
+type AuthorizationRequest struct {
+       Scopes       []Scope `json:"scopes,omitempty"`
+       Note         *string `json:"note,omitempty"`
+       NoteURL      *string `json:"note_url,omitempty"`
+       ClientID     *string `json:"client_id,omitempty"`
+       ClientSecret *string `json:"client_secret,omitempty"`
+       Fingerprint  *string `json:"fingerprint,omitempty"`
+}
+
+func (a AuthorizationRequest) String() string {
+       return Stringify(a)
+}
+
+// AuthorizationUpdateRequest represents a request to update an authorization.
+//
+// Note that for any one update, you must only provide one of the "scopes"
+// fields. That is, you may provide only one of "Scopes", or "AddScopes", or
+// "RemoveScopes".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/oauth_authorizations/#update-an-existing-authorization
+type AuthorizationUpdateRequest struct {
+       Scopes       []string `json:"scopes,omitempty"`
+       AddScopes    []string `json:"add_scopes,omitempty"`
+       RemoveScopes []string `json:"remove_scopes,omitempty"`
+       Note         *string  `json:"note,omitempty"`
+       NoteURL      *string  `json:"note_url,omitempty"`
+       Fingerprint  *string  `json:"fingerprint,omitempty"`
+}
+
+func (a AuthorizationUpdateRequest) String() string {
+       return Stringify(a)
+}
+
+// Check if an OAuth token is valid for a specific app.
+//
+// Note that this operation requires the use of BasicAuth, but where the
+// username is the OAuth application clientID, and the password is its
+// clientSecret. Invalid tokens will return a 404 Not Found.
+//
+// The returned Authorization.User field will be populated.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#check-a-token
+func (s *AuthorizationsService) Check(ctx context.Context, clientID, accessToken string) (*Authorization, *Response, error) {
+       u := fmt.Sprintf("applications/%v/token", clientID)
+
+       reqBody := &struct {
+               AccessToken string `json:"access_token"`
+       }{AccessToken: accessToken}
+
+       req, err := s.client.NewRequest("POST", u, reqBody)
+       if err != nil {
+               return nil, nil, err
+       }
+       req.Header.Set("Accept", mediaTypeOAuthAppPreview)
+
+       a := new(Authorization)
+       resp, err := s.client.Do(ctx, req, a)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return a, resp, nil
+}
+
+// Reset is used to reset a valid OAuth token without end user involvement.
+// Applications must save the "token" property in the response, because changes
+// take effect immediately.
+//
+// Note that this operation requires the use of BasicAuth, but where the
+// username is the OAuth application clientID, and the password is its
+// clientSecret. Invalid tokens will return a 404 Not Found.
+//
+// The returned Authorization.User field will be populated.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#reset-a-token
+func (s *AuthorizationsService) Reset(ctx context.Context, clientID, accessToken string) (*Authorization, *Response, error) {
+       u := fmt.Sprintf("applications/%v/token", clientID)
+
+       reqBody := &struct {
+               AccessToken string `json:"access_token"`
+       }{AccessToken: accessToken}
+
+       req, err := s.client.NewRequest("PATCH", u, reqBody)
+       if err != nil {
+               return nil, nil, err
+       }
+       req.Header.Set("Accept", mediaTypeOAuthAppPreview)
+
+       a := new(Authorization)
+       resp, err := s.client.Do(ctx, req, a)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return a, resp, nil
+}
+
+// Revoke an authorization for an application.
+//
+// Note that this operation requires the use of BasicAuth, but where the
+// username is the OAuth application clientID, and the password is its
+// clientSecret. Invalid tokens will return a 404 Not Found.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#delete-an-app-token
+func (s *AuthorizationsService) Revoke(ctx context.Context, clientID, accessToken string) (*Response, error) {
+       u := fmt.Sprintf("applications/%v/token", clientID)
+
+       reqBody := &struct {
+               AccessToken string `json:"access_token"`
+       }{AccessToken: accessToken}
+
+       req, err := s.client.NewRequest("DELETE", u, reqBody)
+       if err != nil {
+               return nil, err
+       }
+       req.Header.Set("Accept", mediaTypeOAuthAppPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeleteGrant deletes an OAuth application grant. Deleting an application's
+// grant will also delete all OAuth tokens associated with the application for
+// the user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#delete-an-app-authorization
+func (s *AuthorizationsService) DeleteGrant(ctx context.Context, clientID, accessToken string) (*Response, error) {
+       u := fmt.Sprintf("applications/%v/grant", clientID)
+
+       reqBody := &struct {
+               AccessToken string `json:"access_token"`
+       }{AccessToken: accessToken}
+
+       req, err := s.client.NewRequest("DELETE", u, reqBody)
+       if err != nil {
+               return nil, err
+       }
+       req.Header.Set("Accept", mediaTypeOAuthAppPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// CreateImpersonation creates an impersonation OAuth token.
+//
+// This requires admin permissions. With the returned Authorization.Token
+// you can e.g. create or delete a user's public SSH key. NOTE: creating a
+// new token automatically revokes an existing one.
+//
+// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#create-an-impersonation-oauth-token
+func (s *AuthorizationsService) CreateImpersonation(ctx context.Context, username string, authReq *AuthorizationRequest) (*Authorization, *Response, error) {
+       u := fmt.Sprintf("admin/users/%v/authorizations", username)
+       req, err := s.client.NewRequest("POST", u, authReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       a := new(Authorization)
+       resp, err := s.client.Do(ctx, req, a)
+       if err != nil {
+               return nil, resp, err
+       }
+       return a, resp, nil
+}
+
+// DeleteImpersonation deletes an impersonation OAuth token.
+//
+// NOTE: there can be only one at a time.
+//
+// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#delete-an-impersonation-oauth-token
+func (s *AuthorizationsService) DeleteImpersonation(ctx context.Context, username string) (*Response, error) {
+       u := fmt.Sprintf("admin/users/%v/authorizations", username)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/billing.go b/vendor/github.com/google/go-github/v37/github/billing.go
new file mode 100644 (file)
index 0000000..fa0e034
--- /dev/null
@@ -0,0 +1,131 @@
+// Copyright 2021 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// BillingService provides access to the billing related functions
+// in the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/billing
+type BillingService service
+
+// ActionBilling represents a GitHub Action billing.
+type ActionBilling struct {
+       TotalMinutesUsed     int                  `json:"total_minutes_used"`
+       TotalPaidMinutesUsed int                  `json:"total_paid_minutes_used"`
+       IncludedMinutes      int                  `json:"included_minutes"`
+       MinutesUsedBreakdown MinutesUsedBreakdown `json:"minutes_used_breakdown"`
+}
+
+type MinutesUsedBreakdown struct {
+       Ubuntu  int `json:"UBUNTU"`
+       MacOS   int `json:"MACOS"`
+       Windows int `json:"WINDOWS"`
+}
+
+// PackageBilling represents a GitHub Package billing.
+type PackageBilling struct {
+       TotalGigabytesBandwidthUsed     int `json:"total_gigabytes_bandwidth_used"`
+       TotalPaidGigabytesBandwidthUsed int `json:"total_paid_gigabytes_bandwidth_used"`
+       IncludedGigabytesBandwidth      int `json:"included_gigabytes_bandwidth"`
+}
+
+// StorageBilling represents a GitHub Storage billing.
+type StorageBilling struct {
+       DaysLeftInBillingCycle       int `json:"days_left_in_billing_cycle"`
+       EstimatedPaidStorageForMonth int `json:"estimated_paid_storage_for_month"`
+       EstimatedStorageForMonth     int `json:"estimated_storage_for_month"`
+}
+
+// GetActionsBillingOrg returns the summary of the free and paid GitHub Actions minutes used for an Org.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/billing#get-github-actions-billing-for-an-organization
+func (s *BillingService) GetActionsBillingOrg(ctx context.Context, org string) (*ActionBilling, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/settings/billing/actions", org)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       actionsOrgBilling := new(ActionBilling)
+       resp, err := s.client.Do(ctx, req, actionsOrgBilling)
+       return actionsOrgBilling, resp, err
+}
+
+// GetPackagesBillingOrg returns the free and paid storage used for GitHub Packages in gigabytes for an Org.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/billing#get-github-packages-billing-for-an-organization
+func (s *BillingService) GetPackagesBillingOrg(ctx context.Context, org string) (*PackageBilling, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/settings/billing/packages", org)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       packagesOrgBilling := new(PackageBilling)
+       resp, err := s.client.Do(ctx, req, packagesOrgBilling)
+       return packagesOrgBilling, resp, err
+}
+
+// GetStorageBillingOrg returns the estimated paid and estimated total storage used for GitHub Actions
+// and GitHub Packages in gigabytes for an Org.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/billing#get-shared-storage-billing-for-an-organization
+func (s *BillingService) GetStorageBillingOrg(ctx context.Context, org string) (*StorageBilling, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/settings/billing/shared-storage", org)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       storageOrgBilling := new(StorageBilling)
+       resp, err := s.client.Do(ctx, req, storageOrgBilling)
+       return storageOrgBilling, resp, err
+}
+
+// GetActionsBillingUser returns the summary of the free and paid GitHub Actions minutes used for a user.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/billing#get-github-actions-billing-for-a-user
+func (s *BillingService) GetActionsBillingUser(ctx context.Context, user string) (*ActionBilling, *Response, error) {
+       u := fmt.Sprintf("users/%v/settings/billing/actions", user)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       actionsUserBilling := new(ActionBilling)
+       resp, err := s.client.Do(ctx, req, actionsUserBilling)
+       return actionsUserBilling, resp, err
+}
+
+// GetPackagesBillingUser returns the free and paid storage used for GitHub Packages in gigabytes for a user.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/billing#get-github-packages-billing-for-an-organization
+func (s *BillingService) GetPackagesBillingUser(ctx context.Context, user string) (*PackageBilling, *Response, error) {
+       u := fmt.Sprintf("users/%v/settings/billing/packages", user)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       packagesUserBilling := new(PackageBilling)
+       resp, err := s.client.Do(ctx, req, packagesUserBilling)
+       return packagesUserBilling, resp, err
+}
+
+// GetStorageBillingUser returns the estimated paid and estimated total storage used for GitHub Actions
+// and GitHub Packages in gigabytes for a user.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/billing#get-shared-storage-billing-for-a-user
+func (s *BillingService) GetStorageBillingUser(ctx context.Context, user string) (*StorageBilling, *Response, error) {
+       u := fmt.Sprintf("users/%v/settings/billing/shared-storage", user)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       storageUserBilling := new(StorageBilling)
+       resp, err := s.client.Do(ctx, req, storageUserBilling)
+       return storageUserBilling, resp, err
+}
diff --git a/vendor/github.com/google/go-github/v37/github/checks.go b/vendor/github.com/google/go-github/v37/github/checks.go
new file mode 100644 (file)
index 0000000..cb8b847
--- /dev/null
@@ -0,0 +1,410 @@
+// Copyright 2018 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ChecksService provides access to the Checks API in the
+// GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/
+type ChecksService service
+
+// CheckRun represents a GitHub check run on a repository associated with a GitHub app.
+type CheckRun struct {
+       ID           *int64          `json:"id,omitempty"`
+       NodeID       *string         `json:"node_id,omitempty"`
+       HeadSHA      *string         `json:"head_sha,omitempty"`
+       ExternalID   *string         `json:"external_id,omitempty"`
+       URL          *string         `json:"url,omitempty"`
+       HTMLURL      *string         `json:"html_url,omitempty"`
+       DetailsURL   *string         `json:"details_url,omitempty"`
+       Status       *string         `json:"status,omitempty"`
+       Conclusion   *string         `json:"conclusion,omitempty"`
+       StartedAt    *Timestamp      `json:"started_at,omitempty"`
+       CompletedAt  *Timestamp      `json:"completed_at,omitempty"`
+       Output       *CheckRunOutput `json:"output,omitempty"`
+       Name         *string         `json:"name,omitempty"`
+       CheckSuite   *CheckSuite     `json:"check_suite,omitempty"`
+       App          *App            `json:"app,omitempty"`
+       PullRequests []*PullRequest  `json:"pull_requests,omitempty"`
+}
+
+// CheckRunOutput represents the output of a CheckRun.
+type CheckRunOutput struct {
+       Title            *string               `json:"title,omitempty"`
+       Summary          *string               `json:"summary,omitempty"`
+       Text             *string               `json:"text,omitempty"`
+       AnnotationsCount *int                  `json:"annotations_count,omitempty"`
+       AnnotationsURL   *string               `json:"annotations_url,omitempty"`
+       Annotations      []*CheckRunAnnotation `json:"annotations,omitempty"`
+       Images           []*CheckRunImage      `json:"images,omitempty"`
+}
+
+// CheckRunAnnotation represents an annotation object for a CheckRun output.
+type CheckRunAnnotation struct {
+       Path            *string `json:"path,omitempty"`
+       StartLine       *int    `json:"start_line,omitempty"`
+       EndLine         *int    `json:"end_line,omitempty"`
+       StartColumn     *int    `json:"start_column,omitempty"`
+       EndColumn       *int    `json:"end_column,omitempty"`
+       AnnotationLevel *string `json:"annotation_level,omitempty"`
+       Message         *string `json:"message,omitempty"`
+       Title           *string `json:"title,omitempty"`
+       RawDetails      *string `json:"raw_details,omitempty"`
+}
+
+// CheckRunImage represents an image object for a CheckRun output.
+type CheckRunImage struct {
+       Alt      *string `json:"alt,omitempty"`
+       ImageURL *string `json:"image_url,omitempty"`
+       Caption  *string `json:"caption,omitempty"`
+}
+
+// CheckSuite represents a suite of check runs.
+type CheckSuite struct {
+       ID           *int64         `json:"id,omitempty"`
+       NodeID       *string        `json:"node_id,omitempty"`
+       HeadBranch   *string        `json:"head_branch,omitempty"`
+       HeadSHA      *string        `json:"head_sha,omitempty"`
+       URL          *string        `json:"url,omitempty"`
+       BeforeSHA    *string        `json:"before,omitempty"`
+       AfterSHA     *string        `json:"after,omitempty"`
+       Status       *string        `json:"status,omitempty"`
+       Conclusion   *string        `json:"conclusion,omitempty"`
+       App          *App           `json:"app,omitempty"`
+       Repository   *Repository    `json:"repository,omitempty"`
+       PullRequests []*PullRequest `json:"pull_requests,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       HeadCommit *Commit `json:"head_commit,omitempty"`
+}
+
+func (c CheckRun) String() string {
+       return Stringify(c)
+}
+
+func (c CheckSuite) String() string {
+       return Stringify(c)
+}
+
+// GetCheckRun gets a check-run for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#get-a-check-run
+func (s *ChecksService) GetCheckRun(ctx context.Context, owner, repo string, checkRunID int64) (*CheckRun, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/check-runs/%v", owner, repo, checkRunID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       checkRun := new(CheckRun)
+       resp, err := s.client.Do(ctx, req, checkRun)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return checkRun, resp, nil
+}
+
+// GetCheckSuite gets a single check suite.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#get-a-check-suite
+func (s *ChecksService) GetCheckSuite(ctx context.Context, owner, repo string, checkSuiteID int64) (*CheckSuite, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/check-suites/%v", owner, repo, checkSuiteID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       checkSuite := new(CheckSuite)
+       resp, err := s.client.Do(ctx, req, checkSuite)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return checkSuite, resp, nil
+}
+
+// CreateCheckRunOptions sets up parameters needed to create a CheckRun.
+type CreateCheckRunOptions struct {
+       Name        string            `json:"name"`                   // The name of the check (e.g., "code-coverage"). (Required.)
+       HeadSHA     string            `json:"head_sha"`               // The SHA of the commit. (Required.)
+       DetailsURL  *string           `json:"details_url,omitempty"`  // The URL of the integrator's site that has the full details of the check. (Optional.)
+       ExternalID  *string           `json:"external_id,omitempty"`  // A reference for the run on the integrator's system. (Optional.)
+       Status      *string           `json:"status,omitempty"`       // The current status. Can be one of "queued", "in_progress", or "completed". Default: "queued". (Optional.)
+       Conclusion  *string           `json:"conclusion,omitempty"`   // Can be one of "success", "failure", "neutral", "cancelled", "skipped", "timed_out", or "action_required". (Optional. Required if you provide a status of "completed".)
+       StartedAt   *Timestamp        `json:"started_at,omitempty"`   // The time that the check run began. (Optional.)
+       CompletedAt *Timestamp        `json:"completed_at,omitempty"` // The time the check completed. (Optional. Required if you provide conclusion.)
+       Output      *CheckRunOutput   `json:"output,omitempty"`       // Provide descriptive details about the run. (Optional)
+       Actions     []*CheckRunAction `json:"actions,omitempty"`      // Possible further actions the integrator can perform, which a user may trigger. (Optional.)
+}
+
+// CheckRunAction exposes further actions the integrator can perform, which a user may trigger.
+type CheckRunAction struct {
+       Label       string `json:"label"`       // The text to be displayed on a button in the web UI. The maximum size is 20 characters. (Required.)
+       Description string `json:"description"` // A short explanation of what this action would do. The maximum size is 40 characters. (Required.)
+       Identifier  string `json:"identifier"`  // A reference for the action on the integrator's system. The maximum size is 20 characters. (Required.)
+}
+
+// CreateCheckRun creates a check run for repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#create-a-check-run
+func (s *ChecksService) CreateCheckRun(ctx context.Context, owner, repo string, opts CreateCheckRunOptions) (*CheckRun, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/check-runs", owner, repo)
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       checkRun := new(CheckRun)
+       resp, err := s.client.Do(ctx, req, checkRun)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return checkRun, resp, nil
+}
+
+// UpdateCheckRunOptions sets up parameters needed to update a CheckRun.
+type UpdateCheckRunOptions struct {
+       Name        string            `json:"name"`                   // The name of the check (e.g., "code-coverage"). (Required.)
+       DetailsURL  *string           `json:"details_url,omitempty"`  // The URL of the integrator's site that has the full details of the check. (Optional.)
+       ExternalID  *string           `json:"external_id,omitempty"`  // A reference for the run on the integrator's system. (Optional.)
+       Status      *string           `json:"status,omitempty"`       // The current status. Can be one of "queued", "in_progress", or "completed". Default: "queued". (Optional.)
+       Conclusion  *string           `json:"conclusion,omitempty"`   // Can be one of "success", "failure", "neutral", "cancelled", "skipped", "timed_out", or "action_required". (Optional. Required if you provide a status of "completed".)
+       CompletedAt *Timestamp        `json:"completed_at,omitempty"` // The time the check completed. (Optional. Required if you provide conclusion.)
+       Output      *CheckRunOutput   `json:"output,omitempty"`       // Provide descriptive details about the run. (Optional)
+       Actions     []*CheckRunAction `json:"actions,omitempty"`      // Possible further actions the integrator can perform, which a user may trigger. (Optional.)
+}
+
+// UpdateCheckRun updates a check run for a specific commit in a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#update-a-check-run
+func (s *ChecksService) UpdateCheckRun(ctx context.Context, owner, repo string, checkRunID int64, opts UpdateCheckRunOptions) (*CheckRun, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/check-runs/%v", owner, repo, checkRunID)
+       req, err := s.client.NewRequest("PATCH", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       checkRun := new(CheckRun)
+       resp, err := s.client.Do(ctx, req, checkRun)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return checkRun, resp, nil
+}
+
+// ListCheckRunAnnotations lists the annotations for a check run.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#list-check-run-annotations
+func (s *ChecksService) ListCheckRunAnnotations(ctx context.Context, owner, repo string, checkRunID int64, opts *ListOptions) ([]*CheckRunAnnotation, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/check-runs/%v/annotations", owner, repo, checkRunID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var checkRunAnnotations []*CheckRunAnnotation
+       resp, err := s.client.Do(ctx, req, &checkRunAnnotations)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return checkRunAnnotations, resp, nil
+}
+
+// ListCheckRunsOptions represents parameters to list check runs.
+type ListCheckRunsOptions struct {
+       CheckName *string `url:"check_name,omitempty"` // Returns check runs with the specified name.
+       Status    *string `url:"status,omitempty"`     // Returns check runs with the specified status. Can be one of "queued", "in_progress", or "completed".
+       Filter    *string `url:"filter,omitempty"`     // Filters check runs by their completed_at timestamp. Can be one of "latest" (returning the most recent check runs) or "all". Default: "latest"
+
+       ListOptions
+}
+
+// ListCheckRunsResults represents the result of a check run list.
+type ListCheckRunsResults struct {
+       Total     *int        `json:"total_count,omitempty"`
+       CheckRuns []*CheckRun `json:"check_runs,omitempty"`
+}
+
+// ListCheckRunsForRef lists check runs for a specific ref.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#list-check-runs-for-a-git-reference
+func (s *ChecksService) ListCheckRunsForRef(ctx context.Context, owner, repo, ref string, opts *ListCheckRunsOptions) (*ListCheckRunsResults, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v/check-runs", owner, repo, refURLEscape(ref))
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var checkRunResults *ListCheckRunsResults
+       resp, err := s.client.Do(ctx, req, &checkRunResults)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return checkRunResults, resp, nil
+}
+
+// ListCheckRunsCheckSuite lists check runs for a check suite.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#list-check-runs-in-a-check-suite
+func (s *ChecksService) ListCheckRunsCheckSuite(ctx context.Context, owner, repo string, checkSuiteID int64, opts *ListCheckRunsOptions) (*ListCheckRunsResults, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/check-suites/%v/check-runs", owner, repo, checkSuiteID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var checkRunResults *ListCheckRunsResults
+       resp, err := s.client.Do(ctx, req, &checkRunResults)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return checkRunResults, resp, nil
+}
+
+// ListCheckSuiteOptions represents parameters to list check suites.
+type ListCheckSuiteOptions struct {
+       CheckName *string `url:"check_name,omitempty"` // Filters checks suites by the name of the check run.
+       AppID     *int    `url:"app_id,omitempty"`     // Filters check suites by GitHub App id.
+
+       ListOptions
+}
+
+// ListCheckSuiteResults represents the result of a check run list.
+type ListCheckSuiteResults struct {
+       Total       *int          `json:"total_count,omitempty"`
+       CheckSuites []*CheckSuite `json:"check_suites,omitempty"`
+}
+
+// ListCheckSuitesForRef lists check suite for a specific ref.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#list-check-suites-for-a-git-reference
+func (s *ChecksService) ListCheckSuitesForRef(ctx context.Context, owner, repo, ref string, opts *ListCheckSuiteOptions) (*ListCheckSuiteResults, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v/check-suites", owner, repo, refURLEscape(ref))
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var checkSuiteResults *ListCheckSuiteResults
+       resp, err := s.client.Do(ctx, req, &checkSuiteResults)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return checkSuiteResults, resp, nil
+}
+
+// AutoTriggerCheck enables or disables automatic creation of CheckSuite events upon pushes to the repository.
+type AutoTriggerCheck struct {
+       AppID   *int64 `json:"app_id,omitempty"`  // The id of the GitHub App. (Required.)
+       Setting *bool  `json:"setting,omitempty"` // Set to "true" to enable automatic creation of CheckSuite events upon pushes to the repository, or "false" to disable them. Default: "true" (Required.)
+}
+
+// CheckSuitePreferenceOptions set options for check suite preferences for a repository.
+type CheckSuitePreferenceOptions struct {
+       AutoTriggerChecks []*AutoTriggerCheck `json:"auto_trigger_checks,omitempty"` // A slice of auto trigger checks that can be set for a check suite in a repository.
+}
+
+// CheckSuitePreferenceResults represents the results of the preference set operation.
+type CheckSuitePreferenceResults struct {
+       Preferences *PreferenceList `json:"preferences,omitempty"`
+       Repository  *Repository     `json:"repository,omitempty"`
+}
+
+// PreferenceList represents a list of auto trigger checks for repository
+type PreferenceList struct {
+       AutoTriggerChecks []*AutoTriggerCheck `json:"auto_trigger_checks,omitempty"` // A slice of auto trigger checks that can be set for a check suite in a repository.
+}
+
+// SetCheckSuitePreferences changes the default automatic flow when creating check suites.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#update-repository-preferences-for-check-suites
+func (s *ChecksService) SetCheckSuitePreferences(ctx context.Context, owner, repo string, opts CheckSuitePreferenceOptions) (*CheckSuitePreferenceResults, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/check-suites/preferences", owner, repo)
+       req, err := s.client.NewRequest("PATCH", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var checkSuitePrefResults *CheckSuitePreferenceResults
+       resp, err := s.client.Do(ctx, req, &checkSuitePrefResults)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return checkSuitePrefResults, resp, nil
+}
+
+// CreateCheckSuiteOptions sets up parameters to manually create a check suites
+type CreateCheckSuiteOptions struct {
+       HeadSHA    string  `json:"head_sha"`              // The sha of the head commit. (Required.)
+       HeadBranch *string `json:"head_branch,omitempty"` // The name of the head branch where the code changes are implemented.
+}
+
+// CreateCheckSuite manually creates a check suite for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#create-a-check-suite
+func (s *ChecksService) CreateCheckSuite(ctx context.Context, owner, repo string, opts CreateCheckSuiteOptions) (*CheckSuite, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/check-suites", owner, repo)
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       checkSuite := new(CheckSuite)
+       resp, err := s.client.Do(ctx, req, checkSuite)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return checkSuite, resp, nil
+}
+
+// ReRequestCheckSuite triggers GitHub to rerequest an existing check suite, without pushing new code to a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/checks/#rerequest-a-check-suite
+func (s *ChecksService) ReRequestCheckSuite(ctx context.Context, owner, repo string, checkSuiteID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/check-suites/%v/rerequest", owner, repo, checkSuiteID)
+
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       resp, err := s.client.Do(ctx, req, nil)
+       return resp, err
+}
diff --git a/vendor/github.com/google/go-github/v37/github/code-scanning.go b/vendor/github.com/google/go-github/v37/github/code-scanning.go
new file mode 100644 (file)
index 0000000..8602c44
--- /dev/null
@@ -0,0 +1,129 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "strconv"
+       "strings"
+)
+
+// CodeScanningService handles communication with the code scanning related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/code-scanning/
+type CodeScanningService service
+
+// Tool represents the tool used to generate a GitHub Code Scanning Alert.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/code-scanning#list-code-scanning-alerts-for-a-repository
+type Tool struct {
+       Name    *string `json:"name,omitempty"`
+       GUID    *string `json:"guid,omitempty"`
+       Version *string `json:"version,omitempty"`
+}
+
+// Alert represents an individual GitHub Code Scanning Alert on a single repository.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/code-scanning#list-code-scanning-alerts-for-a-repository
+type Alert struct {
+       RuleID          *string    `json:"rule_id,omitempty"`
+       RuleSeverity    *string    `json:"rule_severity,omitempty"`
+       RuleDescription *string    `json:"rule_description,omitempty"`
+       Tool            *Tool      `json:"tool,omitempty"`
+       CreatedAt       *Timestamp `json:"created_at,omitempty"`
+       Open            *bool      `json:"open,omitempty"`
+       ClosedBy        *User      `json:"closed_by,omitempty"`
+       ClosedAt        *Timestamp `json:"closed_at,omitempty"`
+       URL             *string    `json:"url,omitempty"`
+       HTMLURL         *string    `json:"html_url,omitempty"`
+}
+
+// ID returns the ID associated with an alert. It is the number at the end of the security alert's URL.
+func (a *Alert) ID() int64 {
+       if a == nil {
+               return 0
+       }
+
+       s := a.GetHTMLURL()
+
+       // Check for an ID to parse at the end of the url
+       if i := strings.LastIndex(s, "/"); i >= 0 {
+               s = s[i+1:]
+       }
+
+       // Return the alert ID as a 64-bit integer. Unable to convert or out of range returns 0.
+       id, err := strconv.ParseInt(s, 10, 64)
+       if err != nil {
+               return 0
+       }
+
+       return id
+}
+
+// AlertListOptions specifies optional parameters to the CodeScanningService.ListAlerts
+// method.
+type AlertListOptions struct {
+       // State of the code scanning alerts to list. Set to closed to list only closed code scanning alerts. Default: open
+       State string `url:"state,omitempty"`
+
+       // Return code scanning alerts for a specific branch reference. The ref must be formatted as heads/<branch name>.
+       Ref string `url:"ref,omitempty"`
+}
+
+// ListAlertsForRepo lists code scanning alerts for a repository.
+//
+// Lists all open code scanning alerts for the default branch (usually master) and protected branches in a repository.
+// You must use an access token with the security_events scope to use this endpoint. GitHub Apps must have the security_events
+// read permission to use this endpoint.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/code-scanning/#list-code-scanning-alerts-for-a-repository
+func (s *CodeScanningService) ListAlertsForRepo(ctx context.Context, owner, repo string, opts *AlertListOptions) ([]*Alert, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/code-scanning/alerts", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var alerts []*Alert
+       resp, err := s.client.Do(ctx, req, &alerts)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return alerts, resp, nil
+}
+
+// GetAlert gets a single code scanning alert for a repository.
+//
+// You must use an access token with the security_events scope to use this endpoint.
+// GitHub Apps must have the security_events read permission to use this endpoint.
+//
+// The security alert_id is the number at the end of the security alert's URL.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/code-scanning/#get-a-code-scanning-alert
+func (s *CodeScanningService) GetAlert(ctx context.Context, owner, repo string, id int64) (*Alert, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/code-scanning/alerts/%v", owner, repo, id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       a := new(Alert)
+       resp, err := s.client.Do(ctx, req, a)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return a, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/doc.go b/vendor/github.com/google/go-github/v37/github/doc.go
new file mode 100644 (file)
index 0000000..bd2e3ea
--- /dev/null
@@ -0,0 +1,188 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+/*
+Package github provides a client for using the GitHub API.
+
+Usage:
+
+       import "github.com/google/go-github/v37/github" // with go modules enabled (GO111MODULE=on or outside GOPATH)
+       import "github.com/google/go-github/github"     // with go modules disabled
+
+Construct a new GitHub client, then use the various services on the client to
+access different parts of the GitHub API. For example:
+
+       client := github.NewClient(nil)
+
+       // list all organizations for user "willnorris"
+       orgs, _, err := client.Organizations.List(ctx, "willnorris", nil)
+
+Some API methods have optional parameters that can be passed. For example:
+
+       client := github.NewClient(nil)
+
+       // list public repositories for org "github"
+       opt := &github.RepositoryListByOrgOptions{Type: "public"}
+       repos, _, err := client.Repositories.ListByOrg(ctx, "github", opt)
+
+The services of a client divide the API into logical chunks and correspond to
+the structure of the GitHub API documentation at
+https://docs.github.com/en/free-pro-team@latest/rest/reference/.
+
+NOTE: Using the https://godoc.org/context package, one can easily
+pass cancelation signals and deadlines to various services of the client for
+handling a request. In case there is no context available, then context.Background()
+can be used as a starting point.
+
+For more sample code snippets, head over to the https://github.com/google/go-github/tree/master/example directory.
+
+Authentication
+
+The go-github library does not directly handle authentication. Instead, when
+creating a new client, pass an http.Client that can handle authentication for
+you. The easiest and recommended way to do this is using the golang.org/x/oauth2
+library, but you can always use any other library that provides an http.Client.
+If you have an OAuth2 access token (for example, a personal API token), you can
+use it with the oauth2 library using:
+
+       import "golang.org/x/oauth2"
+
+       func main() {
+               ctx := context.Background()
+               ts := oauth2.StaticTokenSource(
+                       &oauth2.Token{AccessToken: "... your access token ..."},
+               )
+               tc := oauth2.NewClient(ctx, ts)
+
+               client := github.NewClient(tc)
+
+               // list all repositories for the authenticated user
+               repos, _, err := client.Repositories.List(ctx, "", nil)
+       }
+
+Note that when using an authenticated Client, all calls made by the client will
+include the specified OAuth token. Therefore, authenticated clients should
+almost never be shared between different users.
+
+See the oauth2 docs for complete instructions on using that library.
+
+For API methods that require HTTP Basic Authentication, use the
+BasicAuthTransport.
+
+GitHub Apps authentication can be provided by the
+https://github.com/bradleyfalzon/ghinstallation package.
+
+       import "github.com/bradleyfalzon/ghinstallation"
+
+       func main() {
+               // Wrap the shared transport for use with the integration ID 1 authenticating with installation ID 99.
+               itr, err := ghinstallation.NewKeyFromFile(http.DefaultTransport, 1, 99, "2016-10-19.private-key.pem")
+               if err != nil {
+                       // Handle error.
+               }
+
+               // Use installation transport with client
+               client := github.NewClient(&http.Client{Transport: itr})
+
+               // Use client...
+       }
+
+Rate Limiting
+
+GitHub imposes a rate limit on all API clients. Unauthenticated clients are
+limited to 60 requests per hour, while authenticated clients can make up to
+5,000 requests per hour. The Search API has a custom rate limit. Unauthenticated
+clients are limited to 10 requests per minute, while authenticated clients
+can make up to 30 requests per minute. To receive the higher rate limit when
+making calls that are not issued on behalf of a user,
+use UnauthenticatedRateLimitedTransport.
+
+The returned Response.Rate value contains the rate limit information
+from the most recent API call. If a recent enough response isn't
+available, you can use RateLimits to fetch the most up-to-date rate
+limit data for the client.
+
+To detect an API rate limit error, you can check if its type is *github.RateLimitError:
+
+       repos, _, err := client.Repositories.List(ctx, "", nil)
+       if _, ok := err.(*github.RateLimitError); ok {
+               log.Println("hit rate limit")
+       }
+
+Learn more about GitHub rate limiting at
+https://docs.github.com/en/free-pro-team@latest/rest/reference/#rate-limiting.
+
+Accepted Status
+
+Some endpoints may return a 202 Accepted status code, meaning that the
+information required is not yet ready and was scheduled to be gathered on
+the GitHub side. Methods known to behave like this are documented specifying
+this behavior.
+
+To detect this condition of error, you can check if its type is
+*github.AcceptedError:
+
+       stats, _, err := client.Repositories.ListContributorsStats(ctx, org, repo)
+       if _, ok := err.(*github.AcceptedError); ok {
+               log.Println("scheduled on GitHub side")
+       }
+
+Conditional Requests
+
+The GitHub API has good support for conditional requests which will help
+prevent you from burning through your rate limit, as well as help speed up your
+application. go-github does not handle conditional requests directly, but is
+instead designed to work with a caching http.Transport. We recommend using
+https://github.com/gregjones/httpcache for that.
+
+Learn more about GitHub conditional requests at
+https://docs.github.com/en/free-pro-team@latest/rest/reference/#conditional-requests.
+
+Creating and Updating Resources
+
+All structs for GitHub resources use pointer values for all non-repeated fields.
+This allows distinguishing between unset fields and those set to a zero-value.
+Helper functions have been provided to easily create these pointers for string,
+bool, and int values. For example:
+
+       // create a new private repository named "foo"
+       repo := &github.Repository{
+               Name:    github.String("foo"),
+               Private: github.Bool(true),
+       }
+       client.Repositories.Create(ctx, "", repo)
+
+Users who have worked with protocol buffers should find this pattern familiar.
+
+Pagination
+
+All requests for resource collections (repos, pull requests, issues, etc.)
+support pagination. Pagination options are described in the
+github.ListOptions struct and passed to the list methods directly or as an
+embedded type of a more specific list options struct (for example
+github.PullRequestListOptions). Pages information is available via the
+github.Response struct.
+
+       client := github.NewClient(nil)
+
+       opt := &github.RepositoryListByOrgOptions{
+               ListOptions: github.ListOptions{PerPage: 10},
+       }
+       // get all pages of results
+       var allRepos []*github.Repository
+       for {
+               repos, resp, err := client.Repositories.ListByOrg(ctx, "github", opt)
+               if err != nil {
+                       return err
+               }
+               allRepos = append(allRepos, repos...)
+               if resp.NextPage == 0 {
+                       break
+               }
+               opt.Page = resp.NextPage
+       }
+
+*/
+package github
diff --git a/vendor/github.com/google/go-github/v37/github/enterprise.go b/vendor/github.com/google/go-github/v37/github/enterprise.go
new file mode 100644 (file)
index 0000000..f6a5af8
--- /dev/null
@@ -0,0 +1,12 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+// EnterpriseService provides access to the enterprise related functions
+// in the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/enterprise-admin/
+type EnterpriseService service
diff --git a/vendor/github.com/google/go-github/v37/github/enterprise_actions_runners.go b/vendor/github.com/google/go-github/v37/github/enterprise_actions_runners.go
new file mode 100644 (file)
index 0000000..d2758fe
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// CreateRegistrationToken creates a token that can be used to add a self-hosted runner.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/enterprise-admin/#create-a-registration-token-for-an-enterprise
+func (s *EnterpriseService) CreateRegistrationToken(ctx context.Context, enterprise string) (*RegistrationToken, *Response, error) {
+       u := fmt.Sprintf("enterprises/%v/actions/runners/registration-token", enterprise)
+
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       registrationToken := new(RegistrationToken)
+       resp, err := s.client.Do(ctx, req, registrationToken)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return registrationToken, resp, nil
+}
+
+// ListRunners lists all the self-hosted runners for a enterprise.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/enterprise-admin/#list-self-hosted-runners-for-an-enterprise
+func (s *EnterpriseService) ListRunners(ctx context.Context, enterprise string, opts *ListOptions) (*Runners, *Response, error) {
+       u := fmt.Sprintf("enterprises/%v/actions/runners", enterprise)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       runners := &Runners{}
+       resp, err := s.client.Do(ctx, req, &runners)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return runners, resp, nil
+}
+
+// RemoveRunner forces the removal of a self-hosted runner from an enterprise using the runner id.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/enterprise-admin/#delete-a-self-hosted-runner-from-an-enterprise
+func (s *EnterpriseService) RemoveRunner(ctx context.Context, enterprise string, runnerID int64) (*Response, error) {
+       u := fmt.Sprintf("enterprises/%v/actions/runners/%v", enterprise, runnerID)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/enterprise_audit_log.go b/vendor/github.com/google/go-github/v37/github/enterprise_audit_log.go
new file mode 100644 (file)
index 0000000..b889a7e
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2021 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// GetAuditLog gets the audit-log entries for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/enterprise-admin#get-the-audit-log-for-an-enterprise
+func (s *EnterpriseService) GetAuditLog(ctx context.Context, enterprise string, opts *GetAuditLogOptions) ([]*AuditEntry, *Response, error) {
+       u := fmt.Sprintf("enterprises/%v/audit-log", enterprise)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var auditEntries []*AuditEntry
+       resp, err := s.client.Do(ctx, req, &auditEntries)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return auditEntries, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/event.go b/vendor/github.com/google/go-github/v37/github/event.go
new file mode 100644 (file)
index 0000000..4b87142
--- /dev/null
@@ -0,0 +1,146 @@
+// Copyright 2018 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "encoding/json"
+       "time"
+)
+
+// Event represents a GitHub event.
+type Event struct {
+       Type       *string          `json:"type,omitempty"`
+       Public     *bool            `json:"public,omitempty"`
+       RawPayload *json.RawMessage `json:"payload,omitempty"`
+       Repo       *Repository      `json:"repo,omitempty"`
+       Actor      *User            `json:"actor,omitempty"`
+       Org        *Organization    `json:"org,omitempty"`
+       CreatedAt  *time.Time       `json:"created_at,omitempty"`
+       ID         *string          `json:"id,omitempty"`
+}
+
+func (e Event) String() string {
+       return Stringify(e)
+}
+
+// ParsePayload parses the event payload. For recognized event types,
+// a value of the corresponding struct type will be returned.
+func (e *Event) ParsePayload() (payload interface{}, err error) {
+       switch *e.Type {
+       case "CheckRunEvent":
+               payload = &CheckRunEvent{}
+       case "CheckSuiteEvent":
+               payload = &CheckSuiteEvent{}
+       case "CommitCommentEvent":
+               payload = &CommitCommentEvent{}
+       case "ContentReferenceEvent":
+               payload = &ContentReferenceEvent{}
+       case "CreateEvent":
+               payload = &CreateEvent{}
+       case "DeleteEvent":
+               payload = &DeleteEvent{}
+       case "DeployKeyEvent":
+               payload = &DeployKeyEvent{}
+       case "DeploymentEvent":
+               payload = &DeploymentEvent{}
+       case "DeploymentStatusEvent":
+               payload = &DeploymentStatusEvent{}
+       case "ForkEvent":
+               payload = &ForkEvent{}
+       case "GitHubAppAuthorizationEvent":
+               payload = &GitHubAppAuthorizationEvent{}
+       case "GollumEvent":
+               payload = &GollumEvent{}
+       case "InstallationEvent":
+               payload = &InstallationEvent{}
+       case "InstallationRepositoriesEvent":
+               payload = &InstallationRepositoriesEvent{}
+       case "IssueCommentEvent":
+               payload = &IssueCommentEvent{}
+       case "IssuesEvent":
+               payload = &IssuesEvent{}
+       case "LabelEvent":
+               payload = &LabelEvent{}
+       case "MarketplacePurchaseEvent":
+               payload = &MarketplacePurchaseEvent{}
+       case "MemberEvent":
+               payload = &MemberEvent{}
+       case "MembershipEvent":
+               payload = &MembershipEvent{}
+       case "MetaEvent":
+               payload = &MetaEvent{}
+       case "MilestoneEvent":
+               payload = &MilestoneEvent{}
+       case "OrganizationEvent":
+               payload = &OrganizationEvent{}
+       case "OrgBlockEvent":
+               payload = &OrgBlockEvent{}
+       case "PackageEvent":
+               payload = &PackageEvent{}
+       case "PageBuildEvent":
+               payload = &PageBuildEvent{}
+       case "PingEvent":
+               payload = &PingEvent{}
+       case "ProjectEvent":
+               payload = &ProjectEvent{}
+       case "ProjectCardEvent":
+               payload = &ProjectCardEvent{}
+       case "ProjectColumnEvent":
+               payload = &ProjectColumnEvent{}
+       case "PublicEvent":
+               payload = &PublicEvent{}
+       case "PullRequestEvent":
+               payload = &PullRequestEvent{}
+       case "PullRequestReviewEvent":
+               payload = &PullRequestReviewEvent{}
+       case "PullRequestReviewCommentEvent":
+               payload = &PullRequestReviewCommentEvent{}
+       case "PullRequestTargetEvent":
+               payload = &PullRequestTargetEvent{}
+       case "PushEvent":
+               payload = &PushEvent{}
+       case "ReleaseEvent":
+               payload = &ReleaseEvent{}
+       case "RepositoryEvent":
+               payload = &RepositoryEvent{}
+       case "RepositoryDispatchEvent":
+               payload = &RepositoryDispatchEvent{}
+       case "RepositoryVulnerabilityAlertEvent":
+               payload = &RepositoryVulnerabilityAlertEvent{}
+       case "StarEvent":
+               payload = &StarEvent{}
+       case "StatusEvent":
+               payload = &StatusEvent{}
+       case "TeamEvent":
+               payload = &TeamEvent{}
+       case "TeamAddEvent":
+               payload = &TeamAddEvent{}
+       case "UserEvent":
+               payload = &UserEvent{}
+       case "WatchEvent":
+               payload = &WatchEvent{}
+       case "WorkflowDispatchEvent":
+               payload = &WorkflowDispatchEvent{}
+       case "WorkflowRunEvent":
+               payload = &WorkflowRunEvent{}
+       }
+       err = json.Unmarshal(*e.RawPayload, &payload)
+       return payload, err
+}
+
+// Payload returns the parsed event payload. For recognized event types,
+// a value of the corresponding struct type will be returned.
+//
+// Deprecated: Use ParsePayload instead, which returns an error
+// rather than panics if JSON unmarshaling raw payload fails.
+func (e *Event) Payload() (payload interface{}) {
+       var err error
+       payload, err = e.ParsePayload()
+       if err != nil {
+               panic(err)
+       }
+       return payload
+}
diff --git a/vendor/github.com/google/go-github/v37/github/event_types.go b/vendor/github.com/google/go-github/v37/github/event_types.go
new file mode 100644 (file)
index 0000000..f99a129
--- /dev/null
@@ -0,0 +1,1098 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// These event types are shared between the Events API and used as Webhook payloads.
+
+package github
+
+import "encoding/json"
+
+// RequestedAction is included in a CheckRunEvent when a user has invoked an action,
+// i.e. when the CheckRunEvent's Action field is "requested_action".
+type RequestedAction struct {
+       Identifier string `json:"identifier"` // The integrator reference of the action requested by the user.
+}
+
+// CheckRunEvent is triggered when a check run is "created", "completed", or "rerequested".
+// The Webhook event name is "check_run".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#check_run
+type CheckRunEvent struct {
+       CheckRun *CheckRun `json:"check_run,omitempty"`
+       // The action performed. Possible values are: "created", "completed", "rerequested" or "requested_action".
+       Action *string `json:"action,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Org          *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+
+       // The action requested by the user. Populated when the Action is "requested_action".
+       RequestedAction *RequestedAction `json:"requested_action,omitempty"` //
+}
+
+// CheckSuiteEvent is triggered when a check suite is "completed", "requested", or "rerequested".
+// The Webhook event name is "check_suite".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#check_suite
+type CheckSuiteEvent struct {
+       CheckSuite *CheckSuite `json:"check_suite,omitempty"`
+       // The action performed. Possible values are: "completed", "requested" or "rerequested".
+       Action *string `json:"action,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Org          *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// CommitCommentEvent is triggered when a commit comment is created.
+// The Webhook event name is "commit_comment".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#commit_comment
+type CommitCommentEvent struct {
+       Comment *RepositoryComment `json:"comment,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Action       *string       `json:"action,omitempty"`
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// ContentReferenceEvent is triggered when the body or comment of an issue or
+// pull request includes a URL that matches a configured content reference
+// domain.
+// The Webhook event name is "content_reference".
+//
+// GitHub API docs: https://developer.github.com/webhooks/event-payloads/#content_reference
+type ContentReferenceEvent struct {
+       Action           *string           `json:"action,omitempty"`
+       ContentReference *ContentReference `json:"content_reference,omitempty"`
+       Repo             *Repository       `json:"repository,omitempty"`
+       Sender           *User             `json:"sender,omitempty"`
+       Installation     *Installation     `json:"installation,omitempty"`
+}
+
+// CreateEvent represents a created repository, branch, or tag.
+// The Webhook event name is "create".
+//
+// Note: webhooks will not receive this event for created repositories.
+// Additionally, webhooks will not receive this event for tags if more
+// than three tags are pushed at once.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/github-event-types#createevent
+type CreateEvent struct {
+       Ref *string `json:"ref,omitempty"`
+       // RefType is the object that was created. Possible values are: "repository", "branch", "tag".
+       RefType      *string `json:"ref_type,omitempty"`
+       MasterBranch *string `json:"master_branch,omitempty"`
+       Description  *string `json:"description,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       PusherType   *string       `json:"pusher_type,omitempty"`
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// DeleteEvent represents a deleted branch or tag.
+// The Webhook event name is "delete".
+//
+// Note: webhooks will not receive this event for tags if more than three tags
+// are deleted at once.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/github-event-types#deleteevent
+type DeleteEvent struct {
+       Ref *string `json:"ref,omitempty"`
+       // RefType is the object that was deleted. Possible values are: "branch", "tag".
+       RefType *string `json:"ref_type,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       PusherType   *string       `json:"pusher_type,omitempty"`
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// DeployKeyEvent is triggered when a deploy key is added or removed from a repository.
+// The Webhook event name is "deploy_key".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#deploy_key
+type DeployKeyEvent struct {
+       // Action is the action that was performed. Possible values are:
+       // "created" or "deleted".
+       Action *string `json:"action,omitempty"`
+
+       // The deploy key resource.
+       Key *Key `json:"key,omitempty"`
+}
+
+// DeploymentEvent represents a deployment.
+// The Webhook event name is "deployment".
+//
+// Events of this type are not visible in timelines, they are only used to trigger hooks.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#deployment
+type DeploymentEvent struct {
+       Deployment *Deployment `json:"deployment,omitempty"`
+       Repo       *Repository `json:"repository,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// DeploymentStatusEvent represents a deployment status.
+// The Webhook event name is "deployment_status".
+//
+// Events of this type are not visible in timelines, they are only used to trigger hooks.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#deployment_status
+type DeploymentStatusEvent struct {
+       Deployment       *Deployment       `json:"deployment,omitempty"`
+       DeploymentStatus *DeploymentStatus `json:"deployment_status,omitempty"`
+       Repo             *Repository       `json:"repository,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// ForkEvent is triggered when a user forks a repository.
+// The Webhook event name is "fork".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#fork
+type ForkEvent struct {
+       // Forkee is the created repository.
+       Forkee *Repository `json:"forkee,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// GitHubAppAuthorizationEvent is triggered when a user's authorization for a
+// GitHub Application is revoked.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#github_app_authorization
+type GitHubAppAuthorizationEvent struct {
+       // The action performed. Possible value is: "revoked".
+       Action *string `json:"action,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Sender *User `json:"sender,omitempty"`
+}
+
+// Page represents a single Wiki page.
+type Page struct {
+       PageName *string `json:"page_name,omitempty"`
+       Title    *string `json:"title,omitempty"`
+       Summary  *string `json:"summary,omitempty"`
+       Action   *string `json:"action,omitempty"`
+       SHA      *string `json:"sha,omitempty"`
+       HTMLURL  *string `json:"html_url,omitempty"`
+}
+
+// GollumEvent is triggered when a Wiki page is created or updated.
+// The Webhook event name is "gollum".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#gollum
+type GollumEvent struct {
+       Pages []*Page `json:"pages,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// EditChange represents the changes when an issue, pull request, or comment has
+// been edited.
+type EditChange struct {
+       Title *EditTitle `json:"title,omitempty"`
+       Body  *EditBody  `json:"body,omitempty"`
+       Base  *EditBase  `json:"base,omitempty"`
+}
+
+// EditTitle represents a pull-request title change.
+type EditTitle struct {
+       From *string `json:"from,omitempty"`
+}
+
+// EditBody represents a change of pull-request body.
+type EditBody struct {
+       From *string `json:"from,omitempty"`
+}
+
+// EditBase represents the change of a pull-request base branch.
+type EditBase struct {
+       Ref *EditRef `json:"ref,omitempty"`
+       SHA *EditSHA `json:"sha,omitempty"`
+}
+
+// EditRef represents a ref change of a pull-request.
+type EditRef struct {
+       From *string `json:"from,omitempty"`
+}
+
+// EditSHA represents a sha change of a pull-request.
+type EditSHA struct {
+       From *string `json:"from,omitempty"`
+}
+
+// ProjectChange represents the changes when a project has been edited.
+type ProjectChange struct {
+       Name *ProjectName `json:"name,omitempty"`
+       Body *ProjectBody `json:"body,omitempty"`
+}
+
+// ProjectName represents a project name change.
+type ProjectName struct {
+       From *string `json:"from,omitempty"`
+}
+
+// ProjectBody represents a project body change.
+type ProjectBody struct {
+       From *string `json:"from,omitempty"`
+}
+
+// ProjectCardChange represents the changes when a project card has been edited.
+type ProjectCardChange struct {
+       Note *ProjectCardNote `json:"note,omitempty"`
+}
+
+// ProjectCardNote represents a change of a note of a project card.
+type ProjectCardNote struct {
+       From *string `json:"from,omitempty"`
+}
+
+// ProjectColumnChange represents the changes when a project column has been edited.
+type ProjectColumnChange struct {
+       Name *ProjectColumnName `json:"name,omitempty"`
+}
+
+// ProjectColumnName represents a project column name change.
+type ProjectColumnName struct {
+       From *string `json:"from,omitempty"`
+}
+
+// TeamChange represents the changes when a team has been edited.
+type TeamChange struct {
+       Description *TeamDescription `json:"description,omitempty"`
+       Name        *TeamName        `json:"name,omitempty"`
+       Privacy     *TeamPrivacy     `json:"privacy,omitempty"`
+       Repository  *TeamRepository  `json:"repository,omitempty"`
+}
+
+// TeamDescription represents a team description change.
+type TeamDescription struct {
+       From *string `json:"from,omitempty"`
+}
+
+// TeamName represents a team name change.
+type TeamName struct {
+       From *string `json:"from,omitempty"`
+}
+
+// TeamPrivacy represents a team privacy change.
+type TeamPrivacy struct {
+       From *string `json:"from,omitempty"`
+}
+
+// TeamRepository represents a team repository permission change.
+type TeamRepository struct {
+       Permissions *TeamPermissions `json:"permissions,omitempty"`
+}
+
+// TeamPermissions represents a team permission change.
+type TeamPermissions struct {
+       From *TeamPermissionsFrom `json:"from,omitempty"`
+}
+
+// TeamPermissionsFrom represents a team permission change.
+type TeamPermissionsFrom struct {
+       Admin *bool `json:"admin,omitempty"`
+       Pull  *bool `json:"pull,omitempty"`
+       Push  *bool `json:"push,omitempty"`
+}
+
+// InstallationEvent is triggered when a GitHub App has been installed, uninstalled, suspend, unsuspended
+// or new permissions have been accepted.
+// The Webhook event name is "installation".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#installation
+type InstallationEvent struct {
+       // The action that was performed. Can be either "created", "deleted", "suspend", "unsuspend" or "new_permissions_accepted".
+       Action       *string       `json:"action,omitempty"`
+       Repositories []*Repository `json:"repositories,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+       // TODO key "requester" is not covered
+}
+
+// InstallationRepositoriesEvent is triggered when a repository is added or
+// removed from an installation. The Webhook event name is "installation_repositories".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#installation_repositories
+type InstallationRepositoriesEvent struct {
+       // The action that was performed. Can be either "added" or "removed".
+       Action              *string       `json:"action,omitempty"`
+       RepositoriesAdded   []*Repository `json:"repositories_added,omitempty"`
+       RepositoriesRemoved []*Repository `json:"repositories_removed,omitempty"`
+       RepositorySelection *string       `json:"repository_selection,omitempty"`
+       Sender              *User         `json:"sender,omitempty"`
+       Installation        *Installation `json:"installation,omitempty"`
+}
+
+// IssueCommentEvent is triggered when an issue comment is created on an issue
+// or pull request.
+// The Webhook event name is "issue_comment".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#issue_comment
+type IssueCommentEvent struct {
+       // Action is the action that was performed on the comment.
+       // Possible values are: "created", "edited", "deleted".
+       Action  *string       `json:"action,omitempty"`
+       Issue   *Issue        `json:"issue,omitempty"`
+       Comment *IssueComment `json:"comment,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Changes      *EditChange   `json:"changes,omitempty"`
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// IssuesEvent is triggered when an issue is opened, edited, deleted, transferred,
+// pinned, unpinned, closed, reopened, assigned, unassigned, labeled, unlabeled,
+// locked, unlocked, milestoned, or demilestoned.
+// The Webhook event name is "issues".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#issues
+type IssuesEvent struct {
+       // Action is the action that was performed. Possible values are: "opened",
+       // "edited", "deleted", "transferred", "pinned", "unpinned", "closed", "reopened",
+       // "assigned", "unassigned", "labeled", "unlabeled", "locked", "unlocked",
+       // "milestoned", or "demilestoned".
+       Action   *string `json:"action,omitempty"`
+       Issue    *Issue  `json:"issue,omitempty"`
+       Assignee *User   `json:"assignee,omitempty"`
+       Label    *Label  `json:"label,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Changes      *EditChange   `json:"changes,omitempty"`
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// LabelEvent is triggered when a repository's label is created, edited, or deleted.
+// The Webhook event name is "label"
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#label
+type LabelEvent struct {
+       // Action is the action that was performed. Possible values are:
+       // "created", "edited", "deleted"
+       Action *string `json:"action,omitempty"`
+       Label  *Label  `json:"label,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Changes      *EditChange   `json:"changes,omitempty"`
+       Repo         *Repository   `json:"repository,omitempty"`
+       Org          *Organization `json:"organization,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// MarketplacePurchaseEvent is triggered when a user purchases, cancels, or changes
+// their GitHub Marketplace plan.
+// Webhook event name "marketplace_purchase".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#marketplace_purchase
+type MarketplacePurchaseEvent struct {
+       // Action is the action that was performed. Possible values are:
+       // "purchased", "cancelled", "pending_change", "pending_change_cancelled", "changed".
+       Action *string `json:"action,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       EffectiveDate               *Timestamp           `json:"effective_date,omitempty"`
+       MarketplacePurchase         *MarketplacePurchase `json:"marketplace_purchase,omitempty"`
+       PreviousMarketplacePurchase *MarketplacePurchase `json:"previous_marketplace_purchase,omitempty"`
+       Sender                      *User                `json:"sender,omitempty"`
+       Installation                *Installation        `json:"installation,omitempty"`
+}
+
+// MemberEvent is triggered when a user is added as a collaborator to a repository.
+// The Webhook event name is "member".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#member
+type MemberEvent struct {
+       // Action is the action that was performed. Possible value is: "added".
+       Action *string `json:"action,omitempty"`
+       Member *User   `json:"member,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// MembershipEvent is triggered when a user is added or removed from a team.
+// The Webhook event name is "membership".
+//
+// Events of this type are not visible in timelines, they are only used to
+// trigger organization webhooks.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#membership
+type MembershipEvent struct {
+       // Action is the action that was performed. Possible values are: "added", "removed".
+       Action *string `json:"action,omitempty"`
+       // Scope is the scope of the membership. Possible value is: "team".
+       Scope  *string `json:"scope,omitempty"`
+       Member *User   `json:"member,omitempty"`
+       Team   *Team   `json:"team,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Org          *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// MetaEvent is triggered when the webhook that this event is configured on is deleted.
+// This event will only listen for changes to the particular hook the event is installed on.
+// Therefore, it must be selected for each hook that you'd like to receive meta events for.
+// The Webhook event name is "meta".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#meta
+type MetaEvent struct {
+       // Action is the action that was performed. Possible value is: "deleted".
+       Action *string `json:"action,omitempty"`
+       // The ID of the modified webhook.
+       HookID *int64 `json:"hook_id,omitempty"`
+       // The modified webhook.
+       // This will contain different keys based on the type of webhook it is: repository,
+       // organization, business, app, or GitHub Marketplace.
+       Hook *Hook `json:"hook,omitempty"`
+}
+
+// MilestoneEvent is triggered when a milestone is created, closed, opened, edited, or deleted.
+// The Webhook event name is "milestone".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#milestone
+type MilestoneEvent struct {
+       // Action is the action that was performed. Possible values are:
+       // "created", "closed", "opened", "edited", "deleted"
+       Action    *string    `json:"action,omitempty"`
+       Milestone *Milestone `json:"milestone,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Changes      *EditChange   `json:"changes,omitempty"`
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Org          *Organization `json:"organization,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// OrganizationEvent is triggered when an organization is deleted and renamed, and when a user is added,
+// removed, or invited to an organization.
+// Events of this type are not visible in timelines. These events are only used to trigger organization hooks.
+// Webhook event name is "organization".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#organization
+type OrganizationEvent struct {
+       // Action is the action that was performed.
+       // Possible values are: "deleted", "renamed", "member_added", "member_removed", or "member_invited".
+       Action *string `json:"action,omitempty"`
+
+       // Invitation is the invitation for the user or email if the action is "member_invited".
+       Invitation *Invitation `json:"invitation,omitempty"`
+
+       // Membership is the membership between the user and the organization.
+       // Not present when the action is "member_invited".
+       Membership *Membership `json:"membership,omitempty"`
+
+       Organization *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// OrgBlockEvent is triggered when an organization blocks or unblocks a user.
+// The Webhook event name is "org_block".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#org_block
+type OrgBlockEvent struct {
+       // Action is the action that was performed.
+       // Can be "blocked" or "unblocked".
+       Action       *string       `json:"action,omitempty"`
+       BlockedUser  *User         `json:"blocked_user,omitempty"`
+       Organization *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// PackageEvent represents activity related to GitHub Packages.
+// The Webhook event name is "package".
+//
+// This event is triggered when a GitHub Package is published or updated.
+//
+// GitHub API docs: https://developer.github.com/webhooks/event-payloads/#package
+type PackageEvent struct {
+       // Action is the action that was performed.
+       // Can be "published" or "updated".
+       Action  *string       `json:"action,omitempty"`
+       Package *Package      `json:"package,omitempty"`
+       Repo    *Repository   `json:"repository,omitempty"`
+       Org     *Organization `json:"organization,omitempty"`
+       Sender  *User         `json:"sender,omitempty"`
+}
+
+// PageBuildEvent represents an attempted build of a GitHub Pages site, whether
+// successful or not.
+// The Webhook event name is "page_build".
+//
+// This event is triggered on push to a GitHub Pages enabled branch (gh-pages
+// for project pages, master for user and organization pages).
+//
+// Events of this type are not visible in timelines, they are only used to trigger hooks.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#page_build
+type PageBuildEvent struct {
+       Build *PagesBuild `json:"build,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       ID           *int64        `json:"id,omitempty"`
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// PingEvent is triggered when a Webhook is added to GitHub.
+//
+// GitHub API docs: https://developer.github.com/webhooks/#ping-event
+type PingEvent struct {
+       // Random string of GitHub zen.
+       Zen *string `json:"zen,omitempty"`
+       // The ID of the webhook that triggered the ping.
+       HookID *int64 `json:"hook_id,omitempty"`
+       // The webhook configuration.
+       Hook         *Hook         `json:"hook,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// ProjectEvent is triggered when project is created, modified or deleted.
+// The webhook event name is "project".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#project
+type ProjectEvent struct {
+       Action  *string        `json:"action,omitempty"`
+       Changes *ProjectChange `json:"changes,omitempty"`
+       Project *Project       `json:"project,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Org          *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// ProjectCardEvent is triggered when a project card is created, updated, moved, converted to an issue, or deleted.
+// The webhook event name is "project_card".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#project_card
+type ProjectCardEvent struct {
+       Action      *string            `json:"action,omitempty"`
+       Changes     *ProjectCardChange `json:"changes,omitempty"`
+       AfterID     *int64             `json:"after_id,omitempty"`
+       ProjectCard *ProjectCard       `json:"project_card,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Org          *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// ProjectColumnEvent is triggered when a project column is created, updated, moved, or deleted.
+// The webhook event name is "project_column".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#project_column
+type ProjectColumnEvent struct {
+       Action        *string              `json:"action,omitempty"`
+       Changes       *ProjectColumnChange `json:"changes,omitempty"`
+       AfterID       *int64               `json:"after_id,omitempty"`
+       ProjectColumn *ProjectColumn       `json:"project_column,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Org          *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// PublicEvent is triggered when a private repository is open sourced.
+// According to GitHub: "Without a doubt: the best GitHub event."
+// The Webhook event name is "public".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#public
+type PublicEvent struct {
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// PullRequestEvent is triggered when a pull request is assigned, unassigned, labeled,
+// unlabeled, opened, edited, closed, reopened, synchronize, ready_for_review,
+// locked, unlocked, a pull request review is requested, or a review request is removed.
+// The Webhook event name is "pull_request".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/github-event-types#pullrequestevent
+type PullRequestEvent struct {
+       // Action is the action that was performed. Possible values are:
+       // "assigned", "unassigned", "review_requested", "review_request_removed", "labeled", "unlabeled",
+       // "opened", "edited", "closed", "ready_for_review", "locked", "unlocked", or "reopened".
+       // If the action is "closed" and the "merged" key is "false", the pull request was closed with unmerged commits.
+       // If the action is "closed" and the "merged" key is "true", the pull request was merged.
+       // While webhooks are also triggered when a pull request is synchronized, Events API timelines
+       // don't include pull request events with the "synchronize" action.
+       Action      *string      `json:"action,omitempty"`
+       Assignee    *User        `json:"assignee,omitempty"`
+       Number      *int         `json:"number,omitempty"`
+       PullRequest *PullRequest `json:"pull_request,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Changes *EditChange `json:"changes,omitempty"`
+       // RequestedReviewer is populated in "review_requested", "review_request_removed" event deliveries.
+       // A request affecting multiple reviewers at once is split into multiple
+       // such event deliveries, each with a single, different RequestedReviewer.
+       RequestedReviewer *User `json:"requested_reviewer,omitempty"`
+       // In the event that a team is requested instead of a user, "requested_team" gets sent in place of
+       // "requested_user" with the same delivery behavior.
+       RequestedTeam *Team         `json:"requested_team,omitempty"`
+       Repo          *Repository   `json:"repository,omitempty"`
+       Sender        *User         `json:"sender,omitempty"`
+       Installation  *Installation `json:"installation,omitempty"`
+       Label         *Label        `json:"label,omitempty"` // Populated in "labeled" event deliveries.
+
+       // The following field is only present when the webhook is triggered on
+       // a repository belonging to an organization.
+       Organization *Organization `json:"organization,omitempty"`
+
+       // The following fields are only populated when the Action is "synchronize".
+       Before *string `json:"before,omitempty"`
+       After  *string `json:"after,omitempty"`
+}
+
+// PullRequestReviewEvent is triggered when a review is submitted on a pull
+// request.
+// The Webhook event name is "pull_request_review".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#pull_request_review
+type PullRequestReviewEvent struct {
+       // Action is always "submitted".
+       Action      *string            `json:"action,omitempty"`
+       Review      *PullRequestReview `json:"review,omitempty"`
+       PullRequest *PullRequest       `json:"pull_request,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+
+       // The following field is only present when the webhook is triggered on
+       // a repository belonging to an organization.
+       Organization *Organization `json:"organization,omitempty"`
+}
+
+// PullRequestReviewCommentEvent is triggered when a comment is created on a
+// portion of the unified diff of a pull request.
+// The Webhook event name is "pull_request_review_comment".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#pull_request_review_comment
+type PullRequestReviewCommentEvent struct {
+       // Action is the action that was performed on the comment.
+       // Possible values are: "created", "edited", "deleted".
+       Action      *string             `json:"action,omitempty"`
+       PullRequest *PullRequest        `json:"pull_request,omitempty"`
+       Comment     *PullRequestComment `json:"comment,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Changes      *EditChange   `json:"changes,omitempty"`
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// PullRequestTargetEvent is triggered when a pull request is assigned, unassigned, labeled,
+// unlabeled, opened, edited, closed, reopened, synchronize, ready_for_review,
+// locked, unlocked, a pull request review is requested, or a review request is removed.
+// The Webhook event name is "pull_request_target".
+//
+// GitHub API docs: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull_request_target
+type PullRequestTargetEvent struct {
+       // Action is the action that was performed. Possible values are:
+       // "assigned", "unassigned", "labeled", "unlabeled", "opened", "edited", "closed", "reopened",
+       // "ready_for_review", "locked", "unlocked", "review_requested" or "review_request_removed".
+       // If the action is "closed" and the "merged" key is "false", the pull request was closed with unmerged commits.
+       // If the action is "closed" and the "merged" key is "true", the pull request was merged.
+       // While webhooks are also triggered when a pull request is synchronized, Events API timelines
+       // don't include pull request events with the "synchronize" action.
+       Action      *string      `json:"action,omitempty"`
+       Assignee    *User        `json:"assignee,omitempty"`
+       Number      *int         `json:"number,omitempty"`
+       PullRequest *PullRequest `json:"pull_request,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Changes *EditChange `json:"changes,omitempty"`
+       // RequestedReviewer is populated in "review_requested", "review_request_removed" event deliveries.
+       // A request affecting multiple reviewers at once is split into multiple
+       // such event deliveries, each with a single, different RequestedReviewer.
+       RequestedReviewer *User `json:"requested_reviewer,omitempty"`
+       // In the event that a team is requested instead of a user, "requested_team" gets sent in place of
+       // "requested_user" with the same delivery behavior.
+       RequestedTeam *Team         `json:"requested_team,omitempty"`
+       Repo          *Repository   `json:"repository,omitempty"`
+       Sender        *User         `json:"sender,omitempty"`
+       Installation  *Installation `json:"installation,omitempty"`
+       Label         *Label        `json:"label,omitempty"` // Populated in "labeled" event deliveries.
+
+       // The following field is only present when the webhook is triggered on
+       // a repository belonging to an organization.
+       Organization *Organization `json:"organization,omitempty"`
+
+       // The following fields are only populated when the Action is "synchronize".
+       Before *string `json:"before,omitempty"`
+       After  *string `json:"after,omitempty"`
+}
+
+// PushEvent represents a git push to a GitHub repository.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#push
+type PushEvent struct {
+       PushID       *int64        `json:"push_id,omitempty"`
+       Head         *string       `json:"head,omitempty"`
+       Ref          *string       `json:"ref,omitempty"`
+       Size         *int          `json:"size,omitempty"`
+       Commits      []*HeadCommit `json:"commits,omitempty"`
+       Before       *string       `json:"before,omitempty"`
+       DistinctSize *int          `json:"distinct_size,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       After        *string              `json:"after,omitempty"`
+       Created      *bool                `json:"created,omitempty"`
+       Deleted      *bool                `json:"deleted,omitempty"`
+       Forced       *bool                `json:"forced,omitempty"`
+       BaseRef      *string              `json:"base_ref,omitempty"`
+       Compare      *string              `json:"compare,omitempty"`
+       Repo         *PushEventRepository `json:"repository,omitempty"`
+       HeadCommit   *HeadCommit          `json:"head_commit,omitempty"`
+       Pusher       *User                `json:"pusher,omitempty"`
+       Sender       *User                `json:"sender,omitempty"`
+       Installation *Installation        `json:"installation,omitempty"`
+}
+
+func (p PushEvent) String() string {
+       return Stringify(p)
+}
+
+// HeadCommit represents a git commit in a GitHub PushEvent.
+type HeadCommit struct {
+       Message  *string       `json:"message,omitempty"`
+       Author   *CommitAuthor `json:"author,omitempty"`
+       URL      *string       `json:"url,omitempty"`
+       Distinct *bool         `json:"distinct,omitempty"`
+
+       // The following fields are only populated by Events API.
+       SHA *string `json:"sha,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       ID        *string       `json:"id,omitempty"`
+       TreeID    *string       `json:"tree_id,omitempty"`
+       Timestamp *Timestamp    `json:"timestamp,omitempty"`
+       Committer *CommitAuthor `json:"committer,omitempty"`
+       Added     []string      `json:"added,omitempty"`
+       Removed   []string      `json:"removed,omitempty"`
+       Modified  []string      `json:"modified,omitempty"`
+}
+
+func (p HeadCommit) String() string {
+       return Stringify(p)
+}
+
+// PushEventRepository represents the repo object in a PushEvent payload.
+type PushEventRepository struct {
+       ID              *int64     `json:"id,omitempty"`
+       NodeID          *string    `json:"node_id,omitempty"`
+       Name            *string    `json:"name,omitempty"`
+       FullName        *string    `json:"full_name,omitempty"`
+       Owner           *User      `json:"owner,omitempty"`
+       Private         *bool      `json:"private,omitempty"`
+       Description     *string    `json:"description,omitempty"`
+       Fork            *bool      `json:"fork,omitempty"`
+       CreatedAt       *Timestamp `json:"created_at,omitempty"`
+       PushedAt        *Timestamp `json:"pushed_at,omitempty"`
+       UpdatedAt       *Timestamp `json:"updated_at,omitempty"`
+       Homepage        *string    `json:"homepage,omitempty"`
+       PullsURL        *string    `json:"pulls_url,omitempty"`
+       Size            *int       `json:"size,omitempty"`
+       StargazersCount *int       `json:"stargazers_count,omitempty"`
+       WatchersCount   *int       `json:"watchers_count,omitempty"`
+       Language        *string    `json:"language,omitempty"`
+       HasIssues       *bool      `json:"has_issues,omitempty"`
+       HasDownloads    *bool      `json:"has_downloads,omitempty"`
+       HasWiki         *bool      `json:"has_wiki,omitempty"`
+       HasPages        *bool      `json:"has_pages,omitempty"`
+       ForksCount      *int       `json:"forks_count,omitempty"`
+       Archived        *bool      `json:"archived,omitempty"`
+       Disabled        *bool      `json:"disabled,omitempty"`
+       OpenIssuesCount *int       `json:"open_issues_count,omitempty"`
+       DefaultBranch   *string    `json:"default_branch,omitempty"`
+       MasterBranch    *string    `json:"master_branch,omitempty"`
+       Organization    *string    `json:"organization,omitempty"`
+       URL             *string    `json:"url,omitempty"`
+       ArchiveURL      *string    `json:"archive_url,omitempty"`
+       HTMLURL         *string    `json:"html_url,omitempty"`
+       StatusesURL     *string    `json:"statuses_url,omitempty"`
+       GitURL          *string    `json:"git_url,omitempty"`
+       SSHURL          *string    `json:"ssh_url,omitempty"`
+       CloneURL        *string    `json:"clone_url,omitempty"`
+       SVNURL          *string    `json:"svn_url,omitempty"`
+}
+
+// PushEventRepoOwner is a basic representation of user/org in a PushEvent payload.
+type PushEventRepoOwner struct {
+       Name  *string `json:"name,omitempty"`
+       Email *string `json:"email,omitempty"`
+}
+
+// ReleaseEvent is triggered when a release is published, unpublished, created,
+// edited, deleted, or prereleased.
+// The Webhook event name is "release".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#release
+type ReleaseEvent struct {
+       // Action is the action that was performed. Possible values are: "published", "unpublished",
+       // "created", "edited", "deleted", or "prereleased".
+       Action  *string            `json:"action,omitempty"`
+       Release *RepositoryRelease `json:"release,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// RepositoryEvent is triggered when a repository is created, archived, unarchived,
+// renamed, edited, transferred, made public, or made private. Organization hooks are
+// also trigerred when a repository is deleted.
+// The Webhook event name is "repository".
+//
+// Events of this type are not visible in timelines, they are only used to
+// trigger organization webhooks.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#repository
+type RepositoryEvent struct {
+       // Action is the action that was performed. Possible values are: "created",
+       // "deleted" (organization hooks only), "archived", "unarchived", "edited", "renamed",
+       // "transferred", "publicized", or "privatized".
+       Action *string     `json:"action,omitempty"`
+       Repo   *Repository `json:"repository,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Org          *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// RepositoryDispatchEvent is triggered when a client sends a POST request to the repository dispatch event endpoint.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#repository_dispatch
+type RepositoryDispatchEvent struct {
+       // Action is the event_type that submitted with the repository dispatch payload. Value can be any string.
+       Action        *string         `json:"action,omitempty"`
+       Branch        *string         `json:"branch,omitempty"`
+       ClientPayload json.RawMessage `json:"client_payload,omitempty"`
+       Repo          *Repository     `json:"repository,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Org          *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// RepositoryVulnerabilityAlertEvent is triggered when a security alert is created, dismissed, or resolved.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#repository_vulnerability_alert
+type RepositoryVulnerabilityAlertEvent struct {
+       // Action is the action that was performed. Possible values are: "create", "dismiss", "resolve".
+       Action *string `json:"action,omitempty"`
+
+       //The security alert of the vulnerable dependency.
+       Alert *RepositoryVulnerabilityAlert `json:"alert,omitempty"`
+
+       //The repository of the vulnerable dependency.
+       Repository *Repository `json:"repository,omitempty"`
+}
+
+// RepositoryVulnerabilityAlert represents a repository security alert.
+type RepositoryVulnerabilityAlert struct {
+       ID                       *int64     `json:"id,omitempty"`
+       AffectedRange            *string    `json:"affected_range,omitempty"`
+       AffectedPackageName      *string    `json:"affected_package_name,omitempty"`
+       ExternalReference        *string    `json:"external_reference,omitempty"`
+       ExternalIdentifier       *string    `json:"external_identifier,omitempty"`
+       GitHubSecurityAdvisoryID *string    `json:"ghsa_id,omitempty"`
+       Severity                 *string    `json:"severity,omitempty"`
+       CreatedAt                *Timestamp `json:"created_at,omitempty"`
+       FixedIn                  *string    `json:"fixed_in,omitempty"`
+       Dismisser                *User      `json:"dismisser,omitempty"`
+       DismissReason            *string    `json:"dismiss_reason,omitempty"`
+       DismissedAt              *Timestamp `json:"dismissed_at,omitempty"`
+}
+
+// StarEvent is triggered when a star is added or removed from a repository.
+// The Webhook event name is "star".
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#star
+type StarEvent struct {
+       // Action is the action that was performed. Possible values are: "created" or "deleted".
+       Action *string `json:"action,omitempty"`
+
+       // StarredAt is the time the star was created. It will be null for the "deleted" action.
+       StarredAt *Timestamp `json:"starred_at,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Org    *Organization `json:"organization,omitempty"`
+       Repo   *Repository   `json:"repository,omitempty"`
+       Sender *User         `json:"sender,omitempty"`
+}
+
+// StatusEvent is triggered when the status of a Git commit changes.
+// The Webhook event name is "status".
+//
+// Events of this type are not visible in timelines, they are only used to
+// trigger hooks.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#status
+type StatusEvent struct {
+       SHA *string `json:"sha,omitempty"`
+       // State is the new state. Possible values are: "pending", "success", "failure", "error".
+       State       *string   `json:"state,omitempty"`
+       Description *string   `json:"description,omitempty"`
+       TargetURL   *string   `json:"target_url,omitempty"`
+       Branches    []*Branch `json:"branches,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       ID           *int64            `json:"id,omitempty"`
+       Name         *string           `json:"name,omitempty"`
+       Context      *string           `json:"context,omitempty"`
+       Commit       *RepositoryCommit `json:"commit,omitempty"`
+       CreatedAt    *Timestamp        `json:"created_at,omitempty"`
+       UpdatedAt    *Timestamp        `json:"updated_at,omitempty"`
+       Repo         *Repository       `json:"repository,omitempty"`
+       Sender       *User             `json:"sender,omitempty"`
+       Installation *Installation     `json:"installation,omitempty"`
+}
+
+// TeamEvent is triggered when an organization's team is created, modified or deleted.
+// The Webhook event name is "team".
+//
+// Events of this type are not visible in timelines. These events are only used
+// to trigger hooks.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#team
+type TeamEvent struct {
+       Action  *string     `json:"action,omitempty"`
+       Team    *Team       `json:"team,omitempty"`
+       Changes *TeamChange `json:"changes,omitempty"`
+       Repo    *Repository `json:"repository,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Org          *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// TeamAddEvent is triggered when a repository is added to a team.
+// The Webhook event name is "team_add".
+//
+// Events of this type are not visible in timelines. These events are only used
+// to trigger hooks.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#team_add
+type TeamAddEvent struct {
+       Team *Team       `json:"team,omitempty"`
+       Repo *Repository `json:"repository,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Org          *Organization `json:"organization,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// UserEvent is triggered when a user is created or deleted.
+// The Webhook event name is "user".
+//
+// Only global webhooks can subscribe to this event type.
+//
+// GitHub API docs: https://developer.github.com/enterprise/v3/activity/events/types/#userevent-enterprise
+type UserEvent struct {
+       User *User `json:"user,omitempty"`
+       // The action performed. Possible values are: "created" or "deleted".
+       Action     *string     `json:"action,omitempty"`
+       Enterprise *Enterprise `json:"enterprise,omitempty"`
+       Sender     *User       `json:"sender,omitempty"`
+}
+
+// WatchEvent is related to starring a repository, not watching. See this API
+// blog post for an explanation: https://developer.github.com/changes/2012-09-05-watcher-api/
+//
+// The event’s actor is the user who starred a repository, and the event’s
+// repository is the repository that was starred.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#watch
+type WatchEvent struct {
+       // Action is the action that was performed. Possible value is: "started".
+       Action *string `json:"action,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo         *Repository   `json:"repository,omitempty"`
+       Sender       *User         `json:"sender,omitempty"`
+       Installation *Installation `json:"installation,omitempty"`
+}
+
+// WorkflowDispatchEvent is triggered when someone triggers a workflow run on GitHub or
+// sends a POST request to the create a workflow dispatch event endpoint.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#workflow_dispatch
+type WorkflowDispatchEvent struct {
+       Inputs   json.RawMessage `json:"inputs,omitempty"`
+       Ref      *string         `json:"ref,omitempty"`
+       Workflow *string         `json:"workflow,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Repo   *Repository   `json:"repository,omitempty"`
+       Org    *Organization `json:"organization,omitempty"`
+       Sender *User         `json:"sender,omitempty"`
+}
+
+// WorkflowRunEvent is triggered when a GitHub Actions workflow run is requested or completed.
+//
+// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#workflow_run
+type WorkflowRunEvent struct {
+       Action      *string      `json:"action,omitempty"`
+       Workflow    *Workflow    `json:"workflow,omitempty"`
+       WorkflowRun *WorkflowRun `json:"workflow_run,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Org    *Organization `json:"organization,omitempty"`
+       Repo   *Repository   `json:"repository,omitempty"`
+       Sender *User         `json:"sender,omitempty"`
+}
diff --git a/vendor/github.com/google/go-github/v37/github/gists.go b/vendor/github.com/google/go-github/v37/github/gists.go
new file mode 100644 (file)
index 0000000..4971c6b
--- /dev/null
@@ -0,0 +1,364 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// GistsService handles communication with the Gist related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/
+type GistsService service
+
+// Gist represents a GitHub's gist.
+type Gist struct {
+       ID          *string                   `json:"id,omitempty"`
+       Description *string                   `json:"description,omitempty"`
+       Public      *bool                     `json:"public,omitempty"`
+       Owner       *User                     `json:"owner,omitempty"`
+       Files       map[GistFilename]GistFile `json:"files,omitempty"`
+       Comments    *int                      `json:"comments,omitempty"`
+       HTMLURL     *string                   `json:"html_url,omitempty"`
+       GitPullURL  *string                   `json:"git_pull_url,omitempty"`
+       GitPushURL  *string                   `json:"git_push_url,omitempty"`
+       CreatedAt   *time.Time                `json:"created_at,omitempty"`
+       UpdatedAt   *time.Time                `json:"updated_at,omitempty"`
+       NodeID      *string                   `json:"node_id,omitempty"`
+}
+
+func (g Gist) String() string {
+       return Stringify(g)
+}
+
+// GistFilename represents filename on a gist.
+type GistFilename string
+
+// GistFile represents a file on a gist.
+type GistFile struct {
+       Size     *int    `json:"size,omitempty"`
+       Filename *string `json:"filename,omitempty"`
+       Language *string `json:"language,omitempty"`
+       Type     *string `json:"type,omitempty"`
+       RawURL   *string `json:"raw_url,omitempty"`
+       Content  *string `json:"content,omitempty"`
+}
+
+func (g GistFile) String() string {
+       return Stringify(g)
+}
+
+// GistCommit represents a commit on a gist.
+type GistCommit struct {
+       URL          *string      `json:"url,omitempty"`
+       Version      *string      `json:"version,omitempty"`
+       User         *User        `json:"user,omitempty"`
+       ChangeStatus *CommitStats `json:"change_status,omitempty"`
+       CommittedAt  *Timestamp   `json:"committed_at,omitempty"`
+       NodeID       *string      `json:"node_id,omitempty"`
+}
+
+func (gc GistCommit) String() string {
+       return Stringify(gc)
+}
+
+// GistFork represents a fork of a gist.
+type GistFork struct {
+       URL       *string    `json:"url,omitempty"`
+       User      *User      `json:"user,omitempty"`
+       ID        *string    `json:"id,omitempty"`
+       CreatedAt *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt *Timestamp `json:"updated_at,omitempty"`
+       NodeID    *string    `json:"node_id,omitempty"`
+}
+
+func (gf GistFork) String() string {
+       return Stringify(gf)
+}
+
+// GistListOptions specifies the optional parameters to the
+// GistsService.List, GistsService.ListAll, and GistsService.ListStarred methods.
+type GistListOptions struct {
+       // Since filters Gists by time.
+       Since time.Time `url:"since,omitempty"`
+
+       ListOptions
+}
+
+// List gists for a user. Passing the empty string will list
+// all public gists if called anonymously. However, if the call
+// is authenticated, it will returns all gists for the authenticated
+// user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-gists-for-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-gists-for-a-user
+func (s *GistsService) List(ctx context.Context, user string, opts *GistListOptions) ([]*Gist, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v/gists", user)
+       } else {
+               u = "gists"
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var gists []*Gist
+       resp, err := s.client.Do(ctx, req, &gists)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return gists, resp, nil
+}
+
+// ListAll lists all public gists.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-public-gists
+func (s *GistsService) ListAll(ctx context.Context, opts *GistListOptions) ([]*Gist, *Response, error) {
+       u, err := addOptions("gists/public", opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var gists []*Gist
+       resp, err := s.client.Do(ctx, req, &gists)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return gists, resp, nil
+}
+
+// ListStarred lists starred gists of authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-starred-gists
+func (s *GistsService) ListStarred(ctx context.Context, opts *GistListOptions) ([]*Gist, *Response, error) {
+       u, err := addOptions("gists/starred", opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var gists []*Gist
+       resp, err := s.client.Do(ctx, req, &gists)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return gists, resp, nil
+}
+
+// Get a single gist.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#get-a-gist
+func (s *GistsService) Get(ctx context.Context, id string) (*Gist, *Response, error) {
+       u := fmt.Sprintf("gists/%v", id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       gist := new(Gist)
+       resp, err := s.client.Do(ctx, req, gist)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return gist, resp, nil
+}
+
+// GetRevision gets a specific revision of a gist.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#get-a-gist-revision
+func (s *GistsService) GetRevision(ctx context.Context, id, sha string) (*Gist, *Response, error) {
+       u := fmt.Sprintf("gists/%v/%v", id, sha)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       gist := new(Gist)
+       resp, err := s.client.Do(ctx, req, gist)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return gist, resp, nil
+}
+
+// Create a gist for authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#create-a-gist
+func (s *GistsService) Create(ctx context.Context, gist *Gist) (*Gist, *Response, error) {
+       u := "gists"
+       req, err := s.client.NewRequest("POST", u, gist)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       g := new(Gist)
+       resp, err := s.client.Do(ctx, req, g)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return g, resp, nil
+}
+
+// Edit a gist.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#update-a-gist
+func (s *GistsService) Edit(ctx context.Context, id string, gist *Gist) (*Gist, *Response, error) {
+       u := fmt.Sprintf("gists/%v", id)
+       req, err := s.client.NewRequest("PATCH", u, gist)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       g := new(Gist)
+       resp, err := s.client.Do(ctx, req, g)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return g, resp, nil
+}
+
+// ListCommits lists commits of a gist.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-gist-commits
+func (s *GistsService) ListCommits(ctx context.Context, id string, opts *ListOptions) ([]*GistCommit, *Response, error) {
+       u := fmt.Sprintf("gists/%v/commits", id)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var gistCommits []*GistCommit
+       resp, err := s.client.Do(ctx, req, &gistCommits)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return gistCommits, resp, nil
+}
+
+// Delete a gist.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#delete-a-gist
+func (s *GistsService) Delete(ctx context.Context, id string) (*Response, error) {
+       u := fmt.Sprintf("gists/%v", id)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// Star a gist on behalf of authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#star-a-gist
+func (s *GistsService) Star(ctx context.Context, id string) (*Response, error) {
+       u := fmt.Sprintf("gists/%v/star", id)
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// Unstar a gist on a behalf of authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#unstar-a-gist
+func (s *GistsService) Unstar(ctx context.Context, id string) (*Response, error) {
+       u := fmt.Sprintf("gists/%v/star", id)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// IsStarred checks if a gist is starred by authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#check-if-a-gist-is-starred
+func (s *GistsService) IsStarred(ctx context.Context, id string) (bool, *Response, error) {
+       u := fmt.Sprintf("gists/%v/star", id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+       resp, err := s.client.Do(ctx, req, nil)
+       starred, err := parseBoolResponse(err)
+       return starred, resp, err
+}
+
+// Fork a gist.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#fork-a-gist
+func (s *GistsService) Fork(ctx context.Context, id string) (*Gist, *Response, error) {
+       u := fmt.Sprintf("gists/%v/forks", id)
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       g := new(Gist)
+       resp, err := s.client.Do(ctx, req, g)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return g, resp, nil
+}
+
+// ListForks lists forks of a gist.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-gist-forks
+func (s *GistsService) ListForks(ctx context.Context, id string, opts *ListOptions) ([]*GistFork, *Response, error) {
+       u := fmt.Sprintf("gists/%v/forks", id)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var gistForks []*GistFork
+       resp, err := s.client.Do(ctx, req, &gistForks)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return gistForks, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/gists_comments.go b/vendor/github.com/google/go-github/v37/github/gists_comments.go
new file mode 100644 (file)
index 0000000..a9452c9
--- /dev/null
@@ -0,0 +1,119 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// GistComment represents a Gist comment.
+type GistComment struct {
+       ID        *int64     `json:"id,omitempty"`
+       URL       *string    `json:"url,omitempty"`
+       Body      *string    `json:"body,omitempty"`
+       User      *User      `json:"user,omitempty"`
+       CreatedAt *time.Time `json:"created_at,omitempty"`
+}
+
+func (g GistComment) String() string {
+       return Stringify(g)
+}
+
+// ListComments lists all comments for a gist.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#list-gist-comments
+func (s *GistsService) ListComments(ctx context.Context, gistID string, opts *ListOptions) ([]*GistComment, *Response, error) {
+       u := fmt.Sprintf("gists/%v/comments", gistID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var comments []*GistComment
+       resp, err := s.client.Do(ctx, req, &comments)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comments, resp, nil
+}
+
+// GetComment retrieves a single comment from a gist.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#get-a-gist-comment
+func (s *GistsService) GetComment(ctx context.Context, gistID string, commentID int64) (*GistComment, *Response, error) {
+       u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       c := new(GistComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// CreateComment creates a comment for a gist.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#create-a-gist-comment
+func (s *GistsService) CreateComment(ctx context.Context, gistID string, comment *GistComment) (*GistComment, *Response, error) {
+       u := fmt.Sprintf("gists/%v/comments", gistID)
+       req, err := s.client.NewRequest("POST", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       c := new(GistComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// EditComment edits an existing gist comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#update-a-gist-comment
+func (s *GistsService) EditComment(ctx context.Context, gistID string, commentID int64, comment *GistComment) (*GistComment, *Response, error) {
+       u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID)
+       req, err := s.client.NewRequest("PATCH", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       c := new(GistComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// DeleteComment deletes a gist comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gists/#delete-a-gist-comment
+func (s *GistsService) DeleteComment(ctx context.Context, gistID string, commentID int64) (*Response, error) {
+       u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/git.go b/vendor/github.com/google/go-github/v37/github/git.go
new file mode 100644 (file)
index 0000000..36b33f5
--- /dev/null
@@ -0,0 +1,12 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+// GitService handles communication with the git data related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/
+type GitService service
diff --git a/vendor/github.com/google/go-github/v37/github/git_blobs.go b/vendor/github.com/google/go-github/v37/github/git_blobs.go
new file mode 100644 (file)
index 0000000..6bc59c6
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "bytes"
+       "context"
+       "fmt"
+)
+
+// Blob represents a blob object.
+type Blob struct {
+       Content  *string `json:"content,omitempty"`
+       Encoding *string `json:"encoding,omitempty"`
+       SHA      *string `json:"sha,omitempty"`
+       Size     *int    `json:"size,omitempty"`
+       URL      *string `json:"url,omitempty"`
+       NodeID   *string `json:"node_id,omitempty"`
+}
+
+// GetBlob fetches a blob from a repo given a SHA.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#get-a-blob
+func (s *GitService) GetBlob(ctx context.Context, owner string, repo string, sha string) (*Blob, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/git/blobs/%v", owner, repo, sha)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       blob := new(Blob)
+       resp, err := s.client.Do(ctx, req, blob)
+       return blob, resp, err
+}
+
+// GetBlobRaw fetches a blob's contents from a repo.
+// Unlike GetBlob, it returns the raw bytes rather than the base64-encoded data.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#get-a-blob
+func (s *GitService) GetBlobRaw(ctx context.Context, owner, repo, sha string) ([]byte, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/git/blobs/%v", owner, repo, sha)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       req.Header.Set("Accept", "application/vnd.github.v3.raw")
+
+       var buf bytes.Buffer
+       resp, err := s.client.Do(ctx, req, &buf)
+       return buf.Bytes(), resp, err
+}
+
+// CreateBlob creates a blob object.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#create-a-blob
+func (s *GitService) CreateBlob(ctx context.Context, owner string, repo string, blob *Blob) (*Blob, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/git/blobs", owner, repo)
+       req, err := s.client.NewRequest("POST", u, blob)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Blob)
+       resp, err := s.client.Do(ctx, req, t)
+       return t, resp, err
+}
diff --git a/vendor/github.com/google/go-github/v37/github/git_commits.go b/vendor/github.com/google/go-github/v37/github/git_commits.go
new file mode 100644 (file)
index 0000000..7a728be
--- /dev/null
@@ -0,0 +1,200 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "bytes"
+       "context"
+       "errors"
+       "fmt"
+       "strings"
+       "time"
+
+       "golang.org/x/crypto/openpgp"
+)
+
+// SignatureVerification represents GPG signature verification.
+type SignatureVerification struct {
+       Verified  *bool   `json:"verified,omitempty"`
+       Reason    *string `json:"reason,omitempty"`
+       Signature *string `json:"signature,omitempty"`
+       Payload   *string `json:"payload,omitempty"`
+}
+
+// Commit represents a GitHub commit.
+type Commit struct {
+       SHA          *string                `json:"sha,omitempty"`
+       Author       *CommitAuthor          `json:"author,omitempty"`
+       Committer    *CommitAuthor          `json:"committer,omitempty"`
+       Message      *string                `json:"message,omitempty"`
+       Tree         *Tree                  `json:"tree,omitempty"`
+       Parents      []*Commit              `json:"parents,omitempty"`
+       Stats        *CommitStats           `json:"stats,omitempty"`
+       HTMLURL      *string                `json:"html_url,omitempty"`
+       URL          *string                `json:"url,omitempty"`
+       Verification *SignatureVerification `json:"verification,omitempty"`
+       NodeID       *string                `json:"node_id,omitempty"`
+
+       // CommentCount is the number of GitHub comments on the commit. This
+       // is only populated for requests that fetch GitHub data like
+       // Pulls.ListCommits, Repositories.ListCommits, etc.
+       CommentCount *int `json:"comment_count,omitempty"`
+
+       // SigningKey denotes a key to sign the commit with. If not nil this key will
+       // be used to sign the commit. The private key must be present and already
+       // decrypted. Ignored if Verification.Signature is defined.
+       SigningKey *openpgp.Entity `json:"-"`
+}
+
+func (c Commit) String() string {
+       return Stringify(c)
+}
+
+// CommitAuthor represents the author or committer of a commit. The commit
+// author may not correspond to a GitHub User.
+type CommitAuthor struct {
+       Date  *time.Time `json:"date,omitempty"`
+       Name  *string    `json:"name,omitempty"`
+       Email *string    `json:"email,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       Login *string `json:"username,omitempty"` // Renamed for go-github consistency.
+}
+
+func (c CommitAuthor) String() string {
+       return Stringify(c)
+}
+
+// GetCommit fetches the Commit object for a given SHA.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#get-a-commit
+func (s *GitService) GetCommit(ctx context.Context, owner string, repo string, sha string) (*Commit, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/git/commits/%v", owner, repo, sha)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       c := new(Commit)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// createCommit represents the body of a CreateCommit request.
+type createCommit struct {
+       Author    *CommitAuthor `json:"author,omitempty"`
+       Committer *CommitAuthor `json:"committer,omitempty"`
+       Message   *string       `json:"message,omitempty"`
+       Tree      *string       `json:"tree,omitempty"`
+       Parents   []string      `json:"parents,omitempty"`
+       Signature *string       `json:"signature,omitempty"`
+}
+
+// CreateCommit creates a new commit in a repository.
+// commit must not be nil.
+//
+// The commit.Committer is optional and will be filled with the commit.Author
+// data if omitted. If the commit.Author is omitted, it will be filled in with
+// the authenticated user’s information and the current date.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#create-a-commit
+func (s *GitService) CreateCommit(ctx context.Context, owner string, repo string, commit *Commit) (*Commit, *Response, error) {
+       if commit == nil {
+               return nil, nil, fmt.Errorf("commit must be provided")
+       }
+
+       u := fmt.Sprintf("repos/%v/%v/git/commits", owner, repo)
+
+       parents := make([]string, len(commit.Parents))
+       for i, parent := range commit.Parents {
+               parents[i] = *parent.SHA
+       }
+
+       body := &createCommit{
+               Author:    commit.Author,
+               Committer: commit.Committer,
+               Message:   commit.Message,
+               Parents:   parents,
+       }
+       if commit.Tree != nil {
+               body.Tree = commit.Tree.SHA
+       }
+       if commit.SigningKey != nil {
+               signature, err := createSignature(commit.SigningKey, body)
+               if err != nil {
+                       return nil, nil, err
+               }
+               body.Signature = &signature
+       }
+       if commit.Verification != nil {
+               body.Signature = commit.Verification.Signature
+       }
+
+       req, err := s.client.NewRequest("POST", u, body)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       c := new(Commit)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+func createSignature(signingKey *openpgp.Entity, commit *createCommit) (string, error) {
+       if signingKey == nil || commit == nil {
+               return "", errors.New("createSignature: invalid parameters")
+       }
+
+       message, err := createSignatureMessage(commit)
+       if err != nil {
+               return "", err
+       }
+
+       writer := new(bytes.Buffer)
+       reader := bytes.NewReader([]byte(message))
+       if err := openpgp.ArmoredDetachSign(writer, signingKey, reader, nil); err != nil {
+               return "", err
+       }
+
+       return writer.String(), nil
+}
+
+func createSignatureMessage(commit *createCommit) (string, error) {
+       if commit == nil || commit.Message == nil || *commit.Message == "" || commit.Author == nil {
+               return "", errors.New("createSignatureMessage: invalid parameters")
+       }
+
+       var message []string
+
+       if commit.Tree != nil {
+               message = append(message, fmt.Sprintf("tree %s", *commit.Tree))
+       }
+
+       for _, parent := range commit.Parents {
+               message = append(message, fmt.Sprintf("parent %s", parent))
+       }
+
+       message = append(message, fmt.Sprintf("author %s <%s> %d %s", commit.Author.GetName(), commit.Author.GetEmail(), commit.Author.GetDate().Unix(), commit.Author.GetDate().Format("-0700")))
+
+       committer := commit.Committer
+       if committer == nil {
+               committer = commit.Author
+       }
+
+       // There needs to be a double newline after committer
+       message = append(message, fmt.Sprintf("committer %s <%s> %d %s\n", committer.GetName(), committer.GetEmail(), committer.GetDate().Unix(), committer.GetDate().Format("-0700")))
+       message = append(message, *commit.Message)
+
+       return strings.Join(message, "\n"), nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/git_refs.go b/vendor/github.com/google/go-github/v37/github/git_refs.go
new file mode 100644 (file)
index 0000000..259f27f
--- /dev/null
@@ -0,0 +1,175 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "net/url"
+       "strings"
+)
+
+// Reference represents a GitHub reference.
+type Reference struct {
+       Ref    *string    `json:"ref"`
+       URL    *string    `json:"url"`
+       Object *GitObject `json:"object"`
+       NodeID *string    `json:"node_id,omitempty"`
+}
+
+func (r Reference) String() string {
+       return Stringify(r)
+}
+
+// GitObject represents a Git object.
+type GitObject struct {
+       Type *string `json:"type"`
+       SHA  *string `json:"sha"`
+       URL  *string `json:"url"`
+}
+
+func (o GitObject) String() string {
+       return Stringify(o)
+}
+
+// createRefRequest represents the payload for creating a reference.
+type createRefRequest struct {
+       Ref *string `json:"ref"`
+       SHA *string `json:"sha"`
+}
+
+// updateRefRequest represents the payload for updating a reference.
+type updateRefRequest struct {
+       SHA   *string `json:"sha"`
+       Force *bool   `json:"force"`
+}
+
+// GetRef fetches a single reference in a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#get-a-reference
+func (s *GitService) GetRef(ctx context.Context, owner string, repo string, ref string) (*Reference, *Response, error) {
+       ref = strings.TrimPrefix(ref, "refs/")
+       u := fmt.Sprintf("repos/%v/%v/git/ref/%v", owner, repo, refURLEscape(ref))
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(Reference)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// refURLEscape escapes every path segment of the given ref. Those must
+// not contain escaped "/" - as "%2F" - or github will not recognize it.
+func refURLEscape(ref string) string {
+       parts := strings.Split(ref, "/")
+       for i, s := range parts {
+               parts[i] = url.PathEscape(s)
+       }
+       return strings.Join(parts, "/")
+}
+
+// ReferenceListOptions specifies optional parameters to the
+// GitService.ListMatchingRefs method.
+type ReferenceListOptions struct {
+       Ref string `url:"-"`
+
+       ListOptions
+}
+
+// ListMatchingRefs lists references in a repository that match a supplied ref.
+// Use an empty ref to list all references.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#list-matching-references
+func (s *GitService) ListMatchingRefs(ctx context.Context, owner, repo string, opts *ReferenceListOptions) ([]*Reference, *Response, error) {
+       var ref string
+       if opts != nil {
+               ref = strings.TrimPrefix(opts.Ref, "refs/")
+       }
+       u := fmt.Sprintf("repos/%v/%v/git/matching-refs/%v", owner, repo, refURLEscape(ref))
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var rs []*Reference
+       resp, err := s.client.Do(ctx, req, &rs)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return rs, resp, nil
+}
+
+// CreateRef creates a new ref in a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#create-a-reference
+func (s *GitService) CreateRef(ctx context.Context, owner string, repo string, ref *Reference) (*Reference, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/git/refs", owner, repo)
+       req, err := s.client.NewRequest("POST", u, &createRefRequest{
+               // back-compat with previous behavior that didn't require 'refs/' prefix
+               Ref: String("refs/" + strings.TrimPrefix(*ref.Ref, "refs/")),
+               SHA: ref.Object.SHA,
+       })
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(Reference)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// UpdateRef updates an existing ref in a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#update-a-reference
+func (s *GitService) UpdateRef(ctx context.Context, owner string, repo string, ref *Reference, force bool) (*Reference, *Response, error) {
+       refPath := strings.TrimPrefix(*ref.Ref, "refs/")
+       u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, refPath)
+       req, err := s.client.NewRequest("PATCH", u, &updateRefRequest{
+               SHA:   ref.Object.SHA,
+               Force: &force,
+       })
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(Reference)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// DeleteRef deletes a ref from a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#delete-a-reference
+func (s *GitService) DeleteRef(ctx context.Context, owner string, repo string, ref string) (*Response, error) {
+       ref = strings.TrimPrefix(ref, "refs/")
+       u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, refURLEscape(ref))
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/git_tags.go b/vendor/github.com/google/go-github/v37/github/git_tags.go
new file mode 100644 (file)
index 0000000..10029c4
--- /dev/null
@@ -0,0 +1,76 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// Tag represents a tag object.
+type Tag struct {
+       Tag          *string                `json:"tag,omitempty"`
+       SHA          *string                `json:"sha,omitempty"`
+       URL          *string                `json:"url,omitempty"`
+       Message      *string                `json:"message,omitempty"`
+       Tagger       *CommitAuthor          `json:"tagger,omitempty"`
+       Object       *GitObject             `json:"object,omitempty"`
+       Verification *SignatureVerification `json:"verification,omitempty"`
+       NodeID       *string                `json:"node_id,omitempty"`
+}
+
+// createTagRequest represents the body of a CreateTag request. This is mostly
+// identical to Tag with the exception that the object SHA and Type are
+// top-level fields, rather than being nested inside a JSON object.
+type createTagRequest struct {
+       Tag     *string       `json:"tag,omitempty"`
+       Message *string       `json:"message,omitempty"`
+       Object  *string       `json:"object,omitempty"`
+       Type    *string       `json:"type,omitempty"`
+       Tagger  *CommitAuthor `json:"tagger,omitempty"`
+}
+
+// GetTag fetches a tag from a repo given a SHA.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#get-a-tag
+func (s *GitService) GetTag(ctx context.Context, owner string, repo string, sha string) (*Tag, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/git/tags/%v", owner, repo, sha)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       tag := new(Tag)
+       resp, err := s.client.Do(ctx, req, tag)
+       return tag, resp, err
+}
+
+// CreateTag creates a tag object.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#create-a-tag-object
+func (s *GitService) CreateTag(ctx context.Context, owner string, repo string, tag *Tag) (*Tag, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/git/tags", owner, repo)
+
+       // convert Tag into a createTagRequest
+       tagRequest := &createTagRequest{
+               Tag:     tag.Tag,
+               Message: tag.Message,
+               Tagger:  tag.Tagger,
+       }
+       if tag.Object != nil {
+               tagRequest.Object = tag.Object.SHA
+               tagRequest.Type = tag.Object.Type
+       }
+
+       req, err := s.client.NewRequest("POST", u, tagRequest)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Tag)
+       resp, err := s.client.Do(ctx, req, t)
+       return t, resp, err
+}
diff --git a/vendor/github.com/google/go-github/v37/github/git_trees.go b/vendor/github.com/google/go-github/v37/github/git_trees.go
new file mode 100644 (file)
index 0000000..e655e93
--- /dev/null
@@ -0,0 +1,162 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "encoding/json"
+       "fmt"
+)
+
+// Tree represents a GitHub tree.
+type Tree struct {
+       SHA     *string      `json:"sha,omitempty"`
+       Entries []*TreeEntry `json:"tree,omitempty"`
+
+       // Truncated is true if the number of items in the tree
+       // exceeded GitHub's maximum limit and the Entries were truncated
+       // in the response. Only populated for requests that fetch
+       // trees like Git.GetTree.
+       Truncated *bool `json:"truncated,omitempty"`
+}
+
+func (t Tree) String() string {
+       return Stringify(t)
+}
+
+// TreeEntry represents the contents of a tree structure. TreeEntry can
+// represent either a blob, a commit (in the case of a submodule), or another
+// tree.
+type TreeEntry struct {
+       SHA     *string `json:"sha,omitempty"`
+       Path    *string `json:"path,omitempty"`
+       Mode    *string `json:"mode,omitempty"`
+       Type    *string `json:"type,omitempty"`
+       Size    *int    `json:"size,omitempty"`
+       Content *string `json:"content,omitempty"`
+       URL     *string `json:"url,omitempty"`
+}
+
+func (t TreeEntry) String() string {
+       return Stringify(t)
+}
+
+// treeEntryWithFileDelete is used internally to delete a file whose
+// Content and SHA fields are empty. It does this by removing the "omitempty"
+// tag modifier on the SHA field which causes the GitHub API to receive
+// {"sha":null} and thereby delete the file.
+type treeEntryWithFileDelete struct {
+       SHA     *string `json:"sha"`
+       Path    *string `json:"path,omitempty"`
+       Mode    *string `json:"mode,omitempty"`
+       Type    *string `json:"type,omitempty"`
+       Size    *int    `json:"size,omitempty"`
+       Content *string `json:"content,omitempty"`
+       URL     *string `json:"url,omitempty"`
+}
+
+func (t *TreeEntry) MarshalJSON() ([]byte, error) {
+       if t.SHA == nil && t.Content == nil {
+               return json.Marshal(struct {
+                       SHA  *string `json:"sha"`
+                       Path *string `json:"path,omitempty"`
+                       Mode *string `json:"mode,omitempty"`
+                       Type *string `json:"type,omitempty"`
+               }{
+                       nil,
+                       t.Path,
+                       t.Mode,
+                       t.Type,
+               })
+       }
+       return json.Marshal(struct {
+               SHA     *string `json:"sha,omitempty"`
+               Path    *string `json:"path,omitempty"`
+               Mode    *string `json:"mode,omitempty"`
+               Type    *string `json:"type,omitempty"`
+               Size    *int    `json:"size,omitempty"`
+               Content *string `json:"content,omitempty"`
+               URL     *string `json:"url,omitempty"`
+       }{
+               SHA:     t.SHA,
+               Path:    t.Path,
+               Mode:    t.Mode,
+               Type:    t.Type,
+               Size:    t.Size,
+               Content: t.Content,
+               URL:     t.URL,
+       })
+}
+
+// GetTree fetches the Tree object for a given sha hash from a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#get-a-tree
+func (s *GitService) GetTree(ctx context.Context, owner string, repo string, sha string, recursive bool) (*Tree, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/git/trees/%v", owner, repo, sha)
+       if recursive {
+               u += "?recursive=1"
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Tree)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// createTree represents the body of a CreateTree request.
+type createTree struct {
+       BaseTree string        `json:"base_tree,omitempty"`
+       Entries  []interface{} `json:"tree"`
+}
+
+// CreateTree creates a new tree in a repository. If both a tree and a nested
+// path modifying that tree are specified, it will overwrite the contents of
+// that tree with the new path contents and write a new tree out.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/git/#create-a-tree
+func (s *GitService) CreateTree(ctx context.Context, owner string, repo string, baseTree string, entries []*TreeEntry) (*Tree, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/git/trees", owner, repo)
+
+       newEntries := make([]interface{}, 0, len(entries))
+       for _, entry := range entries {
+               if entry.Content == nil && entry.SHA == nil {
+                       newEntries = append(newEntries, treeEntryWithFileDelete{
+                               Path: entry.Path,
+                               Mode: entry.Mode,
+                               Type: entry.Type,
+                               Size: entry.Size,
+                               URL:  entry.URL,
+                       })
+                       continue
+               }
+               newEntries = append(newEntries, entry)
+       }
+
+       body := &createTree{
+               BaseTree: baseTree,
+               Entries:  newEntries,
+       }
+       req, err := s.client.NewRequest("POST", u, body)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Tree)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/github-accessors.go b/vendor/github.com/google/go-github/v37/github/github-accessors.go
new file mode 100644 (file)
index 0000000..46efcc9
--- /dev/null
@@ -0,0 +1,17373 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Code generated by gen-accessors; DO NOT EDIT.
+
+package github
+
+import (
+       "encoding/json"
+       "time"
+)
+
+// GetRetryAfter returns the RetryAfter field if it's non-nil, zero value otherwise.
+func (a *AbuseRateLimitError) GetRetryAfter() time.Duration {
+       if a == nil || a.RetryAfter == nil {
+               return 0
+       }
+       return *a.RetryAfter
+}
+
+// GetGithubOwnedAllowed returns the GithubOwnedAllowed field if it's non-nil, zero value otherwise.
+func (a *ActionsAllowed) GetGithubOwnedAllowed() bool {
+       if a == nil || a.GithubOwnedAllowed == nil {
+               return false
+       }
+       return *a.GithubOwnedAllowed
+}
+
+// GetVerifiedAllowed returns the VerifiedAllowed field if it's non-nil, zero value otherwise.
+func (a *ActionsAllowed) GetVerifiedAllowed() bool {
+       if a == nil || a.VerifiedAllowed == nil {
+               return false
+       }
+       return *a.VerifiedAllowed
+}
+
+// GetAllowedActions returns the AllowedActions field if it's non-nil, zero value otherwise.
+func (a *ActionsPermissions) GetAllowedActions() string {
+       if a == nil || a.AllowedActions == nil {
+               return ""
+       }
+       return *a.AllowedActions
+}
+
+// GetEnabledRepositories returns the EnabledRepositories field if it's non-nil, zero value otherwise.
+func (a *ActionsPermissions) GetEnabledRepositories() string {
+       if a == nil || a.EnabledRepositories == nil {
+               return ""
+       }
+       return *a.EnabledRepositories
+}
+
+// GetSelectedActionsURL returns the SelectedActionsURL field if it's non-nil, zero value otherwise.
+func (a *ActionsPermissions) GetSelectedActionsURL() string {
+       if a == nil || a.SelectedActionsURL == nil {
+               return ""
+       }
+       return *a.SelectedActionsURL
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (a *AdminEnforcement) GetURL() string {
+       if a == nil || a.URL == nil {
+               return ""
+       }
+       return *a.URL
+}
+
+// GetComments returns the Comments field.
+func (a *AdminStats) GetComments() *CommentStats {
+       if a == nil {
+               return nil
+       }
+       return a.Comments
+}
+
+// GetGists returns the Gists field.
+func (a *AdminStats) GetGists() *GistStats {
+       if a == nil {
+               return nil
+       }
+       return a.Gists
+}
+
+// GetHooks returns the Hooks field.
+func (a *AdminStats) GetHooks() *HookStats {
+       if a == nil {
+               return nil
+       }
+       return a.Hooks
+}
+
+// GetIssues returns the Issues field.
+func (a *AdminStats) GetIssues() *IssueStats {
+       if a == nil {
+               return nil
+       }
+       return a.Issues
+}
+
+// GetMilestones returns the Milestones field.
+func (a *AdminStats) GetMilestones() *MilestoneStats {
+       if a == nil {
+               return nil
+       }
+       return a.Milestones
+}
+
+// GetOrgs returns the Orgs field.
+func (a *AdminStats) GetOrgs() *OrgStats {
+       if a == nil {
+               return nil
+       }
+       return a.Orgs
+}
+
+// GetPages returns the Pages field.
+func (a *AdminStats) GetPages() *PageStats {
+       if a == nil {
+               return nil
+       }
+       return a.Pages
+}
+
+// GetPulls returns the Pulls field.
+func (a *AdminStats) GetPulls() *PullStats {
+       if a == nil {
+               return nil
+       }
+       return a.Pulls
+}
+
+// GetRepos returns the Repos field.
+func (a *AdminStats) GetRepos() *RepoStats {
+       if a == nil {
+               return nil
+       }
+       return a.Repos
+}
+
+// GetUsers returns the Users field.
+func (a *AdminStats) GetUsers() *UserStats {
+       if a == nil {
+               return nil
+       }
+       return a.Users
+}
+
+// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise.
+func (a *Alert) GetClosedAt() Timestamp {
+       if a == nil || a.ClosedAt == nil {
+               return Timestamp{}
+       }
+       return *a.ClosedAt
+}
+
+// GetClosedBy returns the ClosedBy field.
+func (a *Alert) GetClosedBy() *User {
+       if a == nil {
+               return nil
+       }
+       return a.ClosedBy
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (a *Alert) GetCreatedAt() Timestamp {
+       if a == nil || a.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *a.CreatedAt
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (a *Alert) GetHTMLURL() string {
+       if a == nil || a.HTMLURL == nil {
+               return ""
+       }
+       return *a.HTMLURL
+}
+
+// GetOpen returns the Open field if it's non-nil, zero value otherwise.
+func (a *Alert) GetOpen() bool {
+       if a == nil || a.Open == nil {
+               return false
+       }
+       return *a.Open
+}
+
+// GetRuleDescription returns the RuleDescription field if it's non-nil, zero value otherwise.
+func (a *Alert) GetRuleDescription() string {
+       if a == nil || a.RuleDescription == nil {
+               return ""
+       }
+       return *a.RuleDescription
+}
+
+// GetRuleID returns the RuleID field if it's non-nil, zero value otherwise.
+func (a *Alert) GetRuleID() string {
+       if a == nil || a.RuleID == nil {
+               return ""
+       }
+       return *a.RuleID
+}
+
+// GetRuleSeverity returns the RuleSeverity field if it's non-nil, zero value otherwise.
+func (a *Alert) GetRuleSeverity() string {
+       if a == nil || a.RuleSeverity == nil {
+               return ""
+       }
+       return *a.RuleSeverity
+}
+
+// GetTool returns the Tool field.
+func (a *Alert) GetTool() *Tool {
+       if a == nil {
+               return nil
+       }
+       return a.Tool
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (a *Alert) GetURL() string {
+       if a == nil || a.URL == nil {
+               return ""
+       }
+       return *a.URL
+}
+
+// GetVerifiablePasswordAuthentication returns the VerifiablePasswordAuthentication field if it's non-nil, zero value otherwise.
+func (a *APIMeta) GetVerifiablePasswordAuthentication() bool {
+       if a == nil || a.VerifiablePasswordAuthentication == nil {
+               return false
+       }
+       return *a.VerifiablePasswordAuthentication
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (a *App) GetCreatedAt() Timestamp {
+       if a == nil || a.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *a.CreatedAt
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (a *App) GetDescription() string {
+       if a == nil || a.Description == nil {
+               return ""
+       }
+       return *a.Description
+}
+
+// GetExternalURL returns the ExternalURL field if it's non-nil, zero value otherwise.
+func (a *App) GetExternalURL() string {
+       if a == nil || a.ExternalURL == nil {
+               return ""
+       }
+       return *a.ExternalURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (a *App) GetHTMLURL() string {
+       if a == nil || a.HTMLURL == nil {
+               return ""
+       }
+       return *a.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (a *App) GetID() int64 {
+       if a == nil || a.ID == nil {
+               return 0
+       }
+       return *a.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (a *App) GetName() string {
+       if a == nil || a.Name == nil {
+               return ""
+       }
+       return *a.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (a *App) GetNodeID() string {
+       if a == nil || a.NodeID == nil {
+               return ""
+       }
+       return *a.NodeID
+}
+
+// GetOwner returns the Owner field.
+func (a *App) GetOwner() *User {
+       if a == nil {
+               return nil
+       }
+       return a.Owner
+}
+
+// GetPermissions returns the Permissions field.
+func (a *App) GetPermissions() *InstallationPermissions {
+       if a == nil {
+               return nil
+       }
+       return a.Permissions
+}
+
+// GetSlug returns the Slug field if it's non-nil, zero value otherwise.
+func (a *App) GetSlug() string {
+       if a == nil || a.Slug == nil {
+               return ""
+       }
+       return *a.Slug
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (a *App) GetUpdatedAt() Timestamp {
+       if a == nil || a.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *a.UpdatedAt
+}
+
+// GetClientID returns the ClientID field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetClientID() string {
+       if a == nil || a.ClientID == nil {
+               return ""
+       }
+       return *a.ClientID
+}
+
+// GetClientSecret returns the ClientSecret field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetClientSecret() string {
+       if a == nil || a.ClientSecret == nil {
+               return ""
+       }
+       return *a.ClientSecret
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetCreatedAt() Timestamp {
+       if a == nil || a.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *a.CreatedAt
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetDescription() string {
+       if a == nil || a.Description == nil {
+               return ""
+       }
+       return *a.Description
+}
+
+// GetExternalURL returns the ExternalURL field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetExternalURL() string {
+       if a == nil || a.ExternalURL == nil {
+               return ""
+       }
+       return *a.ExternalURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetHTMLURL() string {
+       if a == nil || a.HTMLURL == nil {
+               return ""
+       }
+       return *a.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetID() int64 {
+       if a == nil || a.ID == nil {
+               return 0
+       }
+       return *a.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetName() string {
+       if a == nil || a.Name == nil {
+               return ""
+       }
+       return *a.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetNodeID() string {
+       if a == nil || a.NodeID == nil {
+               return ""
+       }
+       return *a.NodeID
+}
+
+// GetOwner returns the Owner field.
+func (a *AppConfig) GetOwner() *User {
+       if a == nil {
+               return nil
+       }
+       return a.Owner
+}
+
+// GetPEM returns the PEM field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetPEM() string {
+       if a == nil || a.PEM == nil {
+               return ""
+       }
+       return *a.PEM
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetUpdatedAt() Timestamp {
+       if a == nil || a.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *a.UpdatedAt
+}
+
+// GetWebhookSecret returns the WebhookSecret field if it's non-nil, zero value otherwise.
+func (a *AppConfig) GetWebhookSecret() string {
+       if a == nil || a.WebhookSecret == nil {
+               return ""
+       }
+       return *a.WebhookSecret
+}
+
+// GetArchiveDownloadURL returns the ArchiveDownloadURL field if it's non-nil, zero value otherwise.
+func (a *Artifact) GetArchiveDownloadURL() string {
+       if a == nil || a.ArchiveDownloadURL == nil {
+               return ""
+       }
+       return *a.ArchiveDownloadURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (a *Artifact) GetCreatedAt() Timestamp {
+       if a == nil || a.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *a.CreatedAt
+}
+
+// GetExpired returns the Expired field if it's non-nil, zero value otherwise.
+func (a *Artifact) GetExpired() bool {
+       if a == nil || a.Expired == nil {
+               return false
+       }
+       return *a.Expired
+}
+
+// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
+func (a *Artifact) GetExpiresAt() Timestamp {
+       if a == nil || a.ExpiresAt == nil {
+               return Timestamp{}
+       }
+       return *a.ExpiresAt
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (a *Artifact) GetID() int64 {
+       if a == nil || a.ID == nil {
+               return 0
+       }
+       return *a.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (a *Artifact) GetName() string {
+       if a == nil || a.Name == nil {
+               return ""
+       }
+       return *a.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (a *Artifact) GetNodeID() string {
+       if a == nil || a.NodeID == nil {
+               return ""
+       }
+       return *a.NodeID
+}
+
+// GetSizeInBytes returns the SizeInBytes field if it's non-nil, zero value otherwise.
+func (a *Artifact) GetSizeInBytes() int64 {
+       if a == nil || a.SizeInBytes == nil {
+               return 0
+       }
+       return *a.SizeInBytes
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (a *ArtifactList) GetTotalCount() int64 {
+       if a == nil || a.TotalCount == nil {
+               return 0
+       }
+       return *a.TotalCount
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (a *Attachment) GetBody() string {
+       if a == nil || a.Body == nil {
+               return ""
+       }
+       return *a.Body
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (a *Attachment) GetID() int64 {
+       if a == nil || a.ID == nil {
+               return 0
+       }
+       return *a.ID
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (a *Attachment) GetTitle() string {
+       if a == nil || a.Title == nil {
+               return ""
+       }
+       return *a.Title
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetAction() string {
+       if a == nil || a.Action == nil {
+               return ""
+       }
+       return *a.Action
+}
+
+// GetActive returns the Active field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetActive() bool {
+       if a == nil || a.Active == nil {
+               return false
+       }
+       return *a.Active
+}
+
+// GetActiveWas returns the ActiveWas field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetActiveWas() bool {
+       if a == nil || a.ActiveWas == nil {
+               return false
+       }
+       return *a.ActiveWas
+}
+
+// GetActor returns the Actor field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetActor() string {
+       if a == nil || a.Actor == nil {
+               return ""
+       }
+       return *a.Actor
+}
+
+// GetBlockedUser returns the BlockedUser field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetBlockedUser() string {
+       if a == nil || a.BlockedUser == nil {
+               return ""
+       }
+       return *a.BlockedUser
+}
+
+// GetBusiness returns the Business field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetBusiness() string {
+       if a == nil || a.Business == nil {
+               return ""
+       }
+       return *a.Business
+}
+
+// GetCancelledAt returns the CancelledAt field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetCancelledAt() Timestamp {
+       if a == nil || a.CancelledAt == nil {
+               return Timestamp{}
+       }
+       return *a.CancelledAt
+}
+
+// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetCompletedAt() Timestamp {
+       if a == nil || a.CompletedAt == nil {
+               return Timestamp{}
+       }
+       return *a.CompletedAt
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetConclusion() string {
+       if a == nil || a.Conclusion == nil {
+               return ""
+       }
+       return *a.Conclusion
+}
+
+// GetConfig returns the Config field.
+func (a *AuditEntry) GetConfig() *HookConfig {
+       if a == nil {
+               return nil
+       }
+       return a.Config
+}
+
+// GetConfigWas returns the ConfigWas field.
+func (a *AuditEntry) GetConfigWas() *HookConfig {
+       if a == nil {
+               return nil
+       }
+       return a.ConfigWas
+}
+
+// GetContentType returns the ContentType field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetContentType() string {
+       if a == nil || a.ContentType == nil {
+               return ""
+       }
+       return *a.ContentType
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetCreatedAt() Timestamp {
+       if a == nil || a.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *a.CreatedAt
+}
+
+// GetDeployKeyFingerprint returns the DeployKeyFingerprint field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetDeployKeyFingerprint() string {
+       if a == nil || a.DeployKeyFingerprint == nil {
+               return ""
+       }
+       return *a.DeployKeyFingerprint
+}
+
+// GetDocumentID returns the DocumentID field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetDocumentID() string {
+       if a == nil || a.DocumentID == nil {
+               return ""
+       }
+       return *a.DocumentID
+}
+
+// GetEmoji returns the Emoji field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetEmoji() string {
+       if a == nil || a.Emoji == nil {
+               return ""
+       }
+       return *a.Emoji
+}
+
+// GetEnvironmentName returns the EnvironmentName field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetEnvironmentName() string {
+       if a == nil || a.EnvironmentName == nil {
+               return ""
+       }
+       return *a.EnvironmentName
+}
+
+// GetEvent returns the Event field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetEvent() string {
+       if a == nil || a.Event == nil {
+               return ""
+       }
+       return *a.Event
+}
+
+// GetExplanation returns the Explanation field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetExplanation() string {
+       if a == nil || a.Explanation == nil {
+               return ""
+       }
+       return *a.Explanation
+}
+
+// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetFingerprint() string {
+       if a == nil || a.Fingerprint == nil {
+               return ""
+       }
+       return *a.Fingerprint
+}
+
+// GetHeadBranch returns the HeadBranch field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetHeadBranch() string {
+       if a == nil || a.HeadBranch == nil {
+               return ""
+       }
+       return *a.HeadBranch
+}
+
+// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetHeadSHA() string {
+       if a == nil || a.HeadSHA == nil {
+               return ""
+       }
+       return *a.HeadSHA
+}
+
+// GetHookID returns the HookID field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetHookID() int64 {
+       if a == nil || a.HookID == nil {
+               return 0
+       }
+       return *a.HookID
+}
+
+// GetIsHostedRunner returns the IsHostedRunner field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetIsHostedRunner() bool {
+       if a == nil || a.IsHostedRunner == nil {
+               return false
+       }
+       return *a.IsHostedRunner
+}
+
+// GetJobName returns the JobName field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetJobName() string {
+       if a == nil || a.JobName == nil {
+               return ""
+       }
+       return *a.JobName
+}
+
+// GetLimitedAvailability returns the LimitedAvailability field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetLimitedAvailability() bool {
+       if a == nil || a.LimitedAvailability == nil {
+               return false
+       }
+       return *a.LimitedAvailability
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetMessage() string {
+       if a == nil || a.Message == nil {
+               return ""
+       }
+       return *a.Message
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetName() string {
+       if a == nil || a.Name == nil {
+               return ""
+       }
+       return *a.Name
+}
+
+// GetOldUser returns the OldUser field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetOldUser() string {
+       if a == nil || a.OldUser == nil {
+               return ""
+       }
+       return *a.OldUser
+}
+
+// GetOpenSSHPublicKey returns the OpenSSHPublicKey field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetOpenSSHPublicKey() string {
+       if a == nil || a.OpenSSHPublicKey == nil {
+               return ""
+       }
+       return *a.OpenSSHPublicKey
+}
+
+// GetOrg returns the Org field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetOrg() string {
+       if a == nil || a.Org == nil {
+               return ""
+       }
+       return *a.Org
+}
+
+// GetPreviousVisibility returns the PreviousVisibility field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetPreviousVisibility() string {
+       if a == nil || a.PreviousVisibility == nil {
+               return ""
+       }
+       return *a.PreviousVisibility
+}
+
+// GetReadOnly returns the ReadOnly field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetReadOnly() string {
+       if a == nil || a.ReadOnly == nil {
+               return ""
+       }
+       return *a.ReadOnly
+}
+
+// GetRepo returns the Repo field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetRepo() string {
+       if a == nil || a.Repo == nil {
+               return ""
+       }
+       return *a.Repo
+}
+
+// GetRepository returns the Repository field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetRepository() string {
+       if a == nil || a.Repository == nil {
+               return ""
+       }
+       return *a.Repository
+}
+
+// GetRepositoryPublic returns the RepositoryPublic field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetRepositoryPublic() bool {
+       if a == nil || a.RepositoryPublic == nil {
+               return false
+       }
+       return *a.RepositoryPublic
+}
+
+// GetRunnerGroupID returns the RunnerGroupID field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetRunnerGroupID() string {
+       if a == nil || a.RunnerGroupID == nil {
+               return ""
+       }
+       return *a.RunnerGroupID
+}
+
+// GetRunnerGroupName returns the RunnerGroupName field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetRunnerGroupName() string {
+       if a == nil || a.RunnerGroupName == nil {
+               return ""
+       }
+       return *a.RunnerGroupName
+}
+
+// GetRunnerID returns the RunnerID field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetRunnerID() string {
+       if a == nil || a.RunnerID == nil {
+               return ""
+       }
+       return *a.RunnerID
+}
+
+// GetRunnerName returns the RunnerName field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetRunnerName() string {
+       if a == nil || a.RunnerName == nil {
+               return ""
+       }
+       return *a.RunnerName
+}
+
+// GetSourceVersion returns the SourceVersion field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetSourceVersion() string {
+       if a == nil || a.SourceVersion == nil {
+               return ""
+       }
+       return *a.SourceVersion
+}
+
+// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetStartedAt() Timestamp {
+       if a == nil || a.StartedAt == nil {
+               return Timestamp{}
+       }
+       return *a.StartedAt
+}
+
+// GetTargetLogin returns the TargetLogin field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetTargetLogin() string {
+       if a == nil || a.TargetLogin == nil {
+               return ""
+       }
+       return *a.TargetLogin
+}
+
+// GetTargetVersion returns the TargetVersion field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetTargetVersion() string {
+       if a == nil || a.TargetVersion == nil {
+               return ""
+       }
+       return *a.TargetVersion
+}
+
+// GetTeam returns the Team field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetTeam() string {
+       if a == nil || a.Team == nil {
+               return ""
+       }
+       return *a.Team
+}
+
+// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetTimestamp() Timestamp {
+       if a == nil || a.Timestamp == nil {
+               return Timestamp{}
+       }
+       return *a.Timestamp
+}
+
+// GetTransportProtocol returns the TransportProtocol field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetTransportProtocol() int {
+       if a == nil || a.TransportProtocol == nil {
+               return 0
+       }
+       return *a.TransportProtocol
+}
+
+// GetTransportProtocolName returns the TransportProtocolName field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetTransportProtocolName() string {
+       if a == nil || a.TransportProtocolName == nil {
+               return ""
+       }
+       return *a.TransportProtocolName
+}
+
+// GetTriggerID returns the TriggerID field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetTriggerID() int64 {
+       if a == nil || a.TriggerID == nil {
+               return 0
+       }
+       return *a.TriggerID
+}
+
+// GetUser returns the User field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetUser() string {
+       if a == nil || a.User == nil {
+               return ""
+       }
+       return *a.User
+}
+
+// GetVisibility returns the Visibility field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetVisibility() string {
+       if a == nil || a.Visibility == nil {
+               return ""
+       }
+       return *a.Visibility
+}
+
+// GetWorkflowID returns the WorkflowID field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetWorkflowID() int64 {
+       if a == nil || a.WorkflowID == nil {
+               return 0
+       }
+       return *a.WorkflowID
+}
+
+// GetWorkflowRunID returns the WorkflowRunID field if it's non-nil, zero value otherwise.
+func (a *AuditEntry) GetWorkflowRunID() int64 {
+       if a == nil || a.WorkflowRunID == nil {
+               return 0
+       }
+       return *a.WorkflowRunID
+}
+
+// GetApp returns the App field.
+func (a *Authorization) GetApp() *AuthorizationApp {
+       if a == nil {
+               return nil
+       }
+       return a.App
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (a *Authorization) GetCreatedAt() Timestamp {
+       if a == nil || a.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *a.CreatedAt
+}
+
+// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise.
+func (a *Authorization) GetFingerprint() string {
+       if a == nil || a.Fingerprint == nil {
+               return ""
+       }
+       return *a.Fingerprint
+}
+
+// GetHashedToken returns the HashedToken field if it's non-nil, zero value otherwise.
+func (a *Authorization) GetHashedToken() string {
+       if a == nil || a.HashedToken == nil {
+               return ""
+       }
+       return *a.HashedToken
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (a *Authorization) GetID() int64 {
+       if a == nil || a.ID == nil {
+               return 0
+       }
+       return *a.ID
+}
+
+// GetNote returns the Note field if it's non-nil, zero value otherwise.
+func (a *Authorization) GetNote() string {
+       if a == nil || a.Note == nil {
+               return ""
+       }
+       return *a.Note
+}
+
+// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise.
+func (a *Authorization) GetNoteURL() string {
+       if a == nil || a.NoteURL == nil {
+               return ""
+       }
+       return *a.NoteURL
+}
+
+// GetToken returns the Token field if it's non-nil, zero value otherwise.
+func (a *Authorization) GetToken() string {
+       if a == nil || a.Token == nil {
+               return ""
+       }
+       return *a.Token
+}
+
+// GetTokenLastEight returns the TokenLastEight field if it's non-nil, zero value otherwise.
+func (a *Authorization) GetTokenLastEight() string {
+       if a == nil || a.TokenLastEight == nil {
+               return ""
+       }
+       return *a.TokenLastEight
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (a *Authorization) GetUpdatedAt() Timestamp {
+       if a == nil || a.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *a.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (a *Authorization) GetURL() string {
+       if a == nil || a.URL == nil {
+               return ""
+       }
+       return *a.URL
+}
+
+// GetUser returns the User field.
+func (a *Authorization) GetUser() *User {
+       if a == nil {
+               return nil
+       }
+       return a.User
+}
+
+// GetClientID returns the ClientID field if it's non-nil, zero value otherwise.
+func (a *AuthorizationApp) GetClientID() string {
+       if a == nil || a.ClientID == nil {
+               return ""
+       }
+       return *a.ClientID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (a *AuthorizationApp) GetName() string {
+       if a == nil || a.Name == nil {
+               return ""
+       }
+       return *a.Name
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (a *AuthorizationApp) GetURL() string {
+       if a == nil || a.URL == nil {
+               return ""
+       }
+       return *a.URL
+}
+
+// GetClientID returns the ClientID field if it's non-nil, zero value otherwise.
+func (a *AuthorizationRequest) GetClientID() string {
+       if a == nil || a.ClientID == nil {
+               return ""
+       }
+       return *a.ClientID
+}
+
+// GetClientSecret returns the ClientSecret field if it's non-nil, zero value otherwise.
+func (a *AuthorizationRequest) GetClientSecret() string {
+       if a == nil || a.ClientSecret == nil {
+               return ""
+       }
+       return *a.ClientSecret
+}
+
+// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise.
+func (a *AuthorizationRequest) GetFingerprint() string {
+       if a == nil || a.Fingerprint == nil {
+               return ""
+       }
+       return *a.Fingerprint
+}
+
+// GetNote returns the Note field if it's non-nil, zero value otherwise.
+func (a *AuthorizationRequest) GetNote() string {
+       if a == nil || a.Note == nil {
+               return ""
+       }
+       return *a.Note
+}
+
+// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise.
+func (a *AuthorizationRequest) GetNoteURL() string {
+       if a == nil || a.NoteURL == nil {
+               return ""
+       }
+       return *a.NoteURL
+}
+
+// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise.
+func (a *AuthorizationUpdateRequest) GetFingerprint() string {
+       if a == nil || a.Fingerprint == nil {
+               return ""
+       }
+       return *a.Fingerprint
+}
+
+// GetNote returns the Note field if it's non-nil, zero value otherwise.
+func (a *AuthorizationUpdateRequest) GetNote() string {
+       if a == nil || a.Note == nil {
+               return ""
+       }
+       return *a.Note
+}
+
+// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise.
+func (a *AuthorizationUpdateRequest) GetNoteURL() string {
+       if a == nil || a.NoteURL == nil {
+               return ""
+       }
+       return *a.NoteURL
+}
+
+// GetAppID returns the AppID field if it's non-nil, zero value otherwise.
+func (a *AutoTriggerCheck) GetAppID() int64 {
+       if a == nil || a.AppID == nil {
+               return 0
+       }
+       return *a.AppID
+}
+
+// GetSetting returns the Setting field if it's non-nil, zero value otherwise.
+func (a *AutoTriggerCheck) GetSetting() bool {
+       if a == nil || a.Setting == nil {
+               return false
+       }
+       return *a.Setting
+}
+
+// GetContent returns the Content field if it's non-nil, zero value otherwise.
+func (b *Blob) GetContent() string {
+       if b == nil || b.Content == nil {
+               return ""
+       }
+       return *b.Content
+}
+
+// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise.
+func (b *Blob) GetEncoding() string {
+       if b == nil || b.Encoding == nil {
+               return ""
+       }
+       return *b.Encoding
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (b *Blob) GetNodeID() string {
+       if b == nil || b.NodeID == nil {
+               return ""
+       }
+       return *b.NodeID
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (b *Blob) GetSHA() string {
+       if b == nil || b.SHA == nil {
+               return ""
+       }
+       return *b.SHA
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (b *Blob) GetSize() int {
+       if b == nil || b.Size == nil {
+               return 0
+       }
+       return *b.Size
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (b *Blob) GetURL() string {
+       if b == nil || b.URL == nil {
+               return ""
+       }
+       return *b.URL
+}
+
+// GetCommit returns the Commit field.
+func (b *Branch) GetCommit() *RepositoryCommit {
+       if b == nil {
+               return nil
+       }
+       return b.Commit
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (b *Branch) GetName() string {
+       if b == nil || b.Name == nil {
+               return ""
+       }
+       return *b.Name
+}
+
+// GetProtected returns the Protected field if it's non-nil, zero value otherwise.
+func (b *Branch) GetProtected() bool {
+       if b == nil || b.Protected == nil {
+               return false
+       }
+       return *b.Protected
+}
+
+// GetCommit returns the Commit field.
+func (b *BranchCommit) GetCommit() *Commit {
+       if b == nil {
+               return nil
+       }
+       return b.Commit
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (b *BranchCommit) GetName() string {
+       if b == nil || b.Name == nil {
+               return ""
+       }
+       return *b.Name
+}
+
+// GetProtected returns the Protected field if it's non-nil, zero value otherwise.
+func (b *BranchCommit) GetProtected() bool {
+       if b == nil || b.Protected == nil {
+               return false
+       }
+       return *b.Protected
+}
+
+// GetProtected returns the Protected field if it's non-nil, zero value otherwise.
+func (b *BranchListOptions) GetProtected() bool {
+       if b == nil || b.Protected == nil {
+               return false
+       }
+       return *b.Protected
+}
+
+// GetCustomBranchPolicies returns the CustomBranchPolicies field if it's non-nil, zero value otherwise.
+func (b *BranchPolicy) GetCustomBranchPolicies() bool {
+       if b == nil || b.CustomBranchPolicies == nil {
+               return false
+       }
+       return *b.CustomBranchPolicies
+}
+
+// GetProtectedBranches returns the ProtectedBranches field if it's non-nil, zero value otherwise.
+func (b *BranchPolicy) GetProtectedBranches() bool {
+       if b == nil || b.ProtectedBranches == nil {
+               return false
+       }
+       return *b.ProtectedBranches
+}
+
+// GetApp returns the App field.
+func (c *CheckRun) GetApp() *App {
+       if c == nil {
+               return nil
+       }
+       return c.App
+}
+
+// GetCheckSuite returns the CheckSuite field.
+func (c *CheckRun) GetCheckSuite() *CheckSuite {
+       if c == nil {
+               return nil
+       }
+       return c.CheckSuite
+}
+
+// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetCompletedAt() Timestamp {
+       if c == nil || c.CompletedAt == nil {
+               return Timestamp{}
+       }
+       return *c.CompletedAt
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetConclusion() string {
+       if c == nil || c.Conclusion == nil {
+               return ""
+       }
+       return *c.Conclusion
+}
+
+// GetDetailsURL returns the DetailsURL field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetDetailsURL() string {
+       if c == nil || c.DetailsURL == nil {
+               return ""
+       }
+       return *c.DetailsURL
+}
+
+// GetExternalID returns the ExternalID field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetExternalID() string {
+       if c == nil || c.ExternalID == nil {
+               return ""
+       }
+       return *c.ExternalID
+}
+
+// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetHeadSHA() string {
+       if c == nil || c.HeadSHA == nil {
+               return ""
+       }
+       return *c.HeadSHA
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetHTMLURL() string {
+       if c == nil || c.HTMLURL == nil {
+               return ""
+       }
+       return *c.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetID() int64 {
+       if c == nil || c.ID == nil {
+               return 0
+       }
+       return *c.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetName() string {
+       if c == nil || c.Name == nil {
+               return ""
+       }
+       return *c.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetNodeID() string {
+       if c == nil || c.NodeID == nil {
+               return ""
+       }
+       return *c.NodeID
+}
+
+// GetOutput returns the Output field.
+func (c *CheckRun) GetOutput() *CheckRunOutput {
+       if c == nil {
+               return nil
+       }
+       return c.Output
+}
+
+// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetStartedAt() Timestamp {
+       if c == nil || c.StartedAt == nil {
+               return Timestamp{}
+       }
+       return *c.StartedAt
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetStatus() string {
+       if c == nil || c.Status == nil {
+               return ""
+       }
+       return *c.Status
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (c *CheckRun) GetURL() string {
+       if c == nil || c.URL == nil {
+               return ""
+       }
+       return *c.URL
+}
+
+// GetAnnotationLevel returns the AnnotationLevel field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetAnnotationLevel() string {
+       if c == nil || c.AnnotationLevel == nil {
+               return ""
+       }
+       return *c.AnnotationLevel
+}
+
+// GetEndColumn returns the EndColumn field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetEndColumn() int {
+       if c == nil || c.EndColumn == nil {
+               return 0
+       }
+       return *c.EndColumn
+}
+
+// GetEndLine returns the EndLine field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetEndLine() int {
+       if c == nil || c.EndLine == nil {
+               return 0
+       }
+       return *c.EndLine
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetMessage() string {
+       if c == nil || c.Message == nil {
+               return ""
+       }
+       return *c.Message
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetPath() string {
+       if c == nil || c.Path == nil {
+               return ""
+       }
+       return *c.Path
+}
+
+// GetRawDetails returns the RawDetails field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetRawDetails() string {
+       if c == nil || c.RawDetails == nil {
+               return ""
+       }
+       return *c.RawDetails
+}
+
+// GetStartColumn returns the StartColumn field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetStartColumn() int {
+       if c == nil || c.StartColumn == nil {
+               return 0
+       }
+       return *c.StartColumn
+}
+
+// GetStartLine returns the StartLine field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetStartLine() int {
+       if c == nil || c.StartLine == nil {
+               return 0
+       }
+       return *c.StartLine
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (c *CheckRunAnnotation) GetTitle() string {
+       if c == nil || c.Title == nil {
+               return ""
+       }
+       return *c.Title
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (c *CheckRunEvent) GetAction() string {
+       if c == nil || c.Action == nil {
+               return ""
+       }
+       return *c.Action
+}
+
+// GetCheckRun returns the CheckRun field.
+func (c *CheckRunEvent) GetCheckRun() *CheckRun {
+       if c == nil {
+               return nil
+       }
+       return c.CheckRun
+}
+
+// GetInstallation returns the Installation field.
+func (c *CheckRunEvent) GetInstallation() *Installation {
+       if c == nil {
+               return nil
+       }
+       return c.Installation
+}
+
+// GetOrg returns the Org field.
+func (c *CheckRunEvent) GetOrg() *Organization {
+       if c == nil {
+               return nil
+       }
+       return c.Org
+}
+
+// GetRepo returns the Repo field.
+func (c *CheckRunEvent) GetRepo() *Repository {
+       if c == nil {
+               return nil
+       }
+       return c.Repo
+}
+
+// GetRequestedAction returns the RequestedAction field.
+func (c *CheckRunEvent) GetRequestedAction() *RequestedAction {
+       if c == nil {
+               return nil
+       }
+       return c.RequestedAction
+}
+
+// GetSender returns the Sender field.
+func (c *CheckRunEvent) GetSender() *User {
+       if c == nil {
+               return nil
+       }
+       return c.Sender
+}
+
+// GetAlt returns the Alt field if it's non-nil, zero value otherwise.
+func (c *CheckRunImage) GetAlt() string {
+       if c == nil || c.Alt == nil {
+               return ""
+       }
+       return *c.Alt
+}
+
+// GetCaption returns the Caption field if it's non-nil, zero value otherwise.
+func (c *CheckRunImage) GetCaption() string {
+       if c == nil || c.Caption == nil {
+               return ""
+       }
+       return *c.Caption
+}
+
+// GetImageURL returns the ImageURL field if it's non-nil, zero value otherwise.
+func (c *CheckRunImage) GetImageURL() string {
+       if c == nil || c.ImageURL == nil {
+               return ""
+       }
+       return *c.ImageURL
+}
+
+// GetAnnotationsCount returns the AnnotationsCount field if it's non-nil, zero value otherwise.
+func (c *CheckRunOutput) GetAnnotationsCount() int {
+       if c == nil || c.AnnotationsCount == nil {
+               return 0
+       }
+       return *c.AnnotationsCount
+}
+
+// GetAnnotationsURL returns the AnnotationsURL field if it's non-nil, zero value otherwise.
+func (c *CheckRunOutput) GetAnnotationsURL() string {
+       if c == nil || c.AnnotationsURL == nil {
+               return ""
+       }
+       return *c.AnnotationsURL
+}
+
+// GetSummary returns the Summary field if it's non-nil, zero value otherwise.
+func (c *CheckRunOutput) GetSummary() string {
+       if c == nil || c.Summary == nil {
+               return ""
+       }
+       return *c.Summary
+}
+
+// GetText returns the Text field if it's non-nil, zero value otherwise.
+func (c *CheckRunOutput) GetText() string {
+       if c == nil || c.Text == nil {
+               return ""
+       }
+       return *c.Text
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (c *CheckRunOutput) GetTitle() string {
+       if c == nil || c.Title == nil {
+               return ""
+       }
+       return *c.Title
+}
+
+// GetAfterSHA returns the AfterSHA field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetAfterSHA() string {
+       if c == nil || c.AfterSHA == nil {
+               return ""
+       }
+       return *c.AfterSHA
+}
+
+// GetApp returns the App field.
+func (c *CheckSuite) GetApp() *App {
+       if c == nil {
+               return nil
+       }
+       return c.App
+}
+
+// GetBeforeSHA returns the BeforeSHA field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetBeforeSHA() string {
+       if c == nil || c.BeforeSHA == nil {
+               return ""
+       }
+       return *c.BeforeSHA
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetConclusion() string {
+       if c == nil || c.Conclusion == nil {
+               return ""
+       }
+       return *c.Conclusion
+}
+
+// GetHeadBranch returns the HeadBranch field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetHeadBranch() string {
+       if c == nil || c.HeadBranch == nil {
+               return ""
+       }
+       return *c.HeadBranch
+}
+
+// GetHeadCommit returns the HeadCommit field.
+func (c *CheckSuite) GetHeadCommit() *Commit {
+       if c == nil {
+               return nil
+       }
+       return c.HeadCommit
+}
+
+// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetHeadSHA() string {
+       if c == nil || c.HeadSHA == nil {
+               return ""
+       }
+       return *c.HeadSHA
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetID() int64 {
+       if c == nil || c.ID == nil {
+               return 0
+       }
+       return *c.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetNodeID() string {
+       if c == nil || c.NodeID == nil {
+               return ""
+       }
+       return *c.NodeID
+}
+
+// GetRepository returns the Repository field.
+func (c *CheckSuite) GetRepository() *Repository {
+       if c == nil {
+               return nil
+       }
+       return c.Repository
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetStatus() string {
+       if c == nil || c.Status == nil {
+               return ""
+       }
+       return *c.Status
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (c *CheckSuite) GetURL() string {
+       if c == nil || c.URL == nil {
+               return ""
+       }
+       return *c.URL
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (c *CheckSuiteEvent) GetAction() string {
+       if c == nil || c.Action == nil {
+               return ""
+       }
+       return *c.Action
+}
+
+// GetCheckSuite returns the CheckSuite field.
+func (c *CheckSuiteEvent) GetCheckSuite() *CheckSuite {
+       if c == nil {
+               return nil
+       }
+       return c.CheckSuite
+}
+
+// GetInstallation returns the Installation field.
+func (c *CheckSuiteEvent) GetInstallation() *Installation {
+       if c == nil {
+               return nil
+       }
+       return c.Installation
+}
+
+// GetOrg returns the Org field.
+func (c *CheckSuiteEvent) GetOrg() *Organization {
+       if c == nil {
+               return nil
+       }
+       return c.Org
+}
+
+// GetRepo returns the Repo field.
+func (c *CheckSuiteEvent) GetRepo() *Repository {
+       if c == nil {
+               return nil
+       }
+       return c.Repo
+}
+
+// GetSender returns the Sender field.
+func (c *CheckSuiteEvent) GetSender() *User {
+       if c == nil {
+               return nil
+       }
+       return c.Sender
+}
+
+// GetPreferences returns the Preferences field.
+func (c *CheckSuitePreferenceResults) GetPreferences() *PreferenceList {
+       if c == nil {
+               return nil
+       }
+       return c.Preferences
+}
+
+// GetRepository returns the Repository field.
+func (c *CheckSuitePreferenceResults) GetRepository() *Repository {
+       if c == nil {
+               return nil
+       }
+       return c.Repository
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (c *CodeOfConduct) GetBody() string {
+       if c == nil || c.Body == nil {
+               return ""
+       }
+       return *c.Body
+}
+
+// GetKey returns the Key field if it's non-nil, zero value otherwise.
+func (c *CodeOfConduct) GetKey() string {
+       if c == nil || c.Key == nil {
+               return ""
+       }
+       return *c.Key
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (c *CodeOfConduct) GetName() string {
+       if c == nil || c.Name == nil {
+               return ""
+       }
+       return *c.Name
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (c *CodeOfConduct) GetURL() string {
+       if c == nil || c.URL == nil {
+               return ""
+       }
+       return *c.URL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (c *CodeResult) GetHTMLURL() string {
+       if c == nil || c.HTMLURL == nil {
+               return ""
+       }
+       return *c.HTMLURL
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (c *CodeResult) GetName() string {
+       if c == nil || c.Name == nil {
+               return ""
+       }
+       return *c.Name
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (c *CodeResult) GetPath() string {
+       if c == nil || c.Path == nil {
+               return ""
+       }
+       return *c.Path
+}
+
+// GetRepository returns the Repository field.
+func (c *CodeResult) GetRepository() *Repository {
+       if c == nil {
+               return nil
+       }
+       return c.Repository
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (c *CodeResult) GetSHA() string {
+       if c == nil || c.SHA == nil {
+               return ""
+       }
+       return *c.SHA
+}
+
+// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
+func (c *CodeSearchResult) GetIncompleteResults() bool {
+       if c == nil || c.IncompleteResults == nil {
+               return false
+       }
+       return *c.IncompleteResults
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (c *CodeSearchResult) GetTotal() int {
+       if c == nil || c.Total == nil {
+               return 0
+       }
+       return *c.Total
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (c *CollaboratorInvitation) GetCreatedAt() Timestamp {
+       if c == nil || c.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *c.CreatedAt
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (c *CollaboratorInvitation) GetHTMLURL() string {
+       if c == nil || c.HTMLURL == nil {
+               return ""
+       }
+       return *c.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (c *CollaboratorInvitation) GetID() int64 {
+       if c == nil || c.ID == nil {
+               return 0
+       }
+       return *c.ID
+}
+
+// GetInvitee returns the Invitee field.
+func (c *CollaboratorInvitation) GetInvitee() *User {
+       if c == nil {
+               return nil
+       }
+       return c.Invitee
+}
+
+// GetInviter returns the Inviter field.
+func (c *CollaboratorInvitation) GetInviter() *User {
+       if c == nil {
+               return nil
+       }
+       return c.Inviter
+}
+
+// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise.
+func (c *CollaboratorInvitation) GetPermissions() string {
+       if c == nil || c.Permissions == nil {
+               return ""
+       }
+       return *c.Permissions
+}
+
+// GetRepo returns the Repo field.
+func (c *CollaboratorInvitation) GetRepo() *Repository {
+       if c == nil {
+               return nil
+       }
+       return c.Repo
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (c *CollaboratorInvitation) GetURL() string {
+       if c == nil || c.URL == nil {
+               return ""
+       }
+       return *c.URL
+}
+
+// GetCommitURL returns the CommitURL field if it's non-nil, zero value otherwise.
+func (c *CombinedStatus) GetCommitURL() string {
+       if c == nil || c.CommitURL == nil {
+               return ""
+       }
+       return *c.CommitURL
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (c *CombinedStatus) GetName() string {
+       if c == nil || c.Name == nil {
+               return ""
+       }
+       return *c.Name
+}
+
+// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
+func (c *CombinedStatus) GetRepositoryURL() string {
+       if c == nil || c.RepositoryURL == nil {
+               return ""
+       }
+       return *c.RepositoryURL
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (c *CombinedStatus) GetSHA() string {
+       if c == nil || c.SHA == nil {
+               return ""
+       }
+       return *c.SHA
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (c *CombinedStatus) GetState() string {
+       if c == nil || c.State == nil {
+               return ""
+       }
+       return *c.State
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (c *CombinedStatus) GetTotalCount() int {
+       if c == nil || c.TotalCount == nil {
+               return 0
+       }
+       return *c.TotalCount
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (c *Comment) GetCreatedAt() time.Time {
+       if c == nil || c.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *c.CreatedAt
+}
+
+// GetTotalCommitComments returns the TotalCommitComments field if it's non-nil, zero value otherwise.
+func (c *CommentStats) GetTotalCommitComments() int {
+       if c == nil || c.TotalCommitComments == nil {
+               return 0
+       }
+       return *c.TotalCommitComments
+}
+
+// GetTotalGistComments returns the TotalGistComments field if it's non-nil, zero value otherwise.
+func (c *CommentStats) GetTotalGistComments() int {
+       if c == nil || c.TotalGistComments == nil {
+               return 0
+       }
+       return *c.TotalGistComments
+}
+
+// GetTotalIssueComments returns the TotalIssueComments field if it's non-nil, zero value otherwise.
+func (c *CommentStats) GetTotalIssueComments() int {
+       if c == nil || c.TotalIssueComments == nil {
+               return 0
+       }
+       return *c.TotalIssueComments
+}
+
+// GetTotalPullRequestComments returns the TotalPullRequestComments field if it's non-nil, zero value otherwise.
+func (c *CommentStats) GetTotalPullRequestComments() int {
+       if c == nil || c.TotalPullRequestComments == nil {
+               return 0
+       }
+       return *c.TotalPullRequestComments
+}
+
+// GetAuthor returns the Author field.
+func (c *Commit) GetAuthor() *CommitAuthor {
+       if c == nil {
+               return nil
+       }
+       return c.Author
+}
+
+// GetCommentCount returns the CommentCount field if it's non-nil, zero value otherwise.
+func (c *Commit) GetCommentCount() int {
+       if c == nil || c.CommentCount == nil {
+               return 0
+       }
+       return *c.CommentCount
+}
+
+// GetCommitter returns the Committer field.
+func (c *Commit) GetCommitter() *CommitAuthor {
+       if c == nil {
+               return nil
+       }
+       return c.Committer
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (c *Commit) GetHTMLURL() string {
+       if c == nil || c.HTMLURL == nil {
+               return ""
+       }
+       return *c.HTMLURL
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (c *Commit) GetMessage() string {
+       if c == nil || c.Message == nil {
+               return ""
+       }
+       return *c.Message
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (c *Commit) GetNodeID() string {
+       if c == nil || c.NodeID == nil {
+               return ""
+       }
+       return *c.NodeID
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (c *Commit) GetSHA() string {
+       if c == nil || c.SHA == nil {
+               return ""
+       }
+       return *c.SHA
+}
+
+// GetStats returns the Stats field.
+func (c *Commit) GetStats() *CommitStats {
+       if c == nil {
+               return nil
+       }
+       return c.Stats
+}
+
+// GetTree returns the Tree field.
+func (c *Commit) GetTree() *Tree {
+       if c == nil {
+               return nil
+       }
+       return c.Tree
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (c *Commit) GetURL() string {
+       if c == nil || c.URL == nil {
+               return ""
+       }
+       return *c.URL
+}
+
+// GetVerification returns the Verification field.
+func (c *Commit) GetVerification() *SignatureVerification {
+       if c == nil {
+               return nil
+       }
+       return c.Verification
+}
+
+// GetDate returns the Date field if it's non-nil, zero value otherwise.
+func (c *CommitAuthor) GetDate() time.Time {
+       if c == nil || c.Date == nil {
+               return time.Time{}
+       }
+       return *c.Date
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (c *CommitAuthor) GetEmail() string {
+       if c == nil || c.Email == nil {
+               return ""
+       }
+       return *c.Email
+}
+
+// GetLogin returns the Login field if it's non-nil, zero value otherwise.
+func (c *CommitAuthor) GetLogin() string {
+       if c == nil || c.Login == nil {
+               return ""
+       }
+       return *c.Login
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (c *CommitAuthor) GetName() string {
+       if c == nil || c.Name == nil {
+               return ""
+       }
+       return *c.Name
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (c *CommitCommentEvent) GetAction() string {
+       if c == nil || c.Action == nil {
+               return ""
+       }
+       return *c.Action
+}
+
+// GetComment returns the Comment field.
+func (c *CommitCommentEvent) GetComment() *RepositoryComment {
+       if c == nil {
+               return nil
+       }
+       return c.Comment
+}
+
+// GetInstallation returns the Installation field.
+func (c *CommitCommentEvent) GetInstallation() *Installation {
+       if c == nil {
+               return nil
+       }
+       return c.Installation
+}
+
+// GetRepo returns the Repo field.
+func (c *CommitCommentEvent) GetRepo() *Repository {
+       if c == nil {
+               return nil
+       }
+       return c.Repo
+}
+
+// GetSender returns the Sender field.
+func (c *CommitCommentEvent) GetSender() *User {
+       if c == nil {
+               return nil
+       }
+       return c.Sender
+}
+
+// GetAdditions returns the Additions field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetAdditions() int {
+       if c == nil || c.Additions == nil {
+               return 0
+       }
+       return *c.Additions
+}
+
+// GetBlobURL returns the BlobURL field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetBlobURL() string {
+       if c == nil || c.BlobURL == nil {
+               return ""
+       }
+       return *c.BlobURL
+}
+
+// GetChanges returns the Changes field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetChanges() int {
+       if c == nil || c.Changes == nil {
+               return 0
+       }
+       return *c.Changes
+}
+
+// GetContentsURL returns the ContentsURL field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetContentsURL() string {
+       if c == nil || c.ContentsURL == nil {
+               return ""
+       }
+       return *c.ContentsURL
+}
+
+// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetDeletions() int {
+       if c == nil || c.Deletions == nil {
+               return 0
+       }
+       return *c.Deletions
+}
+
+// GetFilename returns the Filename field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetFilename() string {
+       if c == nil || c.Filename == nil {
+               return ""
+       }
+       return *c.Filename
+}
+
+// GetPatch returns the Patch field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetPatch() string {
+       if c == nil || c.Patch == nil {
+               return ""
+       }
+       return *c.Patch
+}
+
+// GetPreviousFilename returns the PreviousFilename field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetPreviousFilename() string {
+       if c == nil || c.PreviousFilename == nil {
+               return ""
+       }
+       return *c.PreviousFilename
+}
+
+// GetRawURL returns the RawURL field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetRawURL() string {
+       if c == nil || c.RawURL == nil {
+               return ""
+       }
+       return *c.RawURL
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetSHA() string {
+       if c == nil || c.SHA == nil {
+               return ""
+       }
+       return *c.SHA
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (c *CommitFile) GetStatus() string {
+       if c == nil || c.Status == nil {
+               return ""
+       }
+       return *c.Status
+}
+
+// GetAuthor returns the Author field.
+func (c *CommitResult) GetAuthor() *User {
+       if c == nil {
+               return nil
+       }
+       return c.Author
+}
+
+// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
+func (c *CommitResult) GetCommentsURL() string {
+       if c == nil || c.CommentsURL == nil {
+               return ""
+       }
+       return *c.CommentsURL
+}
+
+// GetCommit returns the Commit field.
+func (c *CommitResult) GetCommit() *Commit {
+       if c == nil {
+               return nil
+       }
+       return c.Commit
+}
+
+// GetCommitter returns the Committer field.
+func (c *CommitResult) GetCommitter() *User {
+       if c == nil {
+               return nil
+       }
+       return c.Committer
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (c *CommitResult) GetHTMLURL() string {
+       if c == nil || c.HTMLURL == nil {
+               return ""
+       }
+       return *c.HTMLURL
+}
+
+// GetRepository returns the Repository field.
+func (c *CommitResult) GetRepository() *Repository {
+       if c == nil {
+               return nil
+       }
+       return c.Repository
+}
+
+// GetScore returns the Score field.
+func (c *CommitResult) GetScore() *float64 {
+       if c == nil {
+               return nil
+       }
+       return c.Score
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (c *CommitResult) GetSHA() string {
+       if c == nil || c.SHA == nil {
+               return ""
+       }
+       return *c.SHA
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (c *CommitResult) GetURL() string {
+       if c == nil || c.URL == nil {
+               return ""
+       }
+       return *c.URL
+}
+
+// GetAheadBy returns the AheadBy field if it's non-nil, zero value otherwise.
+func (c *CommitsComparison) GetAheadBy() int {
+       if c == nil || c.AheadBy == nil {
+               return 0
+       }
+       return *c.AheadBy
+}
+
+// GetBaseCommit returns the BaseCommit field.
+func (c *CommitsComparison) GetBaseCommit() *RepositoryCommit {
+       if c == nil {
+               return nil
+       }
+       return c.BaseCommit
+}
+
+// GetBehindBy returns the BehindBy field if it's non-nil, zero value otherwise.
+func (c *CommitsComparison) GetBehindBy() int {
+       if c == nil || c.BehindBy == nil {
+               return 0
+       }
+       return *c.BehindBy
+}
+
+// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise.
+func (c *CommitsComparison) GetDiffURL() string {
+       if c == nil || c.DiffURL == nil {
+               return ""
+       }
+       return *c.DiffURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (c *CommitsComparison) GetHTMLURL() string {
+       if c == nil || c.HTMLURL == nil {
+               return ""
+       }
+       return *c.HTMLURL
+}
+
+// GetMergeBaseCommit returns the MergeBaseCommit field.
+func (c *CommitsComparison) GetMergeBaseCommit() *RepositoryCommit {
+       if c == nil {
+               return nil
+       }
+       return c.MergeBaseCommit
+}
+
+// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise.
+func (c *CommitsComparison) GetPatchURL() string {
+       if c == nil || c.PatchURL == nil {
+               return ""
+       }
+       return *c.PatchURL
+}
+
+// GetPermalinkURL returns the PermalinkURL field if it's non-nil, zero value otherwise.
+func (c *CommitsComparison) GetPermalinkURL() string {
+       if c == nil || c.PermalinkURL == nil {
+               return ""
+       }
+       return *c.PermalinkURL
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (c *CommitsComparison) GetStatus() string {
+       if c == nil || c.Status == nil {
+               return ""
+       }
+       return *c.Status
+}
+
+// GetTotalCommits returns the TotalCommits field if it's non-nil, zero value otherwise.
+func (c *CommitsComparison) GetTotalCommits() int {
+       if c == nil || c.TotalCommits == nil {
+               return 0
+       }
+       return *c.TotalCommits
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (c *CommitsComparison) GetURL() string {
+       if c == nil || c.URL == nil {
+               return ""
+       }
+       return *c.URL
+}
+
+// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
+func (c *CommitsSearchResult) GetIncompleteResults() bool {
+       if c == nil || c.IncompleteResults == nil {
+               return false
+       }
+       return *c.IncompleteResults
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (c *CommitsSearchResult) GetTotal() int {
+       if c == nil || c.Total == nil {
+               return 0
+       }
+       return *c.Total
+}
+
+// GetAdditions returns the Additions field if it's non-nil, zero value otherwise.
+func (c *CommitStats) GetAdditions() int {
+       if c == nil || c.Additions == nil {
+               return 0
+       }
+       return *c.Additions
+}
+
+// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise.
+func (c *CommitStats) GetDeletions() int {
+       if c == nil || c.Deletions == nil {
+               return 0
+       }
+       return *c.Deletions
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (c *CommitStats) GetTotal() int {
+       if c == nil || c.Total == nil {
+               return 0
+       }
+       return *c.Total
+}
+
+// GetCodeOfConduct returns the CodeOfConduct field.
+func (c *CommunityHealthFiles) GetCodeOfConduct() *Metric {
+       if c == nil {
+               return nil
+       }
+       return c.CodeOfConduct
+}
+
+// GetContributing returns the Contributing field.
+func (c *CommunityHealthFiles) GetContributing() *Metric {
+       if c == nil {
+               return nil
+       }
+       return c.Contributing
+}
+
+// GetIssueTemplate returns the IssueTemplate field.
+func (c *CommunityHealthFiles) GetIssueTemplate() *Metric {
+       if c == nil {
+               return nil
+       }
+       return c.IssueTemplate
+}
+
+// GetLicense returns the License field.
+func (c *CommunityHealthFiles) GetLicense() *Metric {
+       if c == nil {
+               return nil
+       }
+       return c.License
+}
+
+// GetPullRequestTemplate returns the PullRequestTemplate field.
+func (c *CommunityHealthFiles) GetPullRequestTemplate() *Metric {
+       if c == nil {
+               return nil
+       }
+       return c.PullRequestTemplate
+}
+
+// GetReadme returns the Readme field.
+func (c *CommunityHealthFiles) GetReadme() *Metric {
+       if c == nil {
+               return nil
+       }
+       return c.Readme
+}
+
+// GetFiles returns the Files field.
+func (c *CommunityHealthMetrics) GetFiles() *CommunityHealthFiles {
+       if c == nil {
+               return nil
+       }
+       return c.Files
+}
+
+// GetHealthPercentage returns the HealthPercentage field if it's non-nil, zero value otherwise.
+func (c *CommunityHealthMetrics) GetHealthPercentage() int {
+       if c == nil || c.HealthPercentage == nil {
+               return 0
+       }
+       return *c.HealthPercentage
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (c *CommunityHealthMetrics) GetUpdatedAt() time.Time {
+       if c == nil || c.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *c.UpdatedAt
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (c *ContentReference) GetID() int64 {
+       if c == nil || c.ID == nil {
+               return 0
+       }
+       return *c.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (c *ContentReference) GetNodeID() string {
+       if c == nil || c.NodeID == nil {
+               return ""
+       }
+       return *c.NodeID
+}
+
+// GetReference returns the Reference field if it's non-nil, zero value otherwise.
+func (c *ContentReference) GetReference() string {
+       if c == nil || c.Reference == nil {
+               return ""
+       }
+       return *c.Reference
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (c *ContentReferenceEvent) GetAction() string {
+       if c == nil || c.Action == nil {
+               return ""
+       }
+       return *c.Action
+}
+
+// GetContentReference returns the ContentReference field.
+func (c *ContentReferenceEvent) GetContentReference() *ContentReference {
+       if c == nil {
+               return nil
+       }
+       return c.ContentReference
+}
+
+// GetInstallation returns the Installation field.
+func (c *ContentReferenceEvent) GetInstallation() *Installation {
+       if c == nil {
+               return nil
+       }
+       return c.Installation
+}
+
+// GetRepo returns the Repo field.
+func (c *ContentReferenceEvent) GetRepo() *Repository {
+       if c == nil {
+               return nil
+       }
+       return c.Repo
+}
+
+// GetSender returns the Sender field.
+func (c *ContentReferenceEvent) GetSender() *User {
+       if c == nil {
+               return nil
+       }
+       return c.Sender
+}
+
+// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetAvatarURL() string {
+       if c == nil || c.AvatarURL == nil {
+               return ""
+       }
+       return *c.AvatarURL
+}
+
+// GetContributions returns the Contributions field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetContributions() int {
+       if c == nil || c.Contributions == nil {
+               return 0
+       }
+       return *c.Contributions
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetEmail() string {
+       if c == nil || c.Email == nil {
+               return ""
+       }
+       return *c.Email
+}
+
+// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetEventsURL() string {
+       if c == nil || c.EventsURL == nil {
+               return ""
+       }
+       return *c.EventsURL
+}
+
+// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetFollowersURL() string {
+       if c == nil || c.FollowersURL == nil {
+               return ""
+       }
+       return *c.FollowersURL
+}
+
+// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetFollowingURL() string {
+       if c == nil || c.FollowingURL == nil {
+               return ""
+       }
+       return *c.FollowingURL
+}
+
+// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetGistsURL() string {
+       if c == nil || c.GistsURL == nil {
+               return ""
+       }
+       return *c.GistsURL
+}
+
+// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetGravatarID() string {
+       if c == nil || c.GravatarID == nil {
+               return ""
+       }
+       return *c.GravatarID
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetHTMLURL() string {
+       if c == nil || c.HTMLURL == nil {
+               return ""
+       }
+       return *c.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetID() int64 {
+       if c == nil || c.ID == nil {
+               return 0
+       }
+       return *c.ID
+}
+
+// GetLogin returns the Login field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetLogin() string {
+       if c == nil || c.Login == nil {
+               return ""
+       }
+       return *c.Login
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetName() string {
+       if c == nil || c.Name == nil {
+               return ""
+       }
+       return *c.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetNodeID() string {
+       if c == nil || c.NodeID == nil {
+               return ""
+       }
+       return *c.NodeID
+}
+
+// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetOrganizationsURL() string {
+       if c == nil || c.OrganizationsURL == nil {
+               return ""
+       }
+       return *c.OrganizationsURL
+}
+
+// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetReceivedEventsURL() string {
+       if c == nil || c.ReceivedEventsURL == nil {
+               return ""
+       }
+       return *c.ReceivedEventsURL
+}
+
+// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetReposURL() string {
+       if c == nil || c.ReposURL == nil {
+               return ""
+       }
+       return *c.ReposURL
+}
+
+// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetSiteAdmin() bool {
+       if c == nil || c.SiteAdmin == nil {
+               return false
+       }
+       return *c.SiteAdmin
+}
+
+// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetStarredURL() string {
+       if c == nil || c.StarredURL == nil {
+               return ""
+       }
+       return *c.StarredURL
+}
+
+// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetSubscriptionsURL() string {
+       if c == nil || c.SubscriptionsURL == nil {
+               return ""
+       }
+       return *c.SubscriptionsURL
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetType() string {
+       if c == nil || c.Type == nil {
+               return ""
+       }
+       return *c.Type
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (c *Contributor) GetURL() string {
+       if c == nil || c.URL == nil {
+               return ""
+       }
+       return *c.URL
+}
+
+// GetAuthor returns the Author field.
+func (c *ContributorStats) GetAuthor() *Contributor {
+       if c == nil {
+               return nil
+       }
+       return c.Author
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (c *ContributorStats) GetTotal() int {
+       if c == nil || c.Total == nil {
+               return 0
+       }
+       return *c.Total
+}
+
+// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetCompletedAt() Timestamp {
+       if c == nil || c.CompletedAt == nil {
+               return Timestamp{}
+       }
+       return *c.CompletedAt
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetConclusion() string {
+       if c == nil || c.Conclusion == nil {
+               return ""
+       }
+       return *c.Conclusion
+}
+
+// GetDetailsURL returns the DetailsURL field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetDetailsURL() string {
+       if c == nil || c.DetailsURL == nil {
+               return ""
+       }
+       return *c.DetailsURL
+}
+
+// GetExternalID returns the ExternalID field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetExternalID() string {
+       if c == nil || c.ExternalID == nil {
+               return ""
+       }
+       return *c.ExternalID
+}
+
+// GetOutput returns the Output field.
+func (c *CreateCheckRunOptions) GetOutput() *CheckRunOutput {
+       if c == nil {
+               return nil
+       }
+       return c.Output
+}
+
+// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetStartedAt() Timestamp {
+       if c == nil || c.StartedAt == nil {
+               return Timestamp{}
+       }
+       return *c.StartedAt
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (c *CreateCheckRunOptions) GetStatus() string {
+       if c == nil || c.Status == nil {
+               return ""
+       }
+       return *c.Status
+}
+
+// GetHeadBranch returns the HeadBranch field if it's non-nil, zero value otherwise.
+func (c *CreateCheckSuiteOptions) GetHeadBranch() string {
+       if c == nil || c.HeadBranch == nil {
+               return ""
+       }
+       return *c.HeadBranch
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (c *CreateEvent) GetDescription() string {
+       if c == nil || c.Description == nil {
+               return ""
+       }
+       return *c.Description
+}
+
+// GetInstallation returns the Installation field.
+func (c *CreateEvent) GetInstallation() *Installation {
+       if c == nil {
+               return nil
+       }
+       return c.Installation
+}
+
+// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise.
+func (c *CreateEvent) GetMasterBranch() string {
+       if c == nil || c.MasterBranch == nil {
+               return ""
+       }
+       return *c.MasterBranch
+}
+
+// GetPusherType returns the PusherType field if it's non-nil, zero value otherwise.
+func (c *CreateEvent) GetPusherType() string {
+       if c == nil || c.PusherType == nil {
+               return ""
+       }
+       return *c.PusherType
+}
+
+// GetRef returns the Ref field if it's non-nil, zero value otherwise.
+func (c *CreateEvent) GetRef() string {
+       if c == nil || c.Ref == nil {
+               return ""
+       }
+       return *c.Ref
+}
+
+// GetRefType returns the RefType field if it's non-nil, zero value otherwise.
+func (c *CreateEvent) GetRefType() string {
+       if c == nil || c.RefType == nil {
+               return ""
+       }
+       return *c.RefType
+}
+
+// GetRepo returns the Repo field.
+func (c *CreateEvent) GetRepo() *Repository {
+       if c == nil {
+               return nil
+       }
+       return c.Repo
+}
+
+// GetSender returns the Sender field.
+func (c *CreateEvent) GetSender() *User {
+       if c == nil {
+               return nil
+       }
+       return c.Sender
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (c *CreateOrgInvitationOptions) GetEmail() string {
+       if c == nil || c.Email == nil {
+               return ""
+       }
+       return *c.Email
+}
+
+// GetInviteeID returns the InviteeID field if it's non-nil, zero value otherwise.
+func (c *CreateOrgInvitationOptions) GetInviteeID() int64 {
+       if c == nil || c.InviteeID == nil {
+               return 0
+       }
+       return *c.InviteeID
+}
+
+// GetRole returns the Role field if it's non-nil, zero value otherwise.
+func (c *CreateOrgInvitationOptions) GetRole() string {
+       if c == nil || c.Role == nil {
+               return ""
+       }
+       return *c.Role
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (c *CreateRunnerGroupRequest) GetName() string {
+       if c == nil || c.Name == nil {
+               return ""
+       }
+       return *c.Name
+}
+
+// GetVisibility returns the Visibility field if it's non-nil, zero value otherwise.
+func (c *CreateRunnerGroupRequest) GetVisibility() string {
+       if c == nil || c.Visibility == nil {
+               return ""
+       }
+       return *c.Visibility
+}
+
+// GetDeploymentBranchPolicy returns the DeploymentBranchPolicy field.
+func (c *CreateUpdateEnvironment) GetDeploymentBranchPolicy() *BranchPolicy {
+       if c == nil {
+               return nil
+       }
+       return c.DeploymentBranchPolicy
+}
+
+// GetWaitTimer returns the WaitTimer field if it's non-nil, zero value otherwise.
+func (c *CreateUpdateEnvironment) GetWaitTimer() int {
+       if c == nil || c.WaitTimer == nil {
+               return 0
+       }
+       return *c.WaitTimer
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (c *CreateUserProjectOptions) GetBody() string {
+       if c == nil || c.Body == nil {
+               return ""
+       }
+       return *c.Body
+}
+
+// GetInstallation returns the Installation field.
+func (d *DeleteEvent) GetInstallation() *Installation {
+       if d == nil {
+               return nil
+       }
+       return d.Installation
+}
+
+// GetPusherType returns the PusherType field if it's non-nil, zero value otherwise.
+func (d *DeleteEvent) GetPusherType() string {
+       if d == nil || d.PusherType == nil {
+               return ""
+       }
+       return *d.PusherType
+}
+
+// GetRef returns the Ref field if it's non-nil, zero value otherwise.
+func (d *DeleteEvent) GetRef() string {
+       if d == nil || d.Ref == nil {
+               return ""
+       }
+       return *d.Ref
+}
+
+// GetRefType returns the RefType field if it's non-nil, zero value otherwise.
+func (d *DeleteEvent) GetRefType() string {
+       if d == nil || d.RefType == nil {
+               return ""
+       }
+       return *d.RefType
+}
+
+// GetRepo returns the Repo field.
+func (d *DeleteEvent) GetRepo() *Repository {
+       if d == nil {
+               return nil
+       }
+       return d.Repo
+}
+
+// GetSender returns the Sender field.
+func (d *DeleteEvent) GetSender() *User {
+       if d == nil {
+               return nil
+       }
+       return d.Sender
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (d *DeployKeyEvent) GetAction() string {
+       if d == nil || d.Action == nil {
+               return ""
+       }
+       return *d.Action
+}
+
+// GetKey returns the Key field.
+func (d *DeployKeyEvent) GetKey() *Key {
+       if d == nil {
+               return nil
+       }
+       return d.Key
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetCreatedAt() Timestamp {
+       if d == nil || d.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *d.CreatedAt
+}
+
+// GetCreator returns the Creator field.
+func (d *Deployment) GetCreator() *User {
+       if d == nil {
+               return nil
+       }
+       return d.Creator
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetDescription() string {
+       if d == nil || d.Description == nil {
+               return ""
+       }
+       return *d.Description
+}
+
+// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetEnvironment() string {
+       if d == nil || d.Environment == nil {
+               return ""
+       }
+       return *d.Environment
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetID() int64 {
+       if d == nil || d.ID == nil {
+               return 0
+       }
+       return *d.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetNodeID() string {
+       if d == nil || d.NodeID == nil {
+               return ""
+       }
+       return *d.NodeID
+}
+
+// GetRef returns the Ref field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetRef() string {
+       if d == nil || d.Ref == nil {
+               return ""
+       }
+       return *d.Ref
+}
+
+// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetRepositoryURL() string {
+       if d == nil || d.RepositoryURL == nil {
+               return ""
+       }
+       return *d.RepositoryURL
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetSHA() string {
+       if d == nil || d.SHA == nil {
+               return ""
+       }
+       return *d.SHA
+}
+
+// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetStatusesURL() string {
+       if d == nil || d.StatusesURL == nil {
+               return ""
+       }
+       return *d.StatusesURL
+}
+
+// GetTask returns the Task field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetTask() string {
+       if d == nil || d.Task == nil {
+               return ""
+       }
+       return *d.Task
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetUpdatedAt() Timestamp {
+       if d == nil || d.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *d.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (d *Deployment) GetURL() string {
+       if d == nil || d.URL == nil {
+               return ""
+       }
+       return *d.URL
+}
+
+// GetDeployment returns the Deployment field.
+func (d *DeploymentEvent) GetDeployment() *Deployment {
+       if d == nil {
+               return nil
+       }
+       return d.Deployment
+}
+
+// GetInstallation returns the Installation field.
+func (d *DeploymentEvent) GetInstallation() *Installation {
+       if d == nil {
+               return nil
+       }
+       return d.Installation
+}
+
+// GetRepo returns the Repo field.
+func (d *DeploymentEvent) GetRepo() *Repository {
+       if d == nil {
+               return nil
+       }
+       return d.Repo
+}
+
+// GetSender returns the Sender field.
+func (d *DeploymentEvent) GetSender() *User {
+       if d == nil {
+               return nil
+       }
+       return d.Sender
+}
+
+// GetAutoMerge returns the AutoMerge field if it's non-nil, zero value otherwise.
+func (d *DeploymentRequest) GetAutoMerge() bool {
+       if d == nil || d.AutoMerge == nil {
+               return false
+       }
+       return *d.AutoMerge
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (d *DeploymentRequest) GetDescription() string {
+       if d == nil || d.Description == nil {
+               return ""
+       }
+       return *d.Description
+}
+
+// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise.
+func (d *DeploymentRequest) GetEnvironment() string {
+       if d == nil || d.Environment == nil {
+               return ""
+       }
+       return *d.Environment
+}
+
+// GetProductionEnvironment returns the ProductionEnvironment field if it's non-nil, zero value otherwise.
+func (d *DeploymentRequest) GetProductionEnvironment() bool {
+       if d == nil || d.ProductionEnvironment == nil {
+               return false
+       }
+       return *d.ProductionEnvironment
+}
+
+// GetRef returns the Ref field if it's non-nil, zero value otherwise.
+func (d *DeploymentRequest) GetRef() string {
+       if d == nil || d.Ref == nil {
+               return ""
+       }
+       return *d.Ref
+}
+
+// GetRequiredContexts returns the RequiredContexts field if it's non-nil, zero value otherwise.
+func (d *DeploymentRequest) GetRequiredContexts() []string {
+       if d == nil || d.RequiredContexts == nil {
+               return nil
+       }
+       return *d.RequiredContexts
+}
+
+// GetTask returns the Task field if it's non-nil, zero value otherwise.
+func (d *DeploymentRequest) GetTask() string {
+       if d == nil || d.Task == nil {
+               return ""
+       }
+       return *d.Task
+}
+
+// GetTransientEnvironment returns the TransientEnvironment field if it's non-nil, zero value otherwise.
+func (d *DeploymentRequest) GetTransientEnvironment() bool {
+       if d == nil || d.TransientEnvironment == nil {
+               return false
+       }
+       return *d.TransientEnvironment
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetCreatedAt() Timestamp {
+       if d == nil || d.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *d.CreatedAt
+}
+
+// GetCreator returns the Creator field.
+func (d *DeploymentStatus) GetCreator() *User {
+       if d == nil {
+               return nil
+       }
+       return d.Creator
+}
+
+// GetDeploymentURL returns the DeploymentURL field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetDeploymentURL() string {
+       if d == nil || d.DeploymentURL == nil {
+               return ""
+       }
+       return *d.DeploymentURL
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetDescription() string {
+       if d == nil || d.Description == nil {
+               return ""
+       }
+       return *d.Description
+}
+
+// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetEnvironment() string {
+       if d == nil || d.Environment == nil {
+               return ""
+       }
+       return *d.Environment
+}
+
+// GetEnvironmentURL returns the EnvironmentURL field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetEnvironmentURL() string {
+       if d == nil || d.EnvironmentURL == nil {
+               return ""
+       }
+       return *d.EnvironmentURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetID() int64 {
+       if d == nil || d.ID == nil {
+               return 0
+       }
+       return *d.ID
+}
+
+// GetLogURL returns the LogURL field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetLogURL() string {
+       if d == nil || d.LogURL == nil {
+               return ""
+       }
+       return *d.LogURL
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetNodeID() string {
+       if d == nil || d.NodeID == nil {
+               return ""
+       }
+       return *d.NodeID
+}
+
+// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetRepositoryURL() string {
+       if d == nil || d.RepositoryURL == nil {
+               return ""
+       }
+       return *d.RepositoryURL
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetState() string {
+       if d == nil || d.State == nil {
+               return ""
+       }
+       return *d.State
+}
+
+// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetTargetURL() string {
+       if d == nil || d.TargetURL == nil {
+               return ""
+       }
+       return *d.TargetURL
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetUpdatedAt() Timestamp {
+       if d == nil || d.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *d.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatus) GetURL() string {
+       if d == nil || d.URL == nil {
+               return ""
+       }
+       return *d.URL
+}
+
+// GetDeployment returns the Deployment field.
+func (d *DeploymentStatusEvent) GetDeployment() *Deployment {
+       if d == nil {
+               return nil
+       }
+       return d.Deployment
+}
+
+// GetDeploymentStatus returns the DeploymentStatus field.
+func (d *DeploymentStatusEvent) GetDeploymentStatus() *DeploymentStatus {
+       if d == nil {
+               return nil
+       }
+       return d.DeploymentStatus
+}
+
+// GetInstallation returns the Installation field.
+func (d *DeploymentStatusEvent) GetInstallation() *Installation {
+       if d == nil {
+               return nil
+       }
+       return d.Installation
+}
+
+// GetRepo returns the Repo field.
+func (d *DeploymentStatusEvent) GetRepo() *Repository {
+       if d == nil {
+               return nil
+       }
+       return d.Repo
+}
+
+// GetSender returns the Sender field.
+func (d *DeploymentStatusEvent) GetSender() *User {
+       if d == nil {
+               return nil
+       }
+       return d.Sender
+}
+
+// GetAutoInactive returns the AutoInactive field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatusRequest) GetAutoInactive() bool {
+       if d == nil || d.AutoInactive == nil {
+               return false
+       }
+       return *d.AutoInactive
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatusRequest) GetDescription() string {
+       if d == nil || d.Description == nil {
+               return ""
+       }
+       return *d.Description
+}
+
+// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatusRequest) GetEnvironment() string {
+       if d == nil || d.Environment == nil {
+               return ""
+       }
+       return *d.Environment
+}
+
+// GetEnvironmentURL returns the EnvironmentURL field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatusRequest) GetEnvironmentURL() string {
+       if d == nil || d.EnvironmentURL == nil {
+               return ""
+       }
+       return *d.EnvironmentURL
+}
+
+// GetLogURL returns the LogURL field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatusRequest) GetLogURL() string {
+       if d == nil || d.LogURL == nil {
+               return ""
+       }
+       return *d.LogURL
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (d *DeploymentStatusRequest) GetState() string {
+       if d == nil || d.State == nil {
+               return ""
+       }
+       return *d.State
+}
+
+// GetAuthor returns the Author field.
+func (d *DiscussionComment) GetAuthor() *User {
+       if d == nil {
+               return nil
+       }
+       return d.Author
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetBody() string {
+       if d == nil || d.Body == nil {
+               return ""
+       }
+       return *d.Body
+}
+
+// GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetBodyHTML() string {
+       if d == nil || d.BodyHTML == nil {
+               return ""
+       }
+       return *d.BodyHTML
+}
+
+// GetBodyVersion returns the BodyVersion field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetBodyVersion() string {
+       if d == nil || d.BodyVersion == nil {
+               return ""
+       }
+       return *d.BodyVersion
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetCreatedAt() Timestamp {
+       if d == nil || d.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *d.CreatedAt
+}
+
+// GetDiscussionURL returns the DiscussionURL field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetDiscussionURL() string {
+       if d == nil || d.DiscussionURL == nil {
+               return ""
+       }
+       return *d.DiscussionURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetHTMLURL() string {
+       if d == nil || d.HTMLURL == nil {
+               return ""
+       }
+       return *d.HTMLURL
+}
+
+// GetLastEditedAt returns the LastEditedAt field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetLastEditedAt() Timestamp {
+       if d == nil || d.LastEditedAt == nil {
+               return Timestamp{}
+       }
+       return *d.LastEditedAt
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetNodeID() string {
+       if d == nil || d.NodeID == nil {
+               return ""
+       }
+       return *d.NodeID
+}
+
+// GetNumber returns the Number field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetNumber() int {
+       if d == nil || d.Number == nil {
+               return 0
+       }
+       return *d.Number
+}
+
+// GetReactions returns the Reactions field.
+func (d *DiscussionComment) GetReactions() *Reactions {
+       if d == nil {
+               return nil
+       }
+       return d.Reactions
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetUpdatedAt() Timestamp {
+       if d == nil || d.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *d.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (d *DiscussionComment) GetURL() string {
+       if d == nil || d.URL == nil {
+               return ""
+       }
+       return *d.URL
+}
+
+// GetTeams returns the Teams field if it's non-nil, zero value otherwise.
+func (d *DismissalRestrictionsRequest) GetTeams() []string {
+       if d == nil || d.Teams == nil {
+               return nil
+       }
+       return *d.Teams
+}
+
+// GetUsers returns the Users field if it's non-nil, zero value otherwise.
+func (d *DismissalRestrictionsRequest) GetUsers() []string {
+       if d == nil || d.Users == nil {
+               return nil
+       }
+       return *d.Users
+}
+
+// GetDismissalCommitID returns the DismissalCommitID field if it's non-nil, zero value otherwise.
+func (d *DismissedReview) GetDismissalCommitID() string {
+       if d == nil || d.DismissalCommitID == nil {
+               return ""
+       }
+       return *d.DismissalCommitID
+}
+
+// GetDismissalMessage returns the DismissalMessage field if it's non-nil, zero value otherwise.
+func (d *DismissedReview) GetDismissalMessage() string {
+       if d == nil || d.DismissalMessage == nil {
+               return ""
+       }
+       return *d.DismissalMessage
+}
+
+// GetReviewID returns the ReviewID field if it's non-nil, zero value otherwise.
+func (d *DismissedReview) GetReviewID() int64 {
+       if d == nil || d.ReviewID == nil {
+               return 0
+       }
+       return *d.ReviewID
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (d *DismissedReview) GetState() string {
+       if d == nil || d.State == nil {
+               return ""
+       }
+       return *d.State
+}
+
+// GetClientPayload returns the ClientPayload field if it's non-nil, zero value otherwise.
+func (d *DispatchRequestOptions) GetClientPayload() json.RawMessage {
+       if d == nil || d.ClientPayload == nil {
+               return json.RawMessage{}
+       }
+       return *d.ClientPayload
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (d *DraftReviewComment) GetBody() string {
+       if d == nil || d.Body == nil {
+               return ""
+       }
+       return *d.Body
+}
+
+// GetLine returns the Line field if it's non-nil, zero value otherwise.
+func (d *DraftReviewComment) GetLine() int {
+       if d == nil || d.Line == nil {
+               return 0
+       }
+       return *d.Line
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (d *DraftReviewComment) GetPath() string {
+       if d == nil || d.Path == nil {
+               return ""
+       }
+       return *d.Path
+}
+
+// GetPosition returns the Position field if it's non-nil, zero value otherwise.
+func (d *DraftReviewComment) GetPosition() int {
+       if d == nil || d.Position == nil {
+               return 0
+       }
+       return *d.Position
+}
+
+// GetSide returns the Side field if it's non-nil, zero value otherwise.
+func (d *DraftReviewComment) GetSide() string {
+       if d == nil || d.Side == nil {
+               return ""
+       }
+       return *d.Side
+}
+
+// GetStartLine returns the StartLine field if it's non-nil, zero value otherwise.
+func (d *DraftReviewComment) GetStartLine() int {
+       if d == nil || d.StartLine == nil {
+               return 0
+       }
+       return *d.StartLine
+}
+
+// GetStartSide returns the StartSide field if it's non-nil, zero value otherwise.
+func (d *DraftReviewComment) GetStartSide() string {
+       if d == nil || d.StartSide == nil {
+               return ""
+       }
+       return *d.StartSide
+}
+
+// GetRef returns the Ref field.
+func (e *EditBase) GetRef() *EditRef {
+       if e == nil {
+               return nil
+       }
+       return e.Ref
+}
+
+// GetSHA returns the SHA field.
+func (e *EditBase) GetSHA() *EditSHA {
+       if e == nil {
+               return nil
+       }
+       return e.SHA
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (e *EditBody) GetFrom() string {
+       if e == nil || e.From == nil {
+               return ""
+       }
+       return *e.From
+}
+
+// GetBase returns the Base field.
+func (e *EditChange) GetBase() *EditBase {
+       if e == nil {
+               return nil
+       }
+       return e.Base
+}
+
+// GetBody returns the Body field.
+func (e *EditChange) GetBody() *EditBody {
+       if e == nil {
+               return nil
+       }
+       return e.Body
+}
+
+// GetTitle returns the Title field.
+func (e *EditChange) GetTitle() *EditTitle {
+       if e == nil {
+               return nil
+       }
+       return e.Title
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (e *EditRef) GetFrom() string {
+       if e == nil || e.From == nil {
+               return ""
+       }
+       return *e.From
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (e *EditSHA) GetFrom() string {
+       if e == nil || e.From == nil {
+               return ""
+       }
+       return *e.From
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (e *EditTitle) GetFrom() string {
+       if e == nil || e.From == nil {
+               return ""
+       }
+       return *e.From
+}
+
+// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
+func (e *Enterprise) GetAvatarURL() string {
+       if e == nil || e.AvatarURL == nil {
+               return ""
+       }
+       return *e.AvatarURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (e *Enterprise) GetCreatedAt() Timestamp {
+       if e == nil || e.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *e.CreatedAt
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (e *Enterprise) GetDescription() string {
+       if e == nil || e.Description == nil {
+               return ""
+       }
+       return *e.Description
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (e *Enterprise) GetHTMLURL() string {
+       if e == nil || e.HTMLURL == nil {
+               return ""
+       }
+       return *e.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (e *Enterprise) GetID() int {
+       if e == nil || e.ID == nil {
+               return 0
+       }
+       return *e.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (e *Enterprise) GetName() string {
+       if e == nil || e.Name == nil {
+               return ""
+       }
+       return *e.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (e *Enterprise) GetNodeID() string {
+       if e == nil || e.NodeID == nil {
+               return ""
+       }
+       return *e.NodeID
+}
+
+// GetSlug returns the Slug field if it's non-nil, zero value otherwise.
+func (e *Enterprise) GetSlug() string {
+       if e == nil || e.Slug == nil {
+               return ""
+       }
+       return *e.Slug
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (e *Enterprise) GetUpdatedAt() Timestamp {
+       if e == nil || e.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *e.UpdatedAt
+}
+
+// GetWebsiteURL returns the WebsiteURL field if it's non-nil, zero value otherwise.
+func (e *Enterprise) GetWebsiteURL() string {
+       if e == nil || e.WebsiteURL == nil {
+               return ""
+       }
+       return *e.WebsiteURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (e *Environment) GetCreatedAt() Timestamp {
+       if e == nil || e.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *e.CreatedAt
+}
+
+// GetDeploymentBranchPolicy returns the DeploymentBranchPolicy field.
+func (e *Environment) GetDeploymentBranchPolicy() *BranchPolicy {
+       if e == nil {
+               return nil
+       }
+       return e.DeploymentBranchPolicy
+}
+
+// GetEnvironmentName returns the EnvironmentName field if it's non-nil, zero value otherwise.
+func (e *Environment) GetEnvironmentName() string {
+       if e == nil || e.EnvironmentName == nil {
+               return ""
+       }
+       return *e.EnvironmentName
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (e *Environment) GetHTMLURL() string {
+       if e == nil || e.HTMLURL == nil {
+               return ""
+       }
+       return *e.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (e *Environment) GetID() int64 {
+       if e == nil || e.ID == nil {
+               return 0
+       }
+       return *e.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (e *Environment) GetName() string {
+       if e == nil || e.Name == nil {
+               return ""
+       }
+       return *e.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (e *Environment) GetNodeID() string {
+       if e == nil || e.NodeID == nil {
+               return ""
+       }
+       return *e.NodeID
+}
+
+// GetOwner returns the Owner field if it's non-nil, zero value otherwise.
+func (e *Environment) GetOwner() string {
+       if e == nil || e.Owner == nil {
+               return ""
+       }
+       return *e.Owner
+}
+
+// GetRepo returns the Repo field if it's non-nil, zero value otherwise.
+func (e *Environment) GetRepo() string {
+       if e == nil || e.Repo == nil {
+               return ""
+       }
+       return *e.Repo
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (e *Environment) GetUpdatedAt() Timestamp {
+       if e == nil || e.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *e.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (e *Environment) GetURL() string {
+       if e == nil || e.URL == nil {
+               return ""
+       }
+       return *e.URL
+}
+
+// GetWaitTimer returns the WaitTimer field if it's non-nil, zero value otherwise.
+func (e *Environment) GetWaitTimer() int {
+       if e == nil || e.WaitTimer == nil {
+               return 0
+       }
+       return *e.WaitTimer
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (e *EnvResponse) GetTotalCount() int {
+       if e == nil || e.TotalCount == nil {
+               return 0
+       }
+       return *e.TotalCount
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (e *EnvReviewers) GetID() int64 {
+       if e == nil || e.ID == nil {
+               return 0
+       }
+       return *e.ID
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (e *EnvReviewers) GetType() string {
+       if e == nil || e.Type == nil {
+               return ""
+       }
+       return *e.Type
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (e *ErrorBlock) GetCreatedAt() Timestamp {
+       if e == nil || e.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *e.CreatedAt
+}
+
+// GetBlock returns the Block field.
+func (e *ErrorResponse) GetBlock() *ErrorBlock {
+       if e == nil {
+               return nil
+       }
+       return e.Block
+}
+
+// GetActor returns the Actor field.
+func (e *Event) GetActor() *User {
+       if e == nil {
+               return nil
+       }
+       return e.Actor
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (e *Event) GetCreatedAt() time.Time {
+       if e == nil || e.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *e.CreatedAt
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (e *Event) GetID() string {
+       if e == nil || e.ID == nil {
+               return ""
+       }
+       return *e.ID
+}
+
+// GetOrg returns the Org field.
+func (e *Event) GetOrg() *Organization {
+       if e == nil {
+               return nil
+       }
+       return e.Org
+}
+
+// GetPublic returns the Public field if it's non-nil, zero value otherwise.
+func (e *Event) GetPublic() bool {
+       if e == nil || e.Public == nil {
+               return false
+       }
+       return *e.Public
+}
+
+// GetRawPayload returns the RawPayload field if it's non-nil, zero value otherwise.
+func (e *Event) GetRawPayload() json.RawMessage {
+       if e == nil || e.RawPayload == nil {
+               return json.RawMessage{}
+       }
+       return *e.RawPayload
+}
+
+// GetRepo returns the Repo field.
+func (e *Event) GetRepo() *Repository {
+       if e == nil {
+               return nil
+       }
+       return e.Repo
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (e *Event) GetType() string {
+       if e == nil || e.Type == nil {
+               return ""
+       }
+       return *e.Type
+}
+
+// GetHRef returns the HRef field if it's non-nil, zero value otherwise.
+func (f *FeedLink) GetHRef() string {
+       if f == nil || f.HRef == nil {
+               return ""
+       }
+       return *f.HRef
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (f *FeedLink) GetType() string {
+       if f == nil || f.Type == nil {
+               return ""
+       }
+       return *f.Type
+}
+
+// GetCurrentUser returns the CurrentUser field.
+func (f *FeedLinks) GetCurrentUser() *FeedLink {
+       if f == nil {
+               return nil
+       }
+       return f.CurrentUser
+}
+
+// GetCurrentUserActor returns the CurrentUserActor field.
+func (f *FeedLinks) GetCurrentUserActor() *FeedLink {
+       if f == nil {
+               return nil
+       }
+       return f.CurrentUserActor
+}
+
+// GetCurrentUserOrganization returns the CurrentUserOrganization field.
+func (f *FeedLinks) GetCurrentUserOrganization() *FeedLink {
+       if f == nil {
+               return nil
+       }
+       return f.CurrentUserOrganization
+}
+
+// GetCurrentUserPublic returns the CurrentUserPublic field.
+func (f *FeedLinks) GetCurrentUserPublic() *FeedLink {
+       if f == nil {
+               return nil
+       }
+       return f.CurrentUserPublic
+}
+
+// GetTimeline returns the Timeline field.
+func (f *FeedLinks) GetTimeline() *FeedLink {
+       if f == nil {
+               return nil
+       }
+       return f.Timeline
+}
+
+// GetUser returns the User field.
+func (f *FeedLinks) GetUser() *FeedLink {
+       if f == nil {
+               return nil
+       }
+       return f.User
+}
+
+// GetCurrentUserActorURL returns the CurrentUserActorURL field if it's non-nil, zero value otherwise.
+func (f *Feeds) GetCurrentUserActorURL() string {
+       if f == nil || f.CurrentUserActorURL == nil {
+               return ""
+       }
+       return *f.CurrentUserActorURL
+}
+
+// GetCurrentUserOrganizationURL returns the CurrentUserOrganizationURL field if it's non-nil, zero value otherwise.
+func (f *Feeds) GetCurrentUserOrganizationURL() string {
+       if f == nil || f.CurrentUserOrganizationURL == nil {
+               return ""
+       }
+       return *f.CurrentUserOrganizationURL
+}
+
+// GetCurrentUserPublicURL returns the CurrentUserPublicURL field if it's non-nil, zero value otherwise.
+func (f *Feeds) GetCurrentUserPublicURL() string {
+       if f == nil || f.CurrentUserPublicURL == nil {
+               return ""
+       }
+       return *f.CurrentUserPublicURL
+}
+
+// GetCurrentUserURL returns the CurrentUserURL field if it's non-nil, zero value otherwise.
+func (f *Feeds) GetCurrentUserURL() string {
+       if f == nil || f.CurrentUserURL == nil {
+               return ""
+       }
+       return *f.CurrentUserURL
+}
+
+// GetLinks returns the Links field.
+func (f *Feeds) GetLinks() *FeedLinks {
+       if f == nil {
+               return nil
+       }
+       return f.Links
+}
+
+// GetTimelineURL returns the TimelineURL field if it's non-nil, zero value otherwise.
+func (f *Feeds) GetTimelineURL() string {
+       if f == nil || f.TimelineURL == nil {
+               return ""
+       }
+       return *f.TimelineURL
+}
+
+// GetUserURL returns the UserURL field if it's non-nil, zero value otherwise.
+func (f *Feeds) GetUserURL() string {
+       if f == nil || f.UserURL == nil {
+               return ""
+       }
+       return *f.UserURL
+}
+
+// GetForkee returns the Forkee field.
+func (f *ForkEvent) GetForkee() *Repository {
+       if f == nil {
+               return nil
+       }
+       return f.Forkee
+}
+
+// GetInstallation returns the Installation field.
+func (f *ForkEvent) GetInstallation() *Installation {
+       if f == nil {
+               return nil
+       }
+       return f.Installation
+}
+
+// GetRepo returns the Repo field.
+func (f *ForkEvent) GetRepo() *Repository {
+       if f == nil {
+               return nil
+       }
+       return f.Repo
+}
+
+// GetSender returns the Sender field.
+func (f *ForkEvent) GetSender() *User {
+       if f == nil {
+               return nil
+       }
+       return f.Sender
+}
+
+// GetInclude returns the Include field if it's non-nil, zero value otherwise.
+func (g *GetAuditLogOptions) GetInclude() string {
+       if g == nil || g.Include == nil {
+               return ""
+       }
+       return *g.Include
+}
+
+// GetOrder returns the Order field if it's non-nil, zero value otherwise.
+func (g *GetAuditLogOptions) GetOrder() string {
+       if g == nil || g.Order == nil {
+               return ""
+       }
+       return *g.Order
+}
+
+// GetPhrase returns the Phrase field if it's non-nil, zero value otherwise.
+func (g *GetAuditLogOptions) GetPhrase() string {
+       if g == nil || g.Phrase == nil {
+               return ""
+       }
+       return *g.Phrase
+}
+
+// GetComments returns the Comments field if it's non-nil, zero value otherwise.
+func (g *Gist) GetComments() int {
+       if g == nil || g.Comments == nil {
+               return 0
+       }
+       return *g.Comments
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (g *Gist) GetCreatedAt() time.Time {
+       if g == nil || g.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *g.CreatedAt
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (g *Gist) GetDescription() string {
+       if g == nil || g.Description == nil {
+               return ""
+       }
+       return *g.Description
+}
+
+// GetFiles returns the Files map if it's non-nil, an empty map otherwise.
+func (g *Gist) GetFiles() map[GistFilename]GistFile {
+       if g == nil || g.Files == nil {
+               return map[GistFilename]GistFile{}
+       }
+       return g.Files
+}
+
+// GetGitPullURL returns the GitPullURL field if it's non-nil, zero value otherwise.
+func (g *Gist) GetGitPullURL() string {
+       if g == nil || g.GitPullURL == nil {
+               return ""
+       }
+       return *g.GitPullURL
+}
+
+// GetGitPushURL returns the GitPushURL field if it's non-nil, zero value otherwise.
+func (g *Gist) GetGitPushURL() string {
+       if g == nil || g.GitPushURL == nil {
+               return ""
+       }
+       return *g.GitPushURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (g *Gist) GetHTMLURL() string {
+       if g == nil || g.HTMLURL == nil {
+               return ""
+       }
+       return *g.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (g *Gist) GetID() string {
+       if g == nil || g.ID == nil {
+               return ""
+       }
+       return *g.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (g *Gist) GetNodeID() string {
+       if g == nil || g.NodeID == nil {
+               return ""
+       }
+       return *g.NodeID
+}
+
+// GetOwner returns the Owner field.
+func (g *Gist) GetOwner() *User {
+       if g == nil {
+               return nil
+       }
+       return g.Owner
+}
+
+// GetPublic returns the Public field if it's non-nil, zero value otherwise.
+func (g *Gist) GetPublic() bool {
+       if g == nil || g.Public == nil {
+               return false
+       }
+       return *g.Public
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (g *Gist) GetUpdatedAt() time.Time {
+       if g == nil || g.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *g.UpdatedAt
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (g *GistComment) GetBody() string {
+       if g == nil || g.Body == nil {
+               return ""
+       }
+       return *g.Body
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (g *GistComment) GetCreatedAt() time.Time {
+       if g == nil || g.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *g.CreatedAt
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (g *GistComment) GetID() int64 {
+       if g == nil || g.ID == nil {
+               return 0
+       }
+       return *g.ID
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (g *GistComment) GetURL() string {
+       if g == nil || g.URL == nil {
+               return ""
+       }
+       return *g.URL
+}
+
+// GetUser returns the User field.
+func (g *GistComment) GetUser() *User {
+       if g == nil {
+               return nil
+       }
+       return g.User
+}
+
+// GetChangeStatus returns the ChangeStatus field.
+func (g *GistCommit) GetChangeStatus() *CommitStats {
+       if g == nil {
+               return nil
+       }
+       return g.ChangeStatus
+}
+
+// GetCommittedAt returns the CommittedAt field if it's non-nil, zero value otherwise.
+func (g *GistCommit) GetCommittedAt() Timestamp {
+       if g == nil || g.CommittedAt == nil {
+               return Timestamp{}
+       }
+       return *g.CommittedAt
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (g *GistCommit) GetNodeID() string {
+       if g == nil || g.NodeID == nil {
+               return ""
+       }
+       return *g.NodeID
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (g *GistCommit) GetURL() string {
+       if g == nil || g.URL == nil {
+               return ""
+       }
+       return *g.URL
+}
+
+// GetUser returns the User field.
+func (g *GistCommit) GetUser() *User {
+       if g == nil {
+               return nil
+       }
+       return g.User
+}
+
+// GetVersion returns the Version field if it's non-nil, zero value otherwise.
+func (g *GistCommit) GetVersion() string {
+       if g == nil || g.Version == nil {
+               return ""
+       }
+       return *g.Version
+}
+
+// GetContent returns the Content field if it's non-nil, zero value otherwise.
+func (g *GistFile) GetContent() string {
+       if g == nil || g.Content == nil {
+               return ""
+       }
+       return *g.Content
+}
+
+// GetFilename returns the Filename field if it's non-nil, zero value otherwise.
+func (g *GistFile) GetFilename() string {
+       if g == nil || g.Filename == nil {
+               return ""
+       }
+       return *g.Filename
+}
+
+// GetLanguage returns the Language field if it's non-nil, zero value otherwise.
+func (g *GistFile) GetLanguage() string {
+       if g == nil || g.Language == nil {
+               return ""
+       }
+       return *g.Language
+}
+
+// GetRawURL returns the RawURL field if it's non-nil, zero value otherwise.
+func (g *GistFile) GetRawURL() string {
+       if g == nil || g.RawURL == nil {
+               return ""
+       }
+       return *g.RawURL
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (g *GistFile) GetSize() int {
+       if g == nil || g.Size == nil {
+               return 0
+       }
+       return *g.Size
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (g *GistFile) GetType() string {
+       if g == nil || g.Type == nil {
+               return ""
+       }
+       return *g.Type
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (g *GistFork) GetCreatedAt() Timestamp {
+       if g == nil || g.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *g.CreatedAt
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (g *GistFork) GetID() string {
+       if g == nil || g.ID == nil {
+               return ""
+       }
+       return *g.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (g *GistFork) GetNodeID() string {
+       if g == nil || g.NodeID == nil {
+               return ""
+       }
+       return *g.NodeID
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (g *GistFork) GetUpdatedAt() Timestamp {
+       if g == nil || g.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *g.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (g *GistFork) GetURL() string {
+       if g == nil || g.URL == nil {
+               return ""
+       }
+       return *g.URL
+}
+
+// GetUser returns the User field.
+func (g *GistFork) GetUser() *User {
+       if g == nil {
+               return nil
+       }
+       return g.User
+}
+
+// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise.
+func (g *GistStats) GetPrivateGists() int {
+       if g == nil || g.PrivateGists == nil {
+               return 0
+       }
+       return *g.PrivateGists
+}
+
+// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise.
+func (g *GistStats) GetPublicGists() int {
+       if g == nil || g.PublicGists == nil {
+               return 0
+       }
+       return *g.PublicGists
+}
+
+// GetTotalGists returns the TotalGists field if it's non-nil, zero value otherwise.
+func (g *GistStats) GetTotalGists() int {
+       if g == nil || g.TotalGists == nil {
+               return 0
+       }
+       return *g.TotalGists
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (g *GitHubAppAuthorizationEvent) GetAction() string {
+       if g == nil || g.Action == nil {
+               return ""
+       }
+       return *g.Action
+}
+
+// GetSender returns the Sender field.
+func (g *GitHubAppAuthorizationEvent) GetSender() *User {
+       if g == nil {
+               return nil
+       }
+       return g.Sender
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (g *Gitignore) GetName() string {
+       if g == nil || g.Name == nil {
+               return ""
+       }
+       return *g.Name
+}
+
+// GetSource returns the Source field if it's non-nil, zero value otherwise.
+func (g *Gitignore) GetSource() string {
+       if g == nil || g.Source == nil {
+               return ""
+       }
+       return *g.Source
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (g *GitObject) GetSHA() string {
+       if g == nil || g.SHA == nil {
+               return ""
+       }
+       return *g.SHA
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (g *GitObject) GetType() string {
+       if g == nil || g.Type == nil {
+               return ""
+       }
+       return *g.Type
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (g *GitObject) GetURL() string {
+       if g == nil || g.URL == nil {
+               return ""
+       }
+       return *g.URL
+}
+
+// GetInstallation returns the Installation field.
+func (g *GollumEvent) GetInstallation() *Installation {
+       if g == nil {
+               return nil
+       }
+       return g.Installation
+}
+
+// GetRepo returns the Repo field.
+func (g *GollumEvent) GetRepo() *Repository {
+       if g == nil {
+               return nil
+       }
+       return g.Repo
+}
+
+// GetSender returns the Sender field.
+func (g *GollumEvent) GetSender() *User {
+       if g == nil {
+               return nil
+       }
+       return g.Sender
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (g *GPGEmail) GetEmail() string {
+       if g == nil || g.Email == nil {
+               return ""
+       }
+       return *g.Email
+}
+
+// GetVerified returns the Verified field if it's non-nil, zero value otherwise.
+func (g *GPGEmail) GetVerified() bool {
+       if g == nil || g.Verified == nil {
+               return false
+       }
+       return *g.Verified
+}
+
+// GetCanCertify returns the CanCertify field if it's non-nil, zero value otherwise.
+func (g *GPGKey) GetCanCertify() bool {
+       if g == nil || g.CanCertify == nil {
+               return false
+       }
+       return *g.CanCertify
+}
+
+// GetCanEncryptComms returns the CanEncryptComms field if it's non-nil, zero value otherwise.
+func (g *GPGKey) GetCanEncryptComms() bool {
+       if g == nil || g.CanEncryptComms == nil {
+               return false
+       }
+       return *g.CanEncryptComms
+}
+
+// GetCanEncryptStorage returns the CanEncryptStorage field if it's non-nil, zero value otherwise.
+func (g *GPGKey) GetCanEncryptStorage() bool {
+       if g == nil || g.CanEncryptStorage == nil {
+               return false
+       }
+       return *g.CanEncryptStorage
+}
+
+// GetCanSign returns the CanSign field if it's non-nil, zero value otherwise.
+func (g *GPGKey) GetCanSign() bool {
+       if g == nil || g.CanSign == nil {
+               return false
+       }
+       return *g.CanSign
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (g *GPGKey) GetCreatedAt() time.Time {
+       if g == nil || g.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *g.CreatedAt
+}
+
+// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
+func (g *GPGKey) GetExpiresAt() time.Time {
+       if g == nil || g.ExpiresAt == nil {
+               return time.Time{}
+       }
+       return *g.ExpiresAt
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (g *GPGKey) GetID() int64 {
+       if g == nil || g.ID == nil {
+               return 0
+       }
+       return *g.ID
+}
+
+// GetKeyID returns the KeyID field if it's non-nil, zero value otherwise.
+func (g *GPGKey) GetKeyID() string {
+       if g == nil || g.KeyID == nil {
+               return ""
+       }
+       return *g.KeyID
+}
+
+// GetPrimaryKeyID returns the PrimaryKeyID field if it's non-nil, zero value otherwise.
+func (g *GPGKey) GetPrimaryKeyID() int64 {
+       if g == nil || g.PrimaryKeyID == nil {
+               return 0
+       }
+       return *g.PrimaryKeyID
+}
+
+// GetPublicKey returns the PublicKey field if it's non-nil, zero value otherwise.
+func (g *GPGKey) GetPublicKey() string {
+       if g == nil || g.PublicKey == nil {
+               return ""
+       }
+       return *g.PublicKey
+}
+
+// GetApp returns the App field.
+func (g *Grant) GetApp() *AuthorizationApp {
+       if g == nil {
+               return nil
+       }
+       return g.App
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (g *Grant) GetCreatedAt() Timestamp {
+       if g == nil || g.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *g.CreatedAt
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (g *Grant) GetID() int64 {
+       if g == nil || g.ID == nil {
+               return 0
+       }
+       return *g.ID
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (g *Grant) GetUpdatedAt() Timestamp {
+       if g == nil || g.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *g.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (g *Grant) GetURL() string {
+       if g == nil || g.URL == nil {
+               return ""
+       }
+       return *g.URL
+}
+
+// GetAuthor returns the Author field.
+func (h *HeadCommit) GetAuthor() *CommitAuthor {
+       if h == nil {
+               return nil
+       }
+       return h.Author
+}
+
+// GetCommitter returns the Committer field.
+func (h *HeadCommit) GetCommitter() *CommitAuthor {
+       if h == nil {
+               return nil
+       }
+       return h.Committer
+}
+
+// GetDistinct returns the Distinct field if it's non-nil, zero value otherwise.
+func (h *HeadCommit) GetDistinct() bool {
+       if h == nil || h.Distinct == nil {
+               return false
+       }
+       return *h.Distinct
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (h *HeadCommit) GetID() string {
+       if h == nil || h.ID == nil {
+               return ""
+       }
+       return *h.ID
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (h *HeadCommit) GetMessage() string {
+       if h == nil || h.Message == nil {
+               return ""
+       }
+       return *h.Message
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (h *HeadCommit) GetSHA() string {
+       if h == nil || h.SHA == nil {
+               return ""
+       }
+       return *h.SHA
+}
+
+// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise.
+func (h *HeadCommit) GetTimestamp() Timestamp {
+       if h == nil || h.Timestamp == nil {
+               return Timestamp{}
+       }
+       return *h.Timestamp
+}
+
+// GetTreeID returns the TreeID field if it's non-nil, zero value otherwise.
+func (h *HeadCommit) GetTreeID() string {
+       if h == nil || h.TreeID == nil {
+               return ""
+       }
+       return *h.TreeID
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (h *HeadCommit) GetURL() string {
+       if h == nil || h.URL == nil {
+               return ""
+       }
+       return *h.URL
+}
+
+// GetActive returns the Active field if it's non-nil, zero value otherwise.
+func (h *Hook) GetActive() bool {
+       if h == nil || h.Active == nil {
+               return false
+       }
+       return *h.Active
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (h *Hook) GetCreatedAt() time.Time {
+       if h == nil || h.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *h.CreatedAt
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (h *Hook) GetID() int64 {
+       if h == nil || h.ID == nil {
+               return 0
+       }
+       return *h.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (h *Hook) GetName() string {
+       if h == nil || h.Name == nil {
+               return ""
+       }
+       return *h.Name
+}
+
+// GetPingURL returns the PingURL field if it's non-nil, zero value otherwise.
+func (h *Hook) GetPingURL() string {
+       if h == nil || h.PingURL == nil {
+               return ""
+       }
+       return *h.PingURL
+}
+
+// GetTestURL returns the TestURL field if it's non-nil, zero value otherwise.
+func (h *Hook) GetTestURL() string {
+       if h == nil || h.TestURL == nil {
+               return ""
+       }
+       return *h.TestURL
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (h *Hook) GetType() string {
+       if h == nil || h.Type == nil {
+               return ""
+       }
+       return *h.Type
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (h *Hook) GetUpdatedAt() time.Time {
+       if h == nil || h.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *h.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (h *Hook) GetURL() string {
+       if h == nil || h.URL == nil {
+               return ""
+       }
+       return *h.URL
+}
+
+// GetContentType returns the ContentType field if it's non-nil, zero value otherwise.
+func (h *HookConfig) GetContentType() string {
+       if h == nil || h.ContentType == nil {
+               return ""
+       }
+       return *h.ContentType
+}
+
+// GetInsecureSSL returns the InsecureSSL field if it's non-nil, zero value otherwise.
+func (h *HookConfig) GetInsecureSSL() string {
+       if h == nil || h.InsecureSSL == nil {
+               return ""
+       }
+       return *h.InsecureSSL
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (h *HookConfig) GetURL() string {
+       if h == nil || h.URL == nil {
+               return ""
+       }
+       return *h.URL
+}
+
+// GetActiveHooks returns the ActiveHooks field if it's non-nil, zero value otherwise.
+func (h *HookStats) GetActiveHooks() int {
+       if h == nil || h.ActiveHooks == nil {
+               return 0
+       }
+       return *h.ActiveHooks
+}
+
+// GetInactiveHooks returns the InactiveHooks field if it's non-nil, zero value otherwise.
+func (h *HookStats) GetInactiveHooks() int {
+       if h == nil || h.InactiveHooks == nil {
+               return 0
+       }
+       return *h.InactiveHooks
+}
+
+// GetTotalHooks returns the TotalHooks field if it's non-nil, zero value otherwise.
+func (h *HookStats) GetTotalHooks() int {
+       if h == nil || h.TotalHooks == nil {
+               return 0
+       }
+       return *h.TotalHooks
+}
+
+// GetGroupDescription returns the GroupDescription field if it's non-nil, zero value otherwise.
+func (i *IDPGroup) GetGroupDescription() string {
+       if i == nil || i.GroupDescription == nil {
+               return ""
+       }
+       return *i.GroupDescription
+}
+
+// GetGroupID returns the GroupID field if it's non-nil, zero value otherwise.
+func (i *IDPGroup) GetGroupID() string {
+       if i == nil || i.GroupID == nil {
+               return ""
+       }
+       return *i.GroupID
+}
+
+// GetGroupName returns the GroupName field if it's non-nil, zero value otherwise.
+func (i *IDPGroup) GetGroupName() string {
+       if i == nil || i.GroupName == nil {
+               return ""
+       }
+       return *i.GroupName
+}
+
+// GetAuthorsCount returns the AuthorsCount field if it's non-nil, zero value otherwise.
+func (i *Import) GetAuthorsCount() int {
+       if i == nil || i.AuthorsCount == nil {
+               return 0
+       }
+       return *i.AuthorsCount
+}
+
+// GetAuthorsURL returns the AuthorsURL field if it's non-nil, zero value otherwise.
+func (i *Import) GetAuthorsURL() string {
+       if i == nil || i.AuthorsURL == nil {
+               return ""
+       }
+       return *i.AuthorsURL
+}
+
+// GetCommitCount returns the CommitCount field if it's non-nil, zero value otherwise.
+func (i *Import) GetCommitCount() int {
+       if i == nil || i.CommitCount == nil {
+               return 0
+       }
+       return *i.CommitCount
+}
+
+// GetFailedStep returns the FailedStep field if it's non-nil, zero value otherwise.
+func (i *Import) GetFailedStep() string {
+       if i == nil || i.FailedStep == nil {
+               return ""
+       }
+       return *i.FailedStep
+}
+
+// GetHasLargeFiles returns the HasLargeFiles field if it's non-nil, zero value otherwise.
+func (i *Import) GetHasLargeFiles() bool {
+       if i == nil || i.HasLargeFiles == nil {
+               return false
+       }
+       return *i.HasLargeFiles
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (i *Import) GetHTMLURL() string {
+       if i == nil || i.HTMLURL == nil {
+               return ""
+       }
+       return *i.HTMLURL
+}
+
+// GetHumanName returns the HumanName field if it's non-nil, zero value otherwise.
+func (i *Import) GetHumanName() string {
+       if i == nil || i.HumanName == nil {
+               return ""
+       }
+       return *i.HumanName
+}
+
+// GetLargeFilesCount returns the LargeFilesCount field if it's non-nil, zero value otherwise.
+func (i *Import) GetLargeFilesCount() int {
+       if i == nil || i.LargeFilesCount == nil {
+               return 0
+       }
+       return *i.LargeFilesCount
+}
+
+// GetLargeFilesSize returns the LargeFilesSize field if it's non-nil, zero value otherwise.
+func (i *Import) GetLargeFilesSize() int {
+       if i == nil || i.LargeFilesSize == nil {
+               return 0
+       }
+       return *i.LargeFilesSize
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (i *Import) GetMessage() string {
+       if i == nil || i.Message == nil {
+               return ""
+       }
+       return *i.Message
+}
+
+// GetPercent returns the Percent field if it's non-nil, zero value otherwise.
+func (i *Import) GetPercent() int {
+       if i == nil || i.Percent == nil {
+               return 0
+       }
+       return *i.Percent
+}
+
+// GetPushPercent returns the PushPercent field if it's non-nil, zero value otherwise.
+func (i *Import) GetPushPercent() int {
+       if i == nil || i.PushPercent == nil {
+               return 0
+       }
+       return *i.PushPercent
+}
+
+// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
+func (i *Import) GetRepositoryURL() string {
+       if i == nil || i.RepositoryURL == nil {
+               return ""
+       }
+       return *i.RepositoryURL
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (i *Import) GetStatus() string {
+       if i == nil || i.Status == nil {
+               return ""
+       }
+       return *i.Status
+}
+
+// GetStatusText returns the StatusText field if it's non-nil, zero value otherwise.
+func (i *Import) GetStatusText() string {
+       if i == nil || i.StatusText == nil {
+               return ""
+       }
+       return *i.StatusText
+}
+
+// GetTFVCProject returns the TFVCProject field if it's non-nil, zero value otherwise.
+func (i *Import) GetTFVCProject() string {
+       if i == nil || i.TFVCProject == nil {
+               return ""
+       }
+       return *i.TFVCProject
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (i *Import) GetURL() string {
+       if i == nil || i.URL == nil {
+               return ""
+       }
+       return *i.URL
+}
+
+// GetUseLFS returns the UseLFS field if it's non-nil, zero value otherwise.
+func (i *Import) GetUseLFS() string {
+       if i == nil || i.UseLFS == nil {
+               return ""
+       }
+       return *i.UseLFS
+}
+
+// GetVCS returns the VCS field if it's non-nil, zero value otherwise.
+func (i *Import) GetVCS() string {
+       if i == nil || i.VCS == nil {
+               return ""
+       }
+       return *i.VCS
+}
+
+// GetVCSPassword returns the VCSPassword field if it's non-nil, zero value otherwise.
+func (i *Import) GetVCSPassword() string {
+       if i == nil || i.VCSPassword == nil {
+               return ""
+       }
+       return *i.VCSPassword
+}
+
+// GetVCSURL returns the VCSURL field if it's non-nil, zero value otherwise.
+func (i *Import) GetVCSURL() string {
+       if i == nil || i.VCSURL == nil {
+               return ""
+       }
+       return *i.VCSURL
+}
+
+// GetVCSUsername returns the VCSUsername field if it's non-nil, zero value otherwise.
+func (i *Import) GetVCSUsername() string {
+       if i == nil || i.VCSUsername == nil {
+               return ""
+       }
+       return *i.VCSUsername
+}
+
+// GetAccessTokensURL returns the AccessTokensURL field if it's non-nil, zero value otherwise.
+func (i *Installation) GetAccessTokensURL() string {
+       if i == nil || i.AccessTokensURL == nil {
+               return ""
+       }
+       return *i.AccessTokensURL
+}
+
+// GetAccount returns the Account field.
+func (i *Installation) GetAccount() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Account
+}
+
+// GetAppID returns the AppID field if it's non-nil, zero value otherwise.
+func (i *Installation) GetAppID() int64 {
+       if i == nil || i.AppID == nil {
+               return 0
+       }
+       return *i.AppID
+}
+
+// GetAppSlug returns the AppSlug field if it's non-nil, zero value otherwise.
+func (i *Installation) GetAppSlug() string {
+       if i == nil || i.AppSlug == nil {
+               return ""
+       }
+       return *i.AppSlug
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (i *Installation) GetCreatedAt() Timestamp {
+       if i == nil || i.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *i.CreatedAt
+}
+
+// GetHasMultipleSingleFiles returns the HasMultipleSingleFiles field if it's non-nil, zero value otherwise.
+func (i *Installation) GetHasMultipleSingleFiles() bool {
+       if i == nil || i.HasMultipleSingleFiles == nil {
+               return false
+       }
+       return *i.HasMultipleSingleFiles
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (i *Installation) GetHTMLURL() string {
+       if i == nil || i.HTMLURL == nil {
+               return ""
+       }
+       return *i.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (i *Installation) GetID() int64 {
+       if i == nil || i.ID == nil {
+               return 0
+       }
+       return *i.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (i *Installation) GetNodeID() string {
+       if i == nil || i.NodeID == nil {
+               return ""
+       }
+       return *i.NodeID
+}
+
+// GetPermissions returns the Permissions field.
+func (i *Installation) GetPermissions() *InstallationPermissions {
+       if i == nil {
+               return nil
+       }
+       return i.Permissions
+}
+
+// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise.
+func (i *Installation) GetRepositoriesURL() string {
+       if i == nil || i.RepositoriesURL == nil {
+               return ""
+       }
+       return *i.RepositoriesURL
+}
+
+// GetRepositorySelection returns the RepositorySelection field if it's non-nil, zero value otherwise.
+func (i *Installation) GetRepositorySelection() string {
+       if i == nil || i.RepositorySelection == nil {
+               return ""
+       }
+       return *i.RepositorySelection
+}
+
+// GetSingleFileName returns the SingleFileName field if it's non-nil, zero value otherwise.
+func (i *Installation) GetSingleFileName() string {
+       if i == nil || i.SingleFileName == nil {
+               return ""
+       }
+       return *i.SingleFileName
+}
+
+// GetSuspendedAt returns the SuspendedAt field if it's non-nil, zero value otherwise.
+func (i *Installation) GetSuspendedAt() Timestamp {
+       if i == nil || i.SuspendedAt == nil {
+               return Timestamp{}
+       }
+       return *i.SuspendedAt
+}
+
+// GetSuspendedBy returns the SuspendedBy field.
+func (i *Installation) GetSuspendedBy() *User {
+       if i == nil {
+               return nil
+       }
+       return i.SuspendedBy
+}
+
+// GetTargetID returns the TargetID field if it's non-nil, zero value otherwise.
+func (i *Installation) GetTargetID() int64 {
+       if i == nil || i.TargetID == nil {
+               return 0
+       }
+       return *i.TargetID
+}
+
+// GetTargetType returns the TargetType field if it's non-nil, zero value otherwise.
+func (i *Installation) GetTargetType() string {
+       if i == nil || i.TargetType == nil {
+               return ""
+       }
+       return *i.TargetType
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (i *Installation) GetUpdatedAt() Timestamp {
+       if i == nil || i.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *i.UpdatedAt
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (i *InstallationEvent) GetAction() string {
+       if i == nil || i.Action == nil {
+               return ""
+       }
+       return *i.Action
+}
+
+// GetInstallation returns the Installation field.
+func (i *InstallationEvent) GetInstallation() *Installation {
+       if i == nil {
+               return nil
+       }
+       return i.Installation
+}
+
+// GetSender returns the Sender field.
+func (i *InstallationEvent) GetSender() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Sender
+}
+
+// GetActions returns the Actions field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetActions() string {
+       if i == nil || i.Actions == nil {
+               return ""
+       }
+       return *i.Actions
+}
+
+// GetAdministration returns the Administration field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetAdministration() string {
+       if i == nil || i.Administration == nil {
+               return ""
+       }
+       return *i.Administration
+}
+
+// GetBlocking returns the Blocking field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetBlocking() string {
+       if i == nil || i.Blocking == nil {
+               return ""
+       }
+       return *i.Blocking
+}
+
+// GetChecks returns the Checks field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetChecks() string {
+       if i == nil || i.Checks == nil {
+               return ""
+       }
+       return *i.Checks
+}
+
+// GetContentReferences returns the ContentReferences field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetContentReferences() string {
+       if i == nil || i.ContentReferences == nil {
+               return ""
+       }
+       return *i.ContentReferences
+}
+
+// GetContents returns the Contents field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetContents() string {
+       if i == nil || i.Contents == nil {
+               return ""
+       }
+       return *i.Contents
+}
+
+// GetDeployments returns the Deployments field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetDeployments() string {
+       if i == nil || i.Deployments == nil {
+               return ""
+       }
+       return *i.Deployments
+}
+
+// GetEmails returns the Emails field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetEmails() string {
+       if i == nil || i.Emails == nil {
+               return ""
+       }
+       return *i.Emails
+}
+
+// GetEnvironments returns the Environments field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetEnvironments() string {
+       if i == nil || i.Environments == nil {
+               return ""
+       }
+       return *i.Environments
+}
+
+// GetFollowers returns the Followers field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetFollowers() string {
+       if i == nil || i.Followers == nil {
+               return ""
+       }
+       return *i.Followers
+}
+
+// GetIssues returns the Issues field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetIssues() string {
+       if i == nil || i.Issues == nil {
+               return ""
+       }
+       return *i.Issues
+}
+
+// GetMembers returns the Members field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetMembers() string {
+       if i == nil || i.Members == nil {
+               return ""
+       }
+       return *i.Members
+}
+
+// GetMetadata returns the Metadata field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetMetadata() string {
+       if i == nil || i.Metadata == nil {
+               return ""
+       }
+       return *i.Metadata
+}
+
+// GetOrganizationAdministration returns the OrganizationAdministration field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetOrganizationAdministration() string {
+       if i == nil || i.OrganizationAdministration == nil {
+               return ""
+       }
+       return *i.OrganizationAdministration
+}
+
+// GetOrganizationHooks returns the OrganizationHooks field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetOrganizationHooks() string {
+       if i == nil || i.OrganizationHooks == nil {
+               return ""
+       }
+       return *i.OrganizationHooks
+}
+
+// GetOrganizationPlan returns the OrganizationPlan field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetOrganizationPlan() string {
+       if i == nil || i.OrganizationPlan == nil {
+               return ""
+       }
+       return *i.OrganizationPlan
+}
+
+// GetOrganizationPreReceiveHooks returns the OrganizationPreReceiveHooks field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetOrganizationPreReceiveHooks() string {
+       if i == nil || i.OrganizationPreReceiveHooks == nil {
+               return ""
+       }
+       return *i.OrganizationPreReceiveHooks
+}
+
+// GetOrganizationProjects returns the OrganizationProjects field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetOrganizationProjects() string {
+       if i == nil || i.OrganizationProjects == nil {
+               return ""
+       }
+       return *i.OrganizationProjects
+}
+
+// GetOrganizationSecrets returns the OrganizationSecrets field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetOrganizationSecrets() string {
+       if i == nil || i.OrganizationSecrets == nil {
+               return ""
+       }
+       return *i.OrganizationSecrets
+}
+
+// GetOrganizationSelfHostedRunners returns the OrganizationSelfHostedRunners field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetOrganizationSelfHostedRunners() string {
+       if i == nil || i.OrganizationSelfHostedRunners == nil {
+               return ""
+       }
+       return *i.OrganizationSelfHostedRunners
+}
+
+// GetOrganizationUserBlocking returns the OrganizationUserBlocking field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetOrganizationUserBlocking() string {
+       if i == nil || i.OrganizationUserBlocking == nil {
+               return ""
+       }
+       return *i.OrganizationUserBlocking
+}
+
+// GetPackages returns the Packages field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetPackages() string {
+       if i == nil || i.Packages == nil {
+               return ""
+       }
+       return *i.Packages
+}
+
+// GetPages returns the Pages field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetPages() string {
+       if i == nil || i.Pages == nil {
+               return ""
+       }
+       return *i.Pages
+}
+
+// GetPullRequests returns the PullRequests field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetPullRequests() string {
+       if i == nil || i.PullRequests == nil {
+               return ""
+       }
+       return *i.PullRequests
+}
+
+// GetRepositoryHooks returns the RepositoryHooks field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetRepositoryHooks() string {
+       if i == nil || i.RepositoryHooks == nil {
+               return ""
+       }
+       return *i.RepositoryHooks
+}
+
+// GetRepositoryPreReceiveHooks returns the RepositoryPreReceiveHooks field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetRepositoryPreReceiveHooks() string {
+       if i == nil || i.RepositoryPreReceiveHooks == nil {
+               return ""
+       }
+       return *i.RepositoryPreReceiveHooks
+}
+
+// GetRepositoryProjects returns the RepositoryProjects field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetRepositoryProjects() string {
+       if i == nil || i.RepositoryProjects == nil {
+               return ""
+       }
+       return *i.RepositoryProjects
+}
+
+// GetSecrets returns the Secrets field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetSecrets() string {
+       if i == nil || i.Secrets == nil {
+               return ""
+       }
+       return *i.Secrets
+}
+
+// GetSecretScanningAlerts returns the SecretScanningAlerts field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetSecretScanningAlerts() string {
+       if i == nil || i.SecretScanningAlerts == nil {
+               return ""
+       }
+       return *i.SecretScanningAlerts
+}
+
+// GetSecurityEvents returns the SecurityEvents field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetSecurityEvents() string {
+       if i == nil || i.SecurityEvents == nil {
+               return ""
+       }
+       return *i.SecurityEvents
+}
+
+// GetSingleFile returns the SingleFile field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetSingleFile() string {
+       if i == nil || i.SingleFile == nil {
+               return ""
+       }
+       return *i.SingleFile
+}
+
+// GetStatuses returns the Statuses field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetStatuses() string {
+       if i == nil || i.Statuses == nil {
+               return ""
+       }
+       return *i.Statuses
+}
+
+// GetTeamDiscussions returns the TeamDiscussions field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetTeamDiscussions() string {
+       if i == nil || i.TeamDiscussions == nil {
+               return ""
+       }
+       return *i.TeamDiscussions
+}
+
+// GetVulnerabilityAlerts returns the VulnerabilityAlerts field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetVulnerabilityAlerts() string {
+       if i == nil || i.VulnerabilityAlerts == nil {
+               return ""
+       }
+       return *i.VulnerabilityAlerts
+}
+
+// GetWorkflows returns the Workflows field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetWorkflows() string {
+       if i == nil || i.Workflows == nil {
+               return ""
+       }
+       return *i.Workflows
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (i *InstallationRepositoriesEvent) GetAction() string {
+       if i == nil || i.Action == nil {
+               return ""
+       }
+       return *i.Action
+}
+
+// GetInstallation returns the Installation field.
+func (i *InstallationRepositoriesEvent) GetInstallation() *Installation {
+       if i == nil {
+               return nil
+       }
+       return i.Installation
+}
+
+// GetRepositorySelection returns the RepositorySelection field if it's non-nil, zero value otherwise.
+func (i *InstallationRepositoriesEvent) GetRepositorySelection() string {
+       if i == nil || i.RepositorySelection == nil {
+               return ""
+       }
+       return *i.RepositorySelection
+}
+
+// GetSender returns the Sender field.
+func (i *InstallationRepositoriesEvent) GetSender() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Sender
+}
+
+// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
+func (i *InstallationToken) GetExpiresAt() time.Time {
+       if i == nil || i.ExpiresAt == nil {
+               return time.Time{}
+       }
+       return *i.ExpiresAt
+}
+
+// GetPermissions returns the Permissions field.
+func (i *InstallationToken) GetPermissions() *InstallationPermissions {
+       if i == nil {
+               return nil
+       }
+       return i.Permissions
+}
+
+// GetToken returns the Token field if it's non-nil, zero value otherwise.
+func (i *InstallationToken) GetToken() string {
+       if i == nil || i.Token == nil {
+               return ""
+       }
+       return *i.Token
+}
+
+// GetPermissions returns the Permissions field.
+func (i *InstallationTokenOptions) GetPermissions() *InstallationPermissions {
+       if i == nil {
+               return nil
+       }
+       return i.Permissions
+}
+
+// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
+func (i *InteractionRestriction) GetExpiresAt() Timestamp {
+       if i == nil || i.ExpiresAt == nil {
+               return Timestamp{}
+       }
+       return *i.ExpiresAt
+}
+
+// GetLimit returns the Limit field if it's non-nil, zero value otherwise.
+func (i *InteractionRestriction) GetLimit() string {
+       if i == nil || i.Limit == nil {
+               return ""
+       }
+       return *i.Limit
+}
+
+// GetOrigin returns the Origin field if it's non-nil, zero value otherwise.
+func (i *InteractionRestriction) GetOrigin() string {
+       if i == nil || i.Origin == nil {
+               return ""
+       }
+       return *i.Origin
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (i *Invitation) GetCreatedAt() time.Time {
+       if i == nil || i.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *i.CreatedAt
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (i *Invitation) GetEmail() string {
+       if i == nil || i.Email == nil {
+               return ""
+       }
+       return *i.Email
+}
+
+// GetFailedAt returns the FailedAt field if it's non-nil, zero value otherwise.
+func (i *Invitation) GetFailedAt() Timestamp {
+       if i == nil || i.FailedAt == nil {
+               return Timestamp{}
+       }
+       return *i.FailedAt
+}
+
+// GetFailedReason returns the FailedReason field if it's non-nil, zero value otherwise.
+func (i *Invitation) GetFailedReason() string {
+       if i == nil || i.FailedReason == nil {
+               return ""
+       }
+       return *i.FailedReason
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (i *Invitation) GetID() int64 {
+       if i == nil || i.ID == nil {
+               return 0
+       }
+       return *i.ID
+}
+
+// GetInvitationTeamURL returns the InvitationTeamURL field if it's non-nil, zero value otherwise.
+func (i *Invitation) GetInvitationTeamURL() string {
+       if i == nil || i.InvitationTeamURL == nil {
+               return ""
+       }
+       return *i.InvitationTeamURL
+}
+
+// GetInviter returns the Inviter field.
+func (i *Invitation) GetInviter() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Inviter
+}
+
+// GetLogin returns the Login field if it's non-nil, zero value otherwise.
+func (i *Invitation) GetLogin() string {
+       if i == nil || i.Login == nil {
+               return ""
+       }
+       return *i.Login
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (i *Invitation) GetNodeID() string {
+       if i == nil || i.NodeID == nil {
+               return ""
+       }
+       return *i.NodeID
+}
+
+// GetRole returns the Role field if it's non-nil, zero value otherwise.
+func (i *Invitation) GetRole() string {
+       if i == nil || i.Role == nil {
+               return ""
+       }
+       return *i.Role
+}
+
+// GetTeamCount returns the TeamCount field if it's non-nil, zero value otherwise.
+func (i *Invitation) GetTeamCount() int {
+       if i == nil || i.TeamCount == nil {
+               return 0
+       }
+       return *i.TeamCount
+}
+
+// GetActiveLockReason returns the ActiveLockReason field if it's non-nil, zero value otherwise.
+func (i *Issue) GetActiveLockReason() string {
+       if i == nil || i.ActiveLockReason == nil {
+               return ""
+       }
+       return *i.ActiveLockReason
+}
+
+// GetAssignee returns the Assignee field.
+func (i *Issue) GetAssignee() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Assignee
+}
+
+// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise.
+func (i *Issue) GetAuthorAssociation() string {
+       if i == nil || i.AuthorAssociation == nil {
+               return ""
+       }
+       return *i.AuthorAssociation
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (i *Issue) GetBody() string {
+       if i == nil || i.Body == nil {
+               return ""
+       }
+       return *i.Body
+}
+
+// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise.
+func (i *Issue) GetClosedAt() time.Time {
+       if i == nil || i.ClosedAt == nil {
+               return time.Time{}
+       }
+       return *i.ClosedAt
+}
+
+// GetClosedBy returns the ClosedBy field.
+func (i *Issue) GetClosedBy() *User {
+       if i == nil {
+               return nil
+       }
+       return i.ClosedBy
+}
+
+// GetComments returns the Comments field if it's non-nil, zero value otherwise.
+func (i *Issue) GetComments() int {
+       if i == nil || i.Comments == nil {
+               return 0
+       }
+       return *i.Comments
+}
+
+// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
+func (i *Issue) GetCommentsURL() string {
+       if i == nil || i.CommentsURL == nil {
+               return ""
+       }
+       return *i.CommentsURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (i *Issue) GetCreatedAt() time.Time {
+       if i == nil || i.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *i.CreatedAt
+}
+
+// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
+func (i *Issue) GetEventsURL() string {
+       if i == nil || i.EventsURL == nil {
+               return ""
+       }
+       return *i.EventsURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (i *Issue) GetHTMLURL() string {
+       if i == nil || i.HTMLURL == nil {
+               return ""
+       }
+       return *i.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (i *Issue) GetID() int64 {
+       if i == nil || i.ID == nil {
+               return 0
+       }
+       return *i.ID
+}
+
+// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise.
+func (i *Issue) GetLabelsURL() string {
+       if i == nil || i.LabelsURL == nil {
+               return ""
+       }
+       return *i.LabelsURL
+}
+
+// GetLocked returns the Locked field if it's non-nil, zero value otherwise.
+func (i *Issue) GetLocked() bool {
+       if i == nil || i.Locked == nil {
+               return false
+       }
+       return *i.Locked
+}
+
+// GetMilestone returns the Milestone field.
+func (i *Issue) GetMilestone() *Milestone {
+       if i == nil {
+               return nil
+       }
+       return i.Milestone
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (i *Issue) GetNodeID() string {
+       if i == nil || i.NodeID == nil {
+               return ""
+       }
+       return *i.NodeID
+}
+
+// GetNumber returns the Number field if it's non-nil, zero value otherwise.
+func (i *Issue) GetNumber() int {
+       if i == nil || i.Number == nil {
+               return 0
+       }
+       return *i.Number
+}
+
+// GetPullRequestLinks returns the PullRequestLinks field.
+func (i *Issue) GetPullRequestLinks() *PullRequestLinks {
+       if i == nil {
+               return nil
+       }
+       return i.PullRequestLinks
+}
+
+// GetReactions returns the Reactions field.
+func (i *Issue) GetReactions() *Reactions {
+       if i == nil {
+               return nil
+       }
+       return i.Reactions
+}
+
+// GetRepository returns the Repository field.
+func (i *Issue) GetRepository() *Repository {
+       if i == nil {
+               return nil
+       }
+       return i.Repository
+}
+
+// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
+func (i *Issue) GetRepositoryURL() string {
+       if i == nil || i.RepositoryURL == nil {
+               return ""
+       }
+       return *i.RepositoryURL
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (i *Issue) GetState() string {
+       if i == nil || i.State == nil {
+               return ""
+       }
+       return *i.State
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (i *Issue) GetTitle() string {
+       if i == nil || i.Title == nil {
+               return ""
+       }
+       return *i.Title
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (i *Issue) GetUpdatedAt() time.Time {
+       if i == nil || i.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *i.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (i *Issue) GetURL() string {
+       if i == nil || i.URL == nil {
+               return ""
+       }
+       return *i.URL
+}
+
+// GetUser returns the User field.
+func (i *Issue) GetUser() *User {
+       if i == nil {
+               return nil
+       }
+       return i.User
+}
+
+// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise.
+func (i *IssueComment) GetAuthorAssociation() string {
+       if i == nil || i.AuthorAssociation == nil {
+               return ""
+       }
+       return *i.AuthorAssociation
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (i *IssueComment) GetBody() string {
+       if i == nil || i.Body == nil {
+               return ""
+       }
+       return *i.Body
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (i *IssueComment) GetCreatedAt() time.Time {
+       if i == nil || i.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *i.CreatedAt
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (i *IssueComment) GetHTMLURL() string {
+       if i == nil || i.HTMLURL == nil {
+               return ""
+       }
+       return *i.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (i *IssueComment) GetID() int64 {
+       if i == nil || i.ID == nil {
+               return 0
+       }
+       return *i.ID
+}
+
+// GetIssueURL returns the IssueURL field if it's non-nil, zero value otherwise.
+func (i *IssueComment) GetIssueURL() string {
+       if i == nil || i.IssueURL == nil {
+               return ""
+       }
+       return *i.IssueURL
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (i *IssueComment) GetNodeID() string {
+       if i == nil || i.NodeID == nil {
+               return ""
+       }
+       return *i.NodeID
+}
+
+// GetReactions returns the Reactions field.
+func (i *IssueComment) GetReactions() *Reactions {
+       if i == nil {
+               return nil
+       }
+       return i.Reactions
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (i *IssueComment) GetUpdatedAt() time.Time {
+       if i == nil || i.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *i.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (i *IssueComment) GetURL() string {
+       if i == nil || i.URL == nil {
+               return ""
+       }
+       return *i.URL
+}
+
+// GetUser returns the User field.
+func (i *IssueComment) GetUser() *User {
+       if i == nil {
+               return nil
+       }
+       return i.User
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (i *IssueCommentEvent) GetAction() string {
+       if i == nil || i.Action == nil {
+               return ""
+       }
+       return *i.Action
+}
+
+// GetChanges returns the Changes field.
+func (i *IssueCommentEvent) GetChanges() *EditChange {
+       if i == nil {
+               return nil
+       }
+       return i.Changes
+}
+
+// GetComment returns the Comment field.
+func (i *IssueCommentEvent) GetComment() *IssueComment {
+       if i == nil {
+               return nil
+       }
+       return i.Comment
+}
+
+// GetInstallation returns the Installation field.
+func (i *IssueCommentEvent) GetInstallation() *Installation {
+       if i == nil {
+               return nil
+       }
+       return i.Installation
+}
+
+// GetIssue returns the Issue field.
+func (i *IssueCommentEvent) GetIssue() *Issue {
+       if i == nil {
+               return nil
+       }
+       return i.Issue
+}
+
+// GetRepo returns the Repo field.
+func (i *IssueCommentEvent) GetRepo() *Repository {
+       if i == nil {
+               return nil
+       }
+       return i.Repo
+}
+
+// GetSender returns the Sender field.
+func (i *IssueCommentEvent) GetSender() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Sender
+}
+
+// GetActor returns the Actor field.
+func (i *IssueEvent) GetActor() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Actor
+}
+
+// GetAssignee returns the Assignee field.
+func (i *IssueEvent) GetAssignee() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Assignee
+}
+
+// GetAssigner returns the Assigner field.
+func (i *IssueEvent) GetAssigner() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Assigner
+}
+
+// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
+func (i *IssueEvent) GetCommitID() string {
+       if i == nil || i.CommitID == nil {
+               return ""
+       }
+       return *i.CommitID
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (i *IssueEvent) GetCreatedAt() time.Time {
+       if i == nil || i.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *i.CreatedAt
+}
+
+// GetDismissedReview returns the DismissedReview field.
+func (i *IssueEvent) GetDismissedReview() *DismissedReview {
+       if i == nil {
+               return nil
+       }
+       return i.DismissedReview
+}
+
+// GetEvent returns the Event field if it's non-nil, zero value otherwise.
+func (i *IssueEvent) GetEvent() string {
+       if i == nil || i.Event == nil {
+               return ""
+       }
+       return *i.Event
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (i *IssueEvent) GetID() int64 {
+       if i == nil || i.ID == nil {
+               return 0
+       }
+       return *i.ID
+}
+
+// GetIssue returns the Issue field.
+func (i *IssueEvent) GetIssue() *Issue {
+       if i == nil {
+               return nil
+       }
+       return i.Issue
+}
+
+// GetLabel returns the Label field.
+func (i *IssueEvent) GetLabel() *Label {
+       if i == nil {
+               return nil
+       }
+       return i.Label
+}
+
+// GetLockReason returns the LockReason field if it's non-nil, zero value otherwise.
+func (i *IssueEvent) GetLockReason() string {
+       if i == nil || i.LockReason == nil {
+               return ""
+       }
+       return *i.LockReason
+}
+
+// GetMilestone returns the Milestone field.
+func (i *IssueEvent) GetMilestone() *Milestone {
+       if i == nil {
+               return nil
+       }
+       return i.Milestone
+}
+
+// GetProjectCard returns the ProjectCard field.
+func (i *IssueEvent) GetProjectCard() *ProjectCard {
+       if i == nil {
+               return nil
+       }
+       return i.ProjectCard
+}
+
+// GetRename returns the Rename field.
+func (i *IssueEvent) GetRename() *Rename {
+       if i == nil {
+               return nil
+       }
+       return i.Rename
+}
+
+// GetRequestedReviewer returns the RequestedReviewer field.
+func (i *IssueEvent) GetRequestedReviewer() *User {
+       if i == nil {
+               return nil
+       }
+       return i.RequestedReviewer
+}
+
+// GetReviewRequester returns the ReviewRequester field.
+func (i *IssueEvent) GetReviewRequester() *User {
+       if i == nil {
+               return nil
+       }
+       return i.ReviewRequester
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (i *IssueEvent) GetURL() string {
+       if i == nil || i.URL == nil {
+               return ""
+       }
+       return *i.URL
+}
+
+// GetAssignee returns the Assignee field if it's non-nil, zero value otherwise.
+func (i *IssueImport) GetAssignee() string {
+       if i == nil || i.Assignee == nil {
+               return ""
+       }
+       return *i.Assignee
+}
+
+// GetClosed returns the Closed field if it's non-nil, zero value otherwise.
+func (i *IssueImport) GetClosed() bool {
+       if i == nil || i.Closed == nil {
+               return false
+       }
+       return *i.Closed
+}
+
+// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise.
+func (i *IssueImport) GetClosedAt() time.Time {
+       if i == nil || i.ClosedAt == nil {
+               return time.Time{}
+       }
+       return *i.ClosedAt
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (i *IssueImport) GetCreatedAt() time.Time {
+       if i == nil || i.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *i.CreatedAt
+}
+
+// GetMilestone returns the Milestone field if it's non-nil, zero value otherwise.
+func (i *IssueImport) GetMilestone() int {
+       if i == nil || i.Milestone == nil {
+               return 0
+       }
+       return *i.Milestone
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (i *IssueImport) GetUpdatedAt() time.Time {
+       if i == nil || i.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *i.UpdatedAt
+}
+
+// GetCode returns the Code field if it's non-nil, zero value otherwise.
+func (i *IssueImportError) GetCode() string {
+       if i == nil || i.Code == nil {
+               return ""
+       }
+       return *i.Code
+}
+
+// GetField returns the Field field if it's non-nil, zero value otherwise.
+func (i *IssueImportError) GetField() string {
+       if i == nil || i.Field == nil {
+               return ""
+       }
+       return *i.Field
+}
+
+// GetLocation returns the Location field if it's non-nil, zero value otherwise.
+func (i *IssueImportError) GetLocation() string {
+       if i == nil || i.Location == nil {
+               return ""
+       }
+       return *i.Location
+}
+
+// GetResource returns the Resource field if it's non-nil, zero value otherwise.
+func (i *IssueImportError) GetResource() string {
+       if i == nil || i.Resource == nil {
+               return ""
+       }
+       return *i.Resource
+}
+
+// GetValue returns the Value field if it's non-nil, zero value otherwise.
+func (i *IssueImportError) GetValue() string {
+       if i == nil || i.Value == nil {
+               return ""
+       }
+       return *i.Value
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (i *IssueImportResponse) GetCreatedAt() time.Time {
+       if i == nil || i.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *i.CreatedAt
+}
+
+// GetDocumentationURL returns the DocumentationURL field if it's non-nil, zero value otherwise.
+func (i *IssueImportResponse) GetDocumentationURL() string {
+       if i == nil || i.DocumentationURL == nil {
+               return ""
+       }
+       return *i.DocumentationURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (i *IssueImportResponse) GetID() int {
+       if i == nil || i.ID == nil {
+               return 0
+       }
+       return *i.ID
+}
+
+// GetImportIssuesURL returns the ImportIssuesURL field if it's non-nil, zero value otherwise.
+func (i *IssueImportResponse) GetImportIssuesURL() string {
+       if i == nil || i.ImportIssuesURL == nil {
+               return ""
+       }
+       return *i.ImportIssuesURL
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (i *IssueImportResponse) GetMessage() string {
+       if i == nil || i.Message == nil {
+               return ""
+       }
+       return *i.Message
+}
+
+// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
+func (i *IssueImportResponse) GetRepositoryURL() string {
+       if i == nil || i.RepositoryURL == nil {
+               return ""
+       }
+       return *i.RepositoryURL
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (i *IssueImportResponse) GetStatus() string {
+       if i == nil || i.Status == nil {
+               return ""
+       }
+       return *i.Status
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (i *IssueImportResponse) GetUpdatedAt() time.Time {
+       if i == nil || i.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *i.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (i *IssueImportResponse) GetURL() string {
+       if i == nil || i.URL == nil {
+               return ""
+       }
+       return *i.URL
+}
+
+// GetDirection returns the Direction field if it's non-nil, zero value otherwise.
+func (i *IssueListCommentsOptions) GetDirection() string {
+       if i == nil || i.Direction == nil {
+               return ""
+       }
+       return *i.Direction
+}
+
+// GetSince returns the Since field if it's non-nil, zero value otherwise.
+func (i *IssueListCommentsOptions) GetSince() time.Time {
+       if i == nil || i.Since == nil {
+               return time.Time{}
+       }
+       return *i.Since
+}
+
+// GetSort returns the Sort field if it's non-nil, zero value otherwise.
+func (i *IssueListCommentsOptions) GetSort() string {
+       if i == nil || i.Sort == nil {
+               return ""
+       }
+       return *i.Sort
+}
+
+// GetAssignee returns the Assignee field if it's non-nil, zero value otherwise.
+func (i *IssueRequest) GetAssignee() string {
+       if i == nil || i.Assignee == nil {
+               return ""
+       }
+       return *i.Assignee
+}
+
+// GetAssignees returns the Assignees field if it's non-nil, zero value otherwise.
+func (i *IssueRequest) GetAssignees() []string {
+       if i == nil || i.Assignees == nil {
+               return nil
+       }
+       return *i.Assignees
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (i *IssueRequest) GetBody() string {
+       if i == nil || i.Body == nil {
+               return ""
+       }
+       return *i.Body
+}
+
+// GetLabels returns the Labels field if it's non-nil, zero value otherwise.
+func (i *IssueRequest) GetLabels() []string {
+       if i == nil || i.Labels == nil {
+               return nil
+       }
+       return *i.Labels
+}
+
+// GetMilestone returns the Milestone field if it's non-nil, zero value otherwise.
+func (i *IssueRequest) GetMilestone() int {
+       if i == nil || i.Milestone == nil {
+               return 0
+       }
+       return *i.Milestone
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (i *IssueRequest) GetState() string {
+       if i == nil || i.State == nil {
+               return ""
+       }
+       return *i.State
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (i *IssueRequest) GetTitle() string {
+       if i == nil || i.Title == nil {
+               return ""
+       }
+       return *i.Title
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (i *IssuesEvent) GetAction() string {
+       if i == nil || i.Action == nil {
+               return ""
+       }
+       return *i.Action
+}
+
+// GetAssignee returns the Assignee field.
+func (i *IssuesEvent) GetAssignee() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Assignee
+}
+
+// GetChanges returns the Changes field.
+func (i *IssuesEvent) GetChanges() *EditChange {
+       if i == nil {
+               return nil
+       }
+       return i.Changes
+}
+
+// GetInstallation returns the Installation field.
+func (i *IssuesEvent) GetInstallation() *Installation {
+       if i == nil {
+               return nil
+       }
+       return i.Installation
+}
+
+// GetIssue returns the Issue field.
+func (i *IssuesEvent) GetIssue() *Issue {
+       if i == nil {
+               return nil
+       }
+       return i.Issue
+}
+
+// GetLabel returns the Label field.
+func (i *IssuesEvent) GetLabel() *Label {
+       if i == nil {
+               return nil
+       }
+       return i.Label
+}
+
+// GetRepo returns the Repo field.
+func (i *IssuesEvent) GetRepo() *Repository {
+       if i == nil {
+               return nil
+       }
+       return i.Repo
+}
+
+// GetSender returns the Sender field.
+func (i *IssuesEvent) GetSender() *User {
+       if i == nil {
+               return nil
+       }
+       return i.Sender
+}
+
+// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
+func (i *IssuesSearchResult) GetIncompleteResults() bool {
+       if i == nil || i.IncompleteResults == nil {
+               return false
+       }
+       return *i.IncompleteResults
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (i *IssuesSearchResult) GetTotal() int {
+       if i == nil || i.Total == nil {
+               return 0
+       }
+       return *i.Total
+}
+
+// GetClosedIssues returns the ClosedIssues field if it's non-nil, zero value otherwise.
+func (i *IssueStats) GetClosedIssues() int {
+       if i == nil || i.ClosedIssues == nil {
+               return 0
+       }
+       return *i.ClosedIssues
+}
+
+// GetOpenIssues returns the OpenIssues field if it's non-nil, zero value otherwise.
+func (i *IssueStats) GetOpenIssues() int {
+       if i == nil || i.OpenIssues == nil {
+               return 0
+       }
+       return *i.OpenIssues
+}
+
+// GetTotalIssues returns the TotalIssues field if it's non-nil, zero value otherwise.
+func (i *IssueStats) GetTotalIssues() int {
+       if i == nil || i.TotalIssues == nil {
+               return 0
+       }
+       return *i.TotalIssues
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (j *Jobs) GetTotalCount() int {
+       if j == nil || j.TotalCount == nil {
+               return 0
+       }
+       return *j.TotalCount
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (k *Key) GetCreatedAt() Timestamp {
+       if k == nil || k.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *k.CreatedAt
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (k *Key) GetID() int64 {
+       if k == nil || k.ID == nil {
+               return 0
+       }
+       return *k.ID
+}
+
+// GetKey returns the Key field if it's non-nil, zero value otherwise.
+func (k *Key) GetKey() string {
+       if k == nil || k.Key == nil {
+               return ""
+       }
+       return *k.Key
+}
+
+// GetReadOnly returns the ReadOnly field if it's non-nil, zero value otherwise.
+func (k *Key) GetReadOnly() bool {
+       if k == nil || k.ReadOnly == nil {
+               return false
+       }
+       return *k.ReadOnly
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (k *Key) GetTitle() string {
+       if k == nil || k.Title == nil {
+               return ""
+       }
+       return *k.Title
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (k *Key) GetURL() string {
+       if k == nil || k.URL == nil {
+               return ""
+       }
+       return *k.URL
+}
+
+// GetVerified returns the Verified field if it's non-nil, zero value otherwise.
+func (k *Key) GetVerified() bool {
+       if k == nil || k.Verified == nil {
+               return false
+       }
+       return *k.Verified
+}
+
+// GetColor returns the Color field if it's non-nil, zero value otherwise.
+func (l *Label) GetColor() string {
+       if l == nil || l.Color == nil {
+               return ""
+       }
+       return *l.Color
+}
+
+// GetDefault returns the Default field if it's non-nil, zero value otherwise.
+func (l *Label) GetDefault() bool {
+       if l == nil || l.Default == nil {
+               return false
+       }
+       return *l.Default
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (l *Label) GetDescription() string {
+       if l == nil || l.Description == nil {
+               return ""
+       }
+       return *l.Description
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (l *Label) GetID() int64 {
+       if l == nil || l.ID == nil {
+               return 0
+       }
+       return *l.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (l *Label) GetName() string {
+       if l == nil || l.Name == nil {
+               return ""
+       }
+       return *l.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (l *Label) GetNodeID() string {
+       if l == nil || l.NodeID == nil {
+               return ""
+       }
+       return *l.NodeID
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (l *Label) GetURL() string {
+       if l == nil || l.URL == nil {
+               return ""
+       }
+       return *l.URL
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (l *LabelEvent) GetAction() string {
+       if l == nil || l.Action == nil {
+               return ""
+       }
+       return *l.Action
+}
+
+// GetChanges returns the Changes field.
+func (l *LabelEvent) GetChanges() *EditChange {
+       if l == nil {
+               return nil
+       }
+       return l.Changes
+}
+
+// GetInstallation returns the Installation field.
+func (l *LabelEvent) GetInstallation() *Installation {
+       if l == nil {
+               return nil
+       }
+       return l.Installation
+}
+
+// GetLabel returns the Label field.
+func (l *LabelEvent) GetLabel() *Label {
+       if l == nil {
+               return nil
+       }
+       return l.Label
+}
+
+// GetOrg returns the Org field.
+func (l *LabelEvent) GetOrg() *Organization {
+       if l == nil {
+               return nil
+       }
+       return l.Org
+}
+
+// GetRepo returns the Repo field.
+func (l *LabelEvent) GetRepo() *Repository {
+       if l == nil {
+               return nil
+       }
+       return l.Repo
+}
+
+// GetColor returns the Color field if it's non-nil, zero value otherwise.
+func (l *LabelResult) GetColor() string {
+       if l == nil || l.Color == nil {
+               return ""
+       }
+       return *l.Color
+}
+
+// GetDefault returns the Default field if it's non-nil, zero value otherwise.
+func (l *LabelResult) GetDefault() bool {
+       if l == nil || l.Default == nil {
+               return false
+       }
+       return *l.Default
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (l *LabelResult) GetDescription() string {
+       if l == nil || l.Description == nil {
+               return ""
+       }
+       return *l.Description
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (l *LabelResult) GetID() int64 {
+       if l == nil || l.ID == nil {
+               return 0
+       }
+       return *l.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (l *LabelResult) GetName() string {
+       if l == nil || l.Name == nil {
+               return ""
+       }
+       return *l.Name
+}
+
+// GetScore returns the Score field.
+func (l *LabelResult) GetScore() *float64 {
+       if l == nil {
+               return nil
+       }
+       return l.Score
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (l *LabelResult) GetURL() string {
+       if l == nil || l.URL == nil {
+               return ""
+       }
+       return *l.URL
+}
+
+// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
+func (l *LabelsSearchResult) GetIncompleteResults() bool {
+       if l == nil || l.IncompleteResults == nil {
+               return false
+       }
+       return *l.IncompleteResults
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (l *LabelsSearchResult) GetTotal() int {
+       if l == nil || l.Total == nil {
+               return 0
+       }
+       return *l.Total
+}
+
+// GetOID returns the OID field if it's non-nil, zero value otherwise.
+func (l *LargeFile) GetOID() string {
+       if l == nil || l.OID == nil {
+               return ""
+       }
+       return *l.OID
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (l *LargeFile) GetPath() string {
+       if l == nil || l.Path == nil {
+               return ""
+       }
+       return *l.Path
+}
+
+// GetRefName returns the RefName field if it's non-nil, zero value otherwise.
+func (l *LargeFile) GetRefName() string {
+       if l == nil || l.RefName == nil {
+               return ""
+       }
+       return *l.RefName
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (l *LargeFile) GetSize() int {
+       if l == nil || l.Size == nil {
+               return 0
+       }
+       return *l.Size
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (l *License) GetBody() string {
+       if l == nil || l.Body == nil {
+               return ""
+       }
+       return *l.Body
+}
+
+// GetConditions returns the Conditions field if it's non-nil, zero value otherwise.
+func (l *License) GetConditions() []string {
+       if l == nil || l.Conditions == nil {
+               return nil
+       }
+       return *l.Conditions
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (l *License) GetDescription() string {
+       if l == nil || l.Description == nil {
+               return ""
+       }
+       return *l.Description
+}
+
+// GetFeatured returns the Featured field if it's non-nil, zero value otherwise.
+func (l *License) GetFeatured() bool {
+       if l == nil || l.Featured == nil {
+               return false
+       }
+       return *l.Featured
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (l *License) GetHTMLURL() string {
+       if l == nil || l.HTMLURL == nil {
+               return ""
+       }
+       return *l.HTMLURL
+}
+
+// GetImplementation returns the Implementation field if it's non-nil, zero value otherwise.
+func (l *License) GetImplementation() string {
+       if l == nil || l.Implementation == nil {
+               return ""
+       }
+       return *l.Implementation
+}
+
+// GetKey returns the Key field if it's non-nil, zero value otherwise.
+func (l *License) GetKey() string {
+       if l == nil || l.Key == nil {
+               return ""
+       }
+       return *l.Key
+}
+
+// GetLimitations returns the Limitations field if it's non-nil, zero value otherwise.
+func (l *License) GetLimitations() []string {
+       if l == nil || l.Limitations == nil {
+               return nil
+       }
+       return *l.Limitations
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (l *License) GetName() string {
+       if l == nil || l.Name == nil {
+               return ""
+       }
+       return *l.Name
+}
+
+// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise.
+func (l *License) GetPermissions() []string {
+       if l == nil || l.Permissions == nil {
+               return nil
+       }
+       return *l.Permissions
+}
+
+// GetSPDXID returns the SPDXID field if it's non-nil, zero value otherwise.
+func (l *License) GetSPDXID() string {
+       if l == nil || l.SPDXID == nil {
+               return ""
+       }
+       return *l.SPDXID
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (l *License) GetURL() string {
+       if l == nil || l.URL == nil {
+               return ""
+       }
+       return *l.URL
+}
+
+// GetCheckName returns the CheckName field if it's non-nil, zero value otherwise.
+func (l *ListCheckRunsOptions) GetCheckName() string {
+       if l == nil || l.CheckName == nil {
+               return ""
+       }
+       return *l.CheckName
+}
+
+// GetFilter returns the Filter field if it's non-nil, zero value otherwise.
+func (l *ListCheckRunsOptions) GetFilter() string {
+       if l == nil || l.Filter == nil {
+               return ""
+       }
+       return *l.Filter
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (l *ListCheckRunsOptions) GetStatus() string {
+       if l == nil || l.Status == nil {
+               return ""
+       }
+       return *l.Status
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (l *ListCheckRunsResults) GetTotal() int {
+       if l == nil || l.Total == nil {
+               return 0
+       }
+       return *l.Total
+}
+
+// GetAppID returns the AppID field if it's non-nil, zero value otherwise.
+func (l *ListCheckSuiteOptions) GetAppID() int {
+       if l == nil || l.AppID == nil {
+               return 0
+       }
+       return *l.AppID
+}
+
+// GetCheckName returns the CheckName field if it's non-nil, zero value otherwise.
+func (l *ListCheckSuiteOptions) GetCheckName() string {
+       if l == nil || l.CheckName == nil {
+               return ""
+       }
+       return *l.CheckName
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (l *ListCheckSuiteResults) GetTotal() int {
+       if l == nil || l.Total == nil {
+               return 0
+       }
+       return *l.Total
+}
+
+// GetAffiliation returns the Affiliation field if it's non-nil, zero value otherwise.
+func (l *ListCollaboratorOptions) GetAffiliation() string {
+       if l == nil || l.Affiliation == nil {
+               return ""
+       }
+       return *l.Affiliation
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (l *ListRepositories) GetTotalCount() int {
+       if l == nil || l.TotalCount == nil {
+               return 0
+       }
+       return *l.TotalCount
+}
+
+// GetEffectiveDate returns the EffectiveDate field if it's non-nil, zero value otherwise.
+func (m *MarketplacePendingChange) GetEffectiveDate() Timestamp {
+       if m == nil || m.EffectiveDate == nil {
+               return Timestamp{}
+       }
+       return *m.EffectiveDate
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (m *MarketplacePendingChange) GetID() int64 {
+       if m == nil || m.ID == nil {
+               return 0
+       }
+       return *m.ID
+}
+
+// GetPlan returns the Plan field.
+func (m *MarketplacePendingChange) GetPlan() *MarketplacePlan {
+       if m == nil {
+               return nil
+       }
+       return m.Plan
+}
+
+// GetUnitCount returns the UnitCount field if it's non-nil, zero value otherwise.
+func (m *MarketplacePendingChange) GetUnitCount() int {
+       if m == nil || m.UnitCount == nil {
+               return 0
+       }
+       return *m.UnitCount
+}
+
+// GetAccountsURL returns the AccountsURL field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetAccountsURL() string {
+       if m == nil || m.AccountsURL == nil {
+               return ""
+       }
+       return *m.AccountsURL
+}
+
+// GetBullets returns the Bullets field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetBullets() []string {
+       if m == nil || m.Bullets == nil {
+               return nil
+       }
+       return *m.Bullets
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetDescription() string {
+       if m == nil || m.Description == nil {
+               return ""
+       }
+       return *m.Description
+}
+
+// GetHasFreeTrial returns the HasFreeTrial field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetHasFreeTrial() bool {
+       if m == nil || m.HasFreeTrial == nil {
+               return false
+       }
+       return *m.HasFreeTrial
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetID() int64 {
+       if m == nil || m.ID == nil {
+               return 0
+       }
+       return *m.ID
+}
+
+// GetMonthlyPriceInCents returns the MonthlyPriceInCents field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetMonthlyPriceInCents() int {
+       if m == nil || m.MonthlyPriceInCents == nil {
+               return 0
+       }
+       return *m.MonthlyPriceInCents
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetName() string {
+       if m == nil || m.Name == nil {
+               return ""
+       }
+       return *m.Name
+}
+
+// GetNumber returns the Number field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetNumber() int {
+       if m == nil || m.Number == nil {
+               return 0
+       }
+       return *m.Number
+}
+
+// GetPriceModel returns the PriceModel field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetPriceModel() string {
+       if m == nil || m.PriceModel == nil {
+               return ""
+       }
+       return *m.PriceModel
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetState() string {
+       if m == nil || m.State == nil {
+               return ""
+       }
+       return *m.State
+}
+
+// GetUnitName returns the UnitName field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetUnitName() string {
+       if m == nil || m.UnitName == nil {
+               return ""
+       }
+       return *m.UnitName
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetURL() string {
+       if m == nil || m.URL == nil {
+               return ""
+       }
+       return *m.URL
+}
+
+// GetYearlyPriceInCents returns the YearlyPriceInCents field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlan) GetYearlyPriceInCents() int {
+       if m == nil || m.YearlyPriceInCents == nil {
+               return 0
+       }
+       return *m.YearlyPriceInCents
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlanAccount) GetID() int64 {
+       if m == nil || m.ID == nil {
+               return 0
+       }
+       return *m.ID
+}
+
+// GetLogin returns the Login field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlanAccount) GetLogin() string {
+       if m == nil || m.Login == nil {
+               return ""
+       }
+       return *m.Login
+}
+
+// GetMarketplacePendingChange returns the MarketplacePendingChange field.
+func (m *MarketplacePlanAccount) GetMarketplacePendingChange() *MarketplacePendingChange {
+       if m == nil {
+               return nil
+       }
+       return m.MarketplacePendingChange
+}
+
+// GetMarketplacePurchase returns the MarketplacePurchase field.
+func (m *MarketplacePlanAccount) GetMarketplacePurchase() *MarketplacePurchase {
+       if m == nil {
+               return nil
+       }
+       return m.MarketplacePurchase
+}
+
+// GetOrganizationBillingEmail returns the OrganizationBillingEmail field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlanAccount) GetOrganizationBillingEmail() string {
+       if m == nil || m.OrganizationBillingEmail == nil {
+               return ""
+       }
+       return *m.OrganizationBillingEmail
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlanAccount) GetType() string {
+       if m == nil || m.Type == nil {
+               return ""
+       }
+       return *m.Type
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlanAccount) GetURL() string {
+       if m == nil || m.URL == nil {
+               return ""
+       }
+       return *m.URL
+}
+
+// GetBillingCycle returns the BillingCycle field if it's non-nil, zero value otherwise.
+func (m *MarketplacePurchase) GetBillingCycle() string {
+       if m == nil || m.BillingCycle == nil {
+               return ""
+       }
+       return *m.BillingCycle
+}
+
+// GetFreeTrialEndsOn returns the FreeTrialEndsOn field if it's non-nil, zero value otherwise.
+func (m *MarketplacePurchase) GetFreeTrialEndsOn() Timestamp {
+       if m == nil || m.FreeTrialEndsOn == nil {
+               return Timestamp{}
+       }
+       return *m.FreeTrialEndsOn
+}
+
+// GetNextBillingDate returns the NextBillingDate field if it's non-nil, zero value otherwise.
+func (m *MarketplacePurchase) GetNextBillingDate() Timestamp {
+       if m == nil || m.NextBillingDate == nil {
+               return Timestamp{}
+       }
+       return *m.NextBillingDate
+}
+
+// GetOnFreeTrial returns the OnFreeTrial field if it's non-nil, zero value otherwise.
+func (m *MarketplacePurchase) GetOnFreeTrial() bool {
+       if m == nil || m.OnFreeTrial == nil {
+               return false
+       }
+       return *m.OnFreeTrial
+}
+
+// GetPlan returns the Plan field.
+func (m *MarketplacePurchase) GetPlan() *MarketplacePlan {
+       if m == nil {
+               return nil
+       }
+       return m.Plan
+}
+
+// GetUnitCount returns the UnitCount field if it's non-nil, zero value otherwise.
+func (m *MarketplacePurchase) GetUnitCount() int {
+       if m == nil || m.UnitCount == nil {
+               return 0
+       }
+       return *m.UnitCount
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (m *MarketplacePurchase) GetUpdatedAt() Timestamp {
+       if m == nil || m.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *m.UpdatedAt
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (m *MarketplacePurchaseEvent) GetAction() string {
+       if m == nil || m.Action == nil {
+               return ""
+       }
+       return *m.Action
+}
+
+// GetEffectiveDate returns the EffectiveDate field if it's non-nil, zero value otherwise.
+func (m *MarketplacePurchaseEvent) GetEffectiveDate() Timestamp {
+       if m == nil || m.EffectiveDate == nil {
+               return Timestamp{}
+       }
+       return *m.EffectiveDate
+}
+
+// GetInstallation returns the Installation field.
+func (m *MarketplacePurchaseEvent) GetInstallation() *Installation {
+       if m == nil {
+               return nil
+       }
+       return m.Installation
+}
+
+// GetMarketplacePurchase returns the MarketplacePurchase field.
+func (m *MarketplacePurchaseEvent) GetMarketplacePurchase() *MarketplacePurchase {
+       if m == nil {
+               return nil
+       }
+       return m.MarketplacePurchase
+}
+
+// GetPreviousMarketplacePurchase returns the PreviousMarketplacePurchase field.
+func (m *MarketplacePurchaseEvent) GetPreviousMarketplacePurchase() *MarketplacePurchase {
+       if m == nil {
+               return nil
+       }
+       return m.PreviousMarketplacePurchase
+}
+
+// GetSender returns the Sender field.
+func (m *MarketplacePurchaseEvent) GetSender() *User {
+       if m == nil {
+               return nil
+       }
+       return m.Sender
+}
+
+// GetText returns the Text field if it's non-nil, zero value otherwise.
+func (m *Match) GetText() string {
+       if m == nil || m.Text == nil {
+               return ""
+       }
+       return *m.Text
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (m *MemberEvent) GetAction() string {
+       if m == nil || m.Action == nil {
+               return ""
+       }
+       return *m.Action
+}
+
+// GetInstallation returns the Installation field.
+func (m *MemberEvent) GetInstallation() *Installation {
+       if m == nil {
+               return nil
+       }
+       return m.Installation
+}
+
+// GetMember returns the Member field.
+func (m *MemberEvent) GetMember() *User {
+       if m == nil {
+               return nil
+       }
+       return m.Member
+}
+
+// GetRepo returns the Repo field.
+func (m *MemberEvent) GetRepo() *Repository {
+       if m == nil {
+               return nil
+       }
+       return m.Repo
+}
+
+// GetSender returns the Sender field.
+func (m *MemberEvent) GetSender() *User {
+       if m == nil {
+               return nil
+       }
+       return m.Sender
+}
+
+// GetOrganization returns the Organization field.
+func (m *Membership) GetOrganization() *Organization {
+       if m == nil {
+               return nil
+       }
+       return m.Organization
+}
+
+// GetOrganizationURL returns the OrganizationURL field if it's non-nil, zero value otherwise.
+func (m *Membership) GetOrganizationURL() string {
+       if m == nil || m.OrganizationURL == nil {
+               return ""
+       }
+       return *m.OrganizationURL
+}
+
+// GetRole returns the Role field if it's non-nil, zero value otherwise.
+func (m *Membership) GetRole() string {
+       if m == nil || m.Role == nil {
+               return ""
+       }
+       return *m.Role
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (m *Membership) GetState() string {
+       if m == nil || m.State == nil {
+               return ""
+       }
+       return *m.State
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (m *Membership) GetURL() string {
+       if m == nil || m.URL == nil {
+               return ""
+       }
+       return *m.URL
+}
+
+// GetUser returns the User field.
+func (m *Membership) GetUser() *User {
+       if m == nil {
+               return nil
+       }
+       return m.User
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (m *MembershipEvent) GetAction() string {
+       if m == nil || m.Action == nil {
+               return ""
+       }
+       return *m.Action
+}
+
+// GetInstallation returns the Installation field.
+func (m *MembershipEvent) GetInstallation() *Installation {
+       if m == nil {
+               return nil
+       }
+       return m.Installation
+}
+
+// GetMember returns the Member field.
+func (m *MembershipEvent) GetMember() *User {
+       if m == nil {
+               return nil
+       }
+       return m.Member
+}
+
+// GetOrg returns the Org field.
+func (m *MembershipEvent) GetOrg() *Organization {
+       if m == nil {
+               return nil
+       }
+       return m.Org
+}
+
+// GetScope returns the Scope field if it's non-nil, zero value otherwise.
+func (m *MembershipEvent) GetScope() string {
+       if m == nil || m.Scope == nil {
+               return ""
+       }
+       return *m.Scope
+}
+
+// GetSender returns the Sender field.
+func (m *MembershipEvent) GetSender() *User {
+       if m == nil {
+               return nil
+       }
+       return m.Sender
+}
+
+// GetTeam returns the Team field.
+func (m *MembershipEvent) GetTeam() *Team {
+       if m == nil {
+               return nil
+       }
+       return m.Team
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (m *MetaEvent) GetAction() string {
+       if m == nil || m.Action == nil {
+               return ""
+       }
+       return *m.Action
+}
+
+// GetHook returns the Hook field.
+func (m *MetaEvent) GetHook() *Hook {
+       if m == nil {
+               return nil
+       }
+       return m.Hook
+}
+
+// GetHookID returns the HookID field if it's non-nil, zero value otherwise.
+func (m *MetaEvent) GetHookID() int64 {
+       if m == nil || m.HookID == nil {
+               return 0
+       }
+       return *m.HookID
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (m *Metric) GetHTMLURL() string {
+       if m == nil || m.HTMLURL == nil {
+               return ""
+       }
+       return *m.HTMLURL
+}
+
+// GetKey returns the Key field if it's non-nil, zero value otherwise.
+func (m *Metric) GetKey() string {
+       if m == nil || m.Key == nil {
+               return ""
+       }
+       return *m.Key
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (m *Metric) GetName() string {
+       if m == nil || m.Name == nil {
+               return ""
+       }
+       return *m.Name
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (m *Metric) GetURL() string {
+       if m == nil || m.URL == nil {
+               return ""
+       }
+       return *m.URL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (m *Migration) GetCreatedAt() string {
+       if m == nil || m.CreatedAt == nil {
+               return ""
+       }
+       return *m.CreatedAt
+}
+
+// GetExcludeAttachments returns the ExcludeAttachments field if it's non-nil, zero value otherwise.
+func (m *Migration) GetExcludeAttachments() bool {
+       if m == nil || m.ExcludeAttachments == nil {
+               return false
+       }
+       return *m.ExcludeAttachments
+}
+
+// GetGUID returns the GUID field if it's non-nil, zero value otherwise.
+func (m *Migration) GetGUID() string {
+       if m == nil || m.GUID == nil {
+               return ""
+       }
+       return *m.GUID
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (m *Migration) GetID() int64 {
+       if m == nil || m.ID == nil {
+               return 0
+       }
+       return *m.ID
+}
+
+// GetLockRepositories returns the LockRepositories field if it's non-nil, zero value otherwise.
+func (m *Migration) GetLockRepositories() bool {
+       if m == nil || m.LockRepositories == nil {
+               return false
+       }
+       return *m.LockRepositories
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (m *Migration) GetState() string {
+       if m == nil || m.State == nil {
+               return ""
+       }
+       return *m.State
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (m *Migration) GetUpdatedAt() string {
+       if m == nil || m.UpdatedAt == nil {
+               return ""
+       }
+       return *m.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (m *Migration) GetURL() string {
+       if m == nil || m.URL == nil {
+               return ""
+       }
+       return *m.URL
+}
+
+// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetClosedAt() time.Time {
+       if m == nil || m.ClosedAt == nil {
+               return time.Time{}
+       }
+       return *m.ClosedAt
+}
+
+// GetClosedIssues returns the ClosedIssues field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetClosedIssues() int {
+       if m == nil || m.ClosedIssues == nil {
+               return 0
+       }
+       return *m.ClosedIssues
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetCreatedAt() time.Time {
+       if m == nil || m.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *m.CreatedAt
+}
+
+// GetCreator returns the Creator field.
+func (m *Milestone) GetCreator() *User {
+       if m == nil {
+               return nil
+       }
+       return m.Creator
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetDescription() string {
+       if m == nil || m.Description == nil {
+               return ""
+       }
+       return *m.Description
+}
+
+// GetDueOn returns the DueOn field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetDueOn() time.Time {
+       if m == nil || m.DueOn == nil {
+               return time.Time{}
+       }
+       return *m.DueOn
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetHTMLURL() string {
+       if m == nil || m.HTMLURL == nil {
+               return ""
+       }
+       return *m.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetID() int64 {
+       if m == nil || m.ID == nil {
+               return 0
+       }
+       return *m.ID
+}
+
+// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetLabelsURL() string {
+       if m == nil || m.LabelsURL == nil {
+               return ""
+       }
+       return *m.LabelsURL
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetNodeID() string {
+       if m == nil || m.NodeID == nil {
+               return ""
+       }
+       return *m.NodeID
+}
+
+// GetNumber returns the Number field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetNumber() int {
+       if m == nil || m.Number == nil {
+               return 0
+       }
+       return *m.Number
+}
+
+// GetOpenIssues returns the OpenIssues field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetOpenIssues() int {
+       if m == nil || m.OpenIssues == nil {
+               return 0
+       }
+       return *m.OpenIssues
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetState() string {
+       if m == nil || m.State == nil {
+               return ""
+       }
+       return *m.State
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetTitle() string {
+       if m == nil || m.Title == nil {
+               return ""
+       }
+       return *m.Title
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetUpdatedAt() time.Time {
+       if m == nil || m.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *m.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (m *Milestone) GetURL() string {
+       if m == nil || m.URL == nil {
+               return ""
+       }
+       return *m.URL
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (m *MilestoneEvent) GetAction() string {
+       if m == nil || m.Action == nil {
+               return ""
+       }
+       return *m.Action
+}
+
+// GetChanges returns the Changes field.
+func (m *MilestoneEvent) GetChanges() *EditChange {
+       if m == nil {
+               return nil
+       }
+       return m.Changes
+}
+
+// GetInstallation returns the Installation field.
+func (m *MilestoneEvent) GetInstallation() *Installation {
+       if m == nil {
+               return nil
+       }
+       return m.Installation
+}
+
+// GetMilestone returns the Milestone field.
+func (m *MilestoneEvent) GetMilestone() *Milestone {
+       if m == nil {
+               return nil
+       }
+       return m.Milestone
+}
+
+// GetOrg returns the Org field.
+func (m *MilestoneEvent) GetOrg() *Organization {
+       if m == nil {
+               return nil
+       }
+       return m.Org
+}
+
+// GetRepo returns the Repo field.
+func (m *MilestoneEvent) GetRepo() *Repository {
+       if m == nil {
+               return nil
+       }
+       return m.Repo
+}
+
+// GetSender returns the Sender field.
+func (m *MilestoneEvent) GetSender() *User {
+       if m == nil {
+               return nil
+       }
+       return m.Sender
+}
+
+// GetClosedMilestones returns the ClosedMilestones field if it's non-nil, zero value otherwise.
+func (m *MilestoneStats) GetClosedMilestones() int {
+       if m == nil || m.ClosedMilestones == nil {
+               return 0
+       }
+       return *m.ClosedMilestones
+}
+
+// GetOpenMilestones returns the OpenMilestones field if it's non-nil, zero value otherwise.
+func (m *MilestoneStats) GetOpenMilestones() int {
+       if m == nil || m.OpenMilestones == nil {
+               return 0
+       }
+       return *m.OpenMilestones
+}
+
+// GetTotalMilestones returns the TotalMilestones field if it's non-nil, zero value otherwise.
+func (m *MilestoneStats) GetTotalMilestones() int {
+       if m == nil || m.TotalMilestones == nil {
+               return 0
+       }
+       return *m.TotalMilestones
+}
+
+// GetBase returns the Base field if it's non-nil, zero value otherwise.
+func (n *NewPullRequest) GetBase() string {
+       if n == nil || n.Base == nil {
+               return ""
+       }
+       return *n.Base
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (n *NewPullRequest) GetBody() string {
+       if n == nil || n.Body == nil {
+               return ""
+       }
+       return *n.Body
+}
+
+// GetDraft returns the Draft field if it's non-nil, zero value otherwise.
+func (n *NewPullRequest) GetDraft() bool {
+       if n == nil || n.Draft == nil {
+               return false
+       }
+       return *n.Draft
+}
+
+// GetHead returns the Head field if it's non-nil, zero value otherwise.
+func (n *NewPullRequest) GetHead() string {
+       if n == nil || n.Head == nil {
+               return ""
+       }
+       return *n.Head
+}
+
+// GetIssue returns the Issue field if it's non-nil, zero value otherwise.
+func (n *NewPullRequest) GetIssue() int {
+       if n == nil || n.Issue == nil {
+               return 0
+       }
+       return *n.Issue
+}
+
+// GetMaintainerCanModify returns the MaintainerCanModify field if it's non-nil, zero value otherwise.
+func (n *NewPullRequest) GetMaintainerCanModify() bool {
+       if n == nil || n.MaintainerCanModify == nil {
+               return false
+       }
+       return *n.MaintainerCanModify
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (n *NewPullRequest) GetTitle() string {
+       if n == nil || n.Title == nil {
+               return ""
+       }
+       return *n.Title
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (n *NewTeam) GetDescription() string {
+       if n == nil || n.Description == nil {
+               return ""
+       }
+       return *n.Description
+}
+
+// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise.
+func (n *NewTeam) GetLDAPDN() string {
+       if n == nil || n.LDAPDN == nil {
+               return ""
+       }
+       return *n.LDAPDN
+}
+
+// GetParentTeamID returns the ParentTeamID field if it's non-nil, zero value otherwise.
+func (n *NewTeam) GetParentTeamID() int64 {
+       if n == nil || n.ParentTeamID == nil {
+               return 0
+       }
+       return *n.ParentTeamID
+}
+
+// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
+func (n *NewTeam) GetPermission() string {
+       if n == nil || n.Permission == nil {
+               return ""
+       }
+       return *n.Permission
+}
+
+// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise.
+func (n *NewTeam) GetPrivacy() string {
+       if n == nil || n.Privacy == nil {
+               return ""
+       }
+       return *n.Privacy
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (n *Notification) GetID() string {
+       if n == nil || n.ID == nil {
+               return ""
+       }
+       return *n.ID
+}
+
+// GetLastReadAt returns the LastReadAt field if it's non-nil, zero value otherwise.
+func (n *Notification) GetLastReadAt() time.Time {
+       if n == nil || n.LastReadAt == nil {
+               return time.Time{}
+       }
+       return *n.LastReadAt
+}
+
+// GetReason returns the Reason field if it's non-nil, zero value otherwise.
+func (n *Notification) GetReason() string {
+       if n == nil || n.Reason == nil {
+               return ""
+       }
+       return *n.Reason
+}
+
+// GetRepository returns the Repository field.
+func (n *Notification) GetRepository() *Repository {
+       if n == nil {
+               return nil
+       }
+       return n.Repository
+}
+
+// GetSubject returns the Subject field.
+func (n *Notification) GetSubject() *NotificationSubject {
+       if n == nil {
+               return nil
+       }
+       return n.Subject
+}
+
+// GetUnread returns the Unread field if it's non-nil, zero value otherwise.
+func (n *Notification) GetUnread() bool {
+       if n == nil || n.Unread == nil {
+               return false
+       }
+       return *n.Unread
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (n *Notification) GetUpdatedAt() time.Time {
+       if n == nil || n.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *n.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (n *Notification) GetURL() string {
+       if n == nil || n.URL == nil {
+               return ""
+       }
+       return *n.URL
+}
+
+// GetLatestCommentURL returns the LatestCommentURL field if it's non-nil, zero value otherwise.
+func (n *NotificationSubject) GetLatestCommentURL() string {
+       if n == nil || n.LatestCommentURL == nil {
+               return ""
+       }
+       return *n.LatestCommentURL
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (n *NotificationSubject) GetTitle() string {
+       if n == nil || n.Title == nil {
+               return ""
+       }
+       return *n.Title
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (n *NotificationSubject) GetType() string {
+       if n == nil || n.Type == nil {
+               return ""
+       }
+       return *n.Type
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (n *NotificationSubject) GetURL() string {
+       if n == nil || n.URL == nil {
+               return ""
+       }
+       return *n.URL
+}
+
+// GetClientID returns the ClientID field if it's non-nil, zero value otherwise.
+func (o *OAuthAPP) GetClientID() string {
+       if o == nil || o.ClientID == nil {
+               return ""
+       }
+       return *o.ClientID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (o *OAuthAPP) GetName() string {
+       if o == nil || o.Name == nil {
+               return ""
+       }
+       return *o.Name
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (o *OAuthAPP) GetURL() string {
+       if o == nil || o.URL == nil {
+               return ""
+       }
+       return *o.URL
+}
+
+// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
+func (o *Organization) GetAvatarURL() string {
+       if o == nil || o.AvatarURL == nil {
+               return ""
+       }
+       return *o.AvatarURL
+}
+
+// GetBillingEmail returns the BillingEmail field if it's non-nil, zero value otherwise.
+func (o *Organization) GetBillingEmail() string {
+       if o == nil || o.BillingEmail == nil {
+               return ""
+       }
+       return *o.BillingEmail
+}
+
+// GetBlog returns the Blog field if it's non-nil, zero value otherwise.
+func (o *Organization) GetBlog() string {
+       if o == nil || o.Blog == nil {
+               return ""
+       }
+       return *o.Blog
+}
+
+// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise.
+func (o *Organization) GetCollaborators() int {
+       if o == nil || o.Collaborators == nil {
+               return 0
+       }
+       return *o.Collaborators
+}
+
+// GetCompany returns the Company field if it's non-nil, zero value otherwise.
+func (o *Organization) GetCompany() string {
+       if o == nil || o.Company == nil {
+               return ""
+       }
+       return *o.Company
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (o *Organization) GetCreatedAt() time.Time {
+       if o == nil || o.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *o.CreatedAt
+}
+
+// GetDefaultRepoPermission returns the DefaultRepoPermission field if it's non-nil, zero value otherwise.
+func (o *Organization) GetDefaultRepoPermission() string {
+       if o == nil || o.DefaultRepoPermission == nil {
+               return ""
+       }
+       return *o.DefaultRepoPermission
+}
+
+// GetDefaultRepoSettings returns the DefaultRepoSettings field if it's non-nil, zero value otherwise.
+func (o *Organization) GetDefaultRepoSettings() string {
+       if o == nil || o.DefaultRepoSettings == nil {
+               return ""
+       }
+       return *o.DefaultRepoSettings
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (o *Organization) GetDescription() string {
+       if o == nil || o.Description == nil {
+               return ""
+       }
+       return *o.Description
+}
+
+// GetDiskUsage returns the DiskUsage field if it's non-nil, zero value otherwise.
+func (o *Organization) GetDiskUsage() int {
+       if o == nil || o.DiskUsage == nil {
+               return 0
+       }
+       return *o.DiskUsage
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (o *Organization) GetEmail() string {
+       if o == nil || o.Email == nil {
+               return ""
+       }
+       return *o.Email
+}
+
+// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
+func (o *Organization) GetEventsURL() string {
+       if o == nil || o.EventsURL == nil {
+               return ""
+       }
+       return *o.EventsURL
+}
+
+// GetFollowers returns the Followers field if it's non-nil, zero value otherwise.
+func (o *Organization) GetFollowers() int {
+       if o == nil || o.Followers == nil {
+               return 0
+       }
+       return *o.Followers
+}
+
+// GetFollowing returns the Following field if it's non-nil, zero value otherwise.
+func (o *Organization) GetFollowing() int {
+       if o == nil || o.Following == nil {
+               return 0
+       }
+       return *o.Following
+}
+
+// GetHasOrganizationProjects returns the HasOrganizationProjects field if it's non-nil, zero value otherwise.
+func (o *Organization) GetHasOrganizationProjects() bool {
+       if o == nil || o.HasOrganizationProjects == nil {
+               return false
+       }
+       return *o.HasOrganizationProjects
+}
+
+// GetHasRepositoryProjects returns the HasRepositoryProjects field if it's non-nil, zero value otherwise.
+func (o *Organization) GetHasRepositoryProjects() bool {
+       if o == nil || o.HasRepositoryProjects == nil {
+               return false
+       }
+       return *o.HasRepositoryProjects
+}
+
+// GetHooksURL returns the HooksURL field if it's non-nil, zero value otherwise.
+func (o *Organization) GetHooksURL() string {
+       if o == nil || o.HooksURL == nil {
+               return ""
+       }
+       return *o.HooksURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (o *Organization) GetHTMLURL() string {
+       if o == nil || o.HTMLURL == nil {
+               return ""
+       }
+       return *o.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (o *Organization) GetID() int64 {
+       if o == nil || o.ID == nil {
+               return 0
+       }
+       return *o.ID
+}
+
+// GetIssuesURL returns the IssuesURL field if it's non-nil, zero value otherwise.
+func (o *Organization) GetIssuesURL() string {
+       if o == nil || o.IssuesURL == nil {
+               return ""
+       }
+       return *o.IssuesURL
+}
+
+// GetIsVerified returns the IsVerified field if it's non-nil, zero value otherwise.
+func (o *Organization) GetIsVerified() bool {
+       if o == nil || o.IsVerified == nil {
+               return false
+       }
+       return *o.IsVerified
+}
+
+// GetLocation returns the Location field if it's non-nil, zero value otherwise.
+func (o *Organization) GetLocation() string {
+       if o == nil || o.Location == nil {
+               return ""
+       }
+       return *o.Location
+}
+
+// GetLogin returns the Login field if it's non-nil, zero value otherwise.
+func (o *Organization) GetLogin() string {
+       if o == nil || o.Login == nil {
+               return ""
+       }
+       return *o.Login
+}
+
+// GetMembersAllowedRepositoryCreationType returns the MembersAllowedRepositoryCreationType field if it's non-nil, zero value otherwise.
+func (o *Organization) GetMembersAllowedRepositoryCreationType() string {
+       if o == nil || o.MembersAllowedRepositoryCreationType == nil {
+               return ""
+       }
+       return *o.MembersAllowedRepositoryCreationType
+}
+
+// GetMembersCanCreateInternalRepos returns the MembersCanCreateInternalRepos field if it's non-nil, zero value otherwise.
+func (o *Organization) GetMembersCanCreateInternalRepos() bool {
+       if o == nil || o.MembersCanCreateInternalRepos == nil {
+               return false
+       }
+       return *o.MembersCanCreateInternalRepos
+}
+
+// GetMembersCanCreatePages returns the MembersCanCreatePages field if it's non-nil, zero value otherwise.
+func (o *Organization) GetMembersCanCreatePages() bool {
+       if o == nil || o.MembersCanCreatePages == nil {
+               return false
+       }
+       return *o.MembersCanCreatePages
+}
+
+// GetMembersCanCreatePrivatePages returns the MembersCanCreatePrivatePages field if it's non-nil, zero value otherwise.
+func (o *Organization) GetMembersCanCreatePrivatePages() bool {
+       if o == nil || o.MembersCanCreatePrivatePages == nil {
+               return false
+       }
+       return *o.MembersCanCreatePrivatePages
+}
+
+// GetMembersCanCreatePrivateRepos returns the MembersCanCreatePrivateRepos field if it's non-nil, zero value otherwise.
+func (o *Organization) GetMembersCanCreatePrivateRepos() bool {
+       if o == nil || o.MembersCanCreatePrivateRepos == nil {
+               return false
+       }
+       return *o.MembersCanCreatePrivateRepos
+}
+
+// GetMembersCanCreatePublicPages returns the MembersCanCreatePublicPages field if it's non-nil, zero value otherwise.
+func (o *Organization) GetMembersCanCreatePublicPages() bool {
+       if o == nil || o.MembersCanCreatePublicPages == nil {
+               return false
+       }
+       return *o.MembersCanCreatePublicPages
+}
+
+// GetMembersCanCreatePublicRepos returns the MembersCanCreatePublicRepos field if it's non-nil, zero value otherwise.
+func (o *Organization) GetMembersCanCreatePublicRepos() bool {
+       if o == nil || o.MembersCanCreatePublicRepos == nil {
+               return false
+       }
+       return *o.MembersCanCreatePublicRepos
+}
+
+// GetMembersCanCreateRepos returns the MembersCanCreateRepos field if it's non-nil, zero value otherwise.
+func (o *Organization) GetMembersCanCreateRepos() bool {
+       if o == nil || o.MembersCanCreateRepos == nil {
+               return false
+       }
+       return *o.MembersCanCreateRepos
+}
+
+// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise.
+func (o *Organization) GetMembersURL() string {
+       if o == nil || o.MembersURL == nil {
+               return ""
+       }
+       return *o.MembersURL
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (o *Organization) GetName() string {
+       if o == nil || o.Name == nil {
+               return ""
+       }
+       return *o.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (o *Organization) GetNodeID() string {
+       if o == nil || o.NodeID == nil {
+               return ""
+       }
+       return *o.NodeID
+}
+
+// GetOwnedPrivateRepos returns the OwnedPrivateRepos field if it's non-nil, zero value otherwise.
+func (o *Organization) GetOwnedPrivateRepos() int {
+       if o == nil || o.OwnedPrivateRepos == nil {
+               return 0
+       }
+       return *o.OwnedPrivateRepos
+}
+
+// GetPlan returns the Plan field.
+func (o *Organization) GetPlan() *Plan {
+       if o == nil {
+               return nil
+       }
+       return o.Plan
+}
+
+// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise.
+func (o *Organization) GetPrivateGists() int {
+       if o == nil || o.PrivateGists == nil {
+               return 0
+       }
+       return *o.PrivateGists
+}
+
+// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise.
+func (o *Organization) GetPublicGists() int {
+       if o == nil || o.PublicGists == nil {
+               return 0
+       }
+       return *o.PublicGists
+}
+
+// GetPublicMembersURL returns the PublicMembersURL field if it's non-nil, zero value otherwise.
+func (o *Organization) GetPublicMembersURL() string {
+       if o == nil || o.PublicMembersURL == nil {
+               return ""
+       }
+       return *o.PublicMembersURL
+}
+
+// GetPublicRepos returns the PublicRepos field if it's non-nil, zero value otherwise.
+func (o *Organization) GetPublicRepos() int {
+       if o == nil || o.PublicRepos == nil {
+               return 0
+       }
+       return *o.PublicRepos
+}
+
+// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise.
+func (o *Organization) GetReposURL() string {
+       if o == nil || o.ReposURL == nil {
+               return ""
+       }
+       return *o.ReposURL
+}
+
+// GetTotalPrivateRepos returns the TotalPrivateRepos field if it's non-nil, zero value otherwise.
+func (o *Organization) GetTotalPrivateRepos() int {
+       if o == nil || o.TotalPrivateRepos == nil {
+               return 0
+       }
+       return *o.TotalPrivateRepos
+}
+
+// GetTwitterUsername returns the TwitterUsername field if it's non-nil, zero value otherwise.
+func (o *Organization) GetTwitterUsername() string {
+       if o == nil || o.TwitterUsername == nil {
+               return ""
+       }
+       return *o.TwitterUsername
+}
+
+// GetTwoFactorRequirementEnabled returns the TwoFactorRequirementEnabled field if it's non-nil, zero value otherwise.
+func (o *Organization) GetTwoFactorRequirementEnabled() bool {
+       if o == nil || o.TwoFactorRequirementEnabled == nil {
+               return false
+       }
+       return *o.TwoFactorRequirementEnabled
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (o *Organization) GetType() string {
+       if o == nil || o.Type == nil {
+               return ""
+       }
+       return *o.Type
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (o *Organization) GetUpdatedAt() time.Time {
+       if o == nil || o.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *o.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (o *Organization) GetURL() string {
+       if o == nil || o.URL == nil {
+               return ""
+       }
+       return *o.URL
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (o *OrganizationEvent) GetAction() string {
+       if o == nil || o.Action == nil {
+               return ""
+       }
+       return *o.Action
+}
+
+// GetInstallation returns the Installation field.
+func (o *OrganizationEvent) GetInstallation() *Installation {
+       if o == nil {
+               return nil
+       }
+       return o.Installation
+}
+
+// GetInvitation returns the Invitation field.
+func (o *OrganizationEvent) GetInvitation() *Invitation {
+       if o == nil {
+               return nil
+       }
+       return o.Invitation
+}
+
+// GetMembership returns the Membership field.
+func (o *OrganizationEvent) GetMembership() *Membership {
+       if o == nil {
+               return nil
+       }
+       return o.Membership
+}
+
+// GetOrganization returns the Organization field.
+func (o *OrganizationEvent) GetOrganization() *Organization {
+       if o == nil {
+               return nil
+       }
+       return o.Organization
+}
+
+// GetSender returns the Sender field.
+func (o *OrganizationEvent) GetSender() *User {
+       if o == nil {
+               return nil
+       }
+       return o.Sender
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (o *OrganizationInstallations) GetTotalCount() int {
+       if o == nil || o.TotalCount == nil {
+               return 0
+       }
+       return *o.TotalCount
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (o *OrgBlockEvent) GetAction() string {
+       if o == nil || o.Action == nil {
+               return ""
+       }
+       return *o.Action
+}
+
+// GetBlockedUser returns the BlockedUser field.
+func (o *OrgBlockEvent) GetBlockedUser() *User {
+       if o == nil {
+               return nil
+       }
+       return o.BlockedUser
+}
+
+// GetInstallation returns the Installation field.
+func (o *OrgBlockEvent) GetInstallation() *Installation {
+       if o == nil {
+               return nil
+       }
+       return o.Installation
+}
+
+// GetOrganization returns the Organization field.
+func (o *OrgBlockEvent) GetOrganization() *Organization {
+       if o == nil {
+               return nil
+       }
+       return o.Organization
+}
+
+// GetSender returns the Sender field.
+func (o *OrgBlockEvent) GetSender() *User {
+       if o == nil {
+               return nil
+       }
+       return o.Sender
+}
+
+// GetDisabledOrgs returns the DisabledOrgs field if it's non-nil, zero value otherwise.
+func (o *OrgStats) GetDisabledOrgs() int {
+       if o == nil || o.DisabledOrgs == nil {
+               return 0
+       }
+       return *o.DisabledOrgs
+}
+
+// GetTotalOrgs returns the TotalOrgs field if it's non-nil, zero value otherwise.
+func (o *OrgStats) GetTotalOrgs() int {
+       if o == nil || o.TotalOrgs == nil {
+               return 0
+       }
+       return *o.TotalOrgs
+}
+
+// GetTotalTeamMembers returns the TotalTeamMembers field if it's non-nil, zero value otherwise.
+func (o *OrgStats) GetTotalTeamMembers() int {
+       if o == nil || o.TotalTeamMembers == nil {
+               return 0
+       }
+       return *o.TotalTeamMembers
+}
+
+// GetTotalTeams returns the TotalTeams field if it's non-nil, zero value otherwise.
+func (o *OrgStats) GetTotalTeams() int {
+       if o == nil || o.TotalTeams == nil {
+               return 0
+       }
+       return *o.TotalTeams
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *Package) GetCreatedAt() Timestamp {
+       if p == nil || p.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.CreatedAt
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *Package) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *Package) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *Package) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetOwner returns the Owner field.
+func (p *Package) GetOwner() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Owner
+}
+
+// GetPackageType returns the PackageType field if it's non-nil, zero value otherwise.
+func (p *Package) GetPackageType() string {
+       if p == nil || p.PackageType == nil {
+               return ""
+       }
+       return *p.PackageType
+}
+
+// GetPackageVersion returns the PackageVersion field.
+func (p *Package) GetPackageVersion() *PackageVersion {
+       if p == nil {
+               return nil
+       }
+       return p.PackageVersion
+}
+
+// GetRegistry returns the Registry field.
+func (p *Package) GetRegistry() *PackageRegistry {
+       if p == nil {
+               return nil
+       }
+       return p.Registry
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (p *Package) GetUpdatedAt() Timestamp {
+       if p == nil || p.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.UpdatedAt
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (p *PackageEvent) GetAction() string {
+       if p == nil || p.Action == nil {
+               return ""
+       }
+       return *p.Action
+}
+
+// GetOrg returns the Org field.
+func (p *PackageEvent) GetOrg() *Organization {
+       if p == nil {
+               return nil
+       }
+       return p.Org
+}
+
+// GetPackage returns the Package field.
+func (p *PackageEvent) GetPackage() *Package {
+       if p == nil {
+               return nil
+       }
+       return p.Package
+}
+
+// GetRepo returns the Repo field.
+func (p *PackageEvent) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetSender returns the Sender field.
+func (p *PackageEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetAuthor returns the Author field.
+func (p *PackageFile) GetAuthor() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Author
+}
+
+// GetContentType returns the ContentType field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetContentType() string {
+       if p == nil || p.ContentType == nil {
+               return ""
+       }
+       return *p.ContentType
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetCreatedAt() Timestamp {
+       if p == nil || p.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.CreatedAt
+}
+
+// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetDownloadURL() string {
+       if p == nil || p.DownloadURL == nil {
+               return ""
+       }
+       return *p.DownloadURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetMD5 returns the MD5 field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetMD5() string {
+       if p == nil || p.MD5 == nil {
+               return ""
+       }
+       return *p.MD5
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetSHA1 returns the SHA1 field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetSHA1() string {
+       if p == nil || p.SHA1 == nil {
+               return ""
+       }
+       return *p.SHA1
+}
+
+// GetSHA256 returns the SHA256 field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetSHA256() string {
+       if p == nil || p.SHA256 == nil {
+               return ""
+       }
+       return *p.SHA256
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetSize() int64 {
+       if p == nil || p.Size == nil {
+               return 0
+       }
+       return *p.Size
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetState() string {
+       if p == nil || p.State == nil {
+               return ""
+       }
+       return *p.State
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (p *PackageFile) GetUpdatedAt() Timestamp {
+       if p == nil || p.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.UpdatedAt
+}
+
+// GetAboutURL returns the AboutURL field if it's non-nil, zero value otherwise.
+func (p *PackageRegistry) GetAboutURL() string {
+       if p == nil || p.AboutURL == nil {
+               return ""
+       }
+       return *p.AboutURL
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PackageRegistry) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (p *PackageRegistry) GetType() string {
+       if p == nil || p.Type == nil {
+               return ""
+       }
+       return *p.Type
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *PackageRegistry) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetVendor returns the Vendor field if it's non-nil, zero value otherwise.
+func (p *PackageRegistry) GetVendor() string {
+       if p == nil || p.Vendor == nil {
+               return ""
+       }
+       return *p.Vendor
+}
+
+// GetAuthor returns the Author field.
+func (p *PackageRelease) GetAuthor() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Author
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *PackageRelease) GetCreatedAt() Timestamp {
+       if p == nil || p.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.CreatedAt
+}
+
+// GetDraft returns the Draft field if it's non-nil, zero value otherwise.
+func (p *PackageRelease) GetDraft() bool {
+       if p == nil || p.Draft == nil {
+               return false
+       }
+       return *p.Draft
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *PackageRelease) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PackageRelease) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PackageRelease) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise.
+func (p *PackageRelease) GetPrerelease() bool {
+       if p == nil || p.Prerelease == nil {
+               return false
+       }
+       return *p.Prerelease
+}
+
+// GetPublishedAt returns the PublishedAt field if it's non-nil, zero value otherwise.
+func (p *PackageRelease) GetPublishedAt() Timestamp {
+       if p == nil || p.PublishedAt == nil {
+               return Timestamp{}
+       }
+       return *p.PublishedAt
+}
+
+// GetTagName returns the TagName field if it's non-nil, zero value otherwise.
+func (p *PackageRelease) GetTagName() string {
+       if p == nil || p.TagName == nil {
+               return ""
+       }
+       return *p.TagName
+}
+
+// GetTargetCommitish returns the TargetCommitish field if it's non-nil, zero value otherwise.
+func (p *PackageRelease) GetTargetCommitish() string {
+       if p == nil || p.TargetCommitish == nil {
+               return ""
+       }
+       return *p.TargetCommitish
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *PackageRelease) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetAuthor returns the Author field.
+func (p *PackageVersion) GetAuthor() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Author
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetBody() string {
+       if p == nil || p.Body == nil {
+               return ""
+       }
+       return *p.Body
+}
+
+// GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetBodyHTML() string {
+       if p == nil || p.BodyHTML == nil {
+               return ""
+       }
+       return *p.BodyHTML
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetCreatedAt() Timestamp {
+       if p == nil || p.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.CreatedAt
+}
+
+// GetDraft returns the Draft field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetDraft() bool {
+       if p == nil || p.Draft == nil {
+               return false
+       }
+       return *p.Draft
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetInstallationCommand returns the InstallationCommand field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetInstallationCommand() string {
+       if p == nil || p.InstallationCommand == nil {
+               return ""
+       }
+       return *p.InstallationCommand
+}
+
+// GetManifest returns the Manifest field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetManifest() string {
+       if p == nil || p.Manifest == nil {
+               return ""
+       }
+       return *p.Manifest
+}
+
+// GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetPrerelease() bool {
+       if p == nil || p.Prerelease == nil {
+               return false
+       }
+       return *p.Prerelease
+}
+
+// GetRelease returns the Release field.
+func (p *PackageVersion) GetRelease() *PackageRelease {
+       if p == nil {
+               return nil
+       }
+       return p.Release
+}
+
+// GetSummary returns the Summary field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetSummary() string {
+       if p == nil || p.Summary == nil {
+               return ""
+       }
+       return *p.Summary
+}
+
+// GetTagName returns the TagName field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetTagName() string {
+       if p == nil || p.TagName == nil {
+               return ""
+       }
+       return *p.TagName
+}
+
+// GetTargetCommitish returns the TargetCommitish field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetTargetCommitish() string {
+       if p == nil || p.TargetCommitish == nil {
+               return ""
+       }
+       return *p.TargetCommitish
+}
+
+// GetTargetOID returns the TargetOID field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetTargetOID() string {
+       if p == nil || p.TargetOID == nil {
+               return ""
+       }
+       return *p.TargetOID
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetUpdatedAt() Timestamp {
+       if p == nil || p.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.UpdatedAt
+}
+
+// GetVersion returns the Version field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetVersion() string {
+       if p == nil || p.Version == nil {
+               return ""
+       }
+       return *p.Version
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (p *Page) GetAction() string {
+       if p == nil || p.Action == nil {
+               return ""
+       }
+       return *p.Action
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *Page) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetPageName returns the PageName field if it's non-nil, zero value otherwise.
+func (p *Page) GetPageName() string {
+       if p == nil || p.PageName == nil {
+               return ""
+       }
+       return *p.PageName
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (p *Page) GetSHA() string {
+       if p == nil || p.SHA == nil {
+               return ""
+       }
+       return *p.SHA
+}
+
+// GetSummary returns the Summary field if it's non-nil, zero value otherwise.
+func (p *Page) GetSummary() string {
+       if p == nil || p.Summary == nil {
+               return ""
+       }
+       return *p.Summary
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (p *Page) GetTitle() string {
+       if p == nil || p.Title == nil {
+               return ""
+       }
+       return *p.Title
+}
+
+// GetBuild returns the Build field.
+func (p *PageBuildEvent) GetBuild() *PagesBuild {
+       if p == nil {
+               return nil
+       }
+       return p.Build
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PageBuildEvent) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetInstallation returns the Installation field.
+func (p *PageBuildEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetRepo returns the Repo field.
+func (p *PageBuildEvent) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetSender returns the Sender field.
+func (p *PageBuildEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetCNAME returns the CNAME field if it's non-nil, zero value otherwise.
+func (p *Pages) GetCNAME() string {
+       if p == nil || p.CNAME == nil {
+               return ""
+       }
+       return *p.CNAME
+}
+
+// GetCustom404 returns the Custom404 field if it's non-nil, zero value otherwise.
+func (p *Pages) GetCustom404() bool {
+       if p == nil || p.Custom404 == nil {
+               return false
+       }
+       return *p.Custom404
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *Pages) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetSource returns the Source field.
+func (p *Pages) GetSource() *PagesSource {
+       if p == nil {
+               return nil
+       }
+       return p.Source
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (p *Pages) GetStatus() string {
+       if p == nil || p.Status == nil {
+               return ""
+       }
+       return *p.Status
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *Pages) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetCommit returns the Commit field if it's non-nil, zero value otherwise.
+func (p *PagesBuild) GetCommit() string {
+       if p == nil || p.Commit == nil {
+               return ""
+       }
+       return *p.Commit
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *PagesBuild) GetCreatedAt() Timestamp {
+       if p == nil || p.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.CreatedAt
+}
+
+// GetDuration returns the Duration field if it's non-nil, zero value otherwise.
+func (p *PagesBuild) GetDuration() int {
+       if p == nil || p.Duration == nil {
+               return 0
+       }
+       return *p.Duration
+}
+
+// GetError returns the Error field.
+func (p *PagesBuild) GetError() *PagesError {
+       if p == nil {
+               return nil
+       }
+       return p.Error
+}
+
+// GetPusher returns the Pusher field.
+func (p *PagesBuild) GetPusher() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Pusher
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (p *PagesBuild) GetStatus() string {
+       if p == nil || p.Status == nil {
+               return ""
+       }
+       return *p.Status
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (p *PagesBuild) GetUpdatedAt() Timestamp {
+       if p == nil || p.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *PagesBuild) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (p *PagesError) GetMessage() string {
+       if p == nil || p.Message == nil {
+               return ""
+       }
+       return *p.Message
+}
+
+// GetBranch returns the Branch field if it's non-nil, zero value otherwise.
+func (p *PagesSource) GetBranch() string {
+       if p == nil || p.Branch == nil {
+               return ""
+       }
+       return *p.Branch
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (p *PagesSource) GetPath() string {
+       if p == nil || p.Path == nil {
+               return ""
+       }
+       return *p.Path
+}
+
+// GetTotalPages returns the TotalPages field if it's non-nil, zero value otherwise.
+func (p *PageStats) GetTotalPages() int {
+       if p == nil || p.TotalPages == nil {
+               return 0
+       }
+       return *p.TotalPages
+}
+
+// GetCNAME returns the CNAME field if it's non-nil, zero value otherwise.
+func (p *PagesUpdate) GetCNAME() string {
+       if p == nil || p.CNAME == nil {
+               return ""
+       }
+       return *p.CNAME
+}
+
+// GetSource returns the Source field if it's non-nil, zero value otherwise.
+func (p *PagesUpdate) GetSource() string {
+       if p == nil || p.Source == nil {
+               return ""
+       }
+       return *p.Source
+}
+
+// GetHook returns the Hook field.
+func (p *PingEvent) GetHook() *Hook {
+       if p == nil {
+               return nil
+       }
+       return p.Hook
+}
+
+// GetHookID returns the HookID field if it's non-nil, zero value otherwise.
+func (p *PingEvent) GetHookID() int64 {
+       if p == nil || p.HookID == nil {
+               return 0
+       }
+       return *p.HookID
+}
+
+// GetInstallation returns the Installation field.
+func (p *PingEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetZen returns the Zen field if it's non-nil, zero value otherwise.
+func (p *PingEvent) GetZen() string {
+       if p == nil || p.Zen == nil {
+               return ""
+       }
+       return *p.Zen
+}
+
+// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise.
+func (p *Plan) GetCollaborators() int {
+       if p == nil || p.Collaborators == nil {
+               return 0
+       }
+       return *p.Collaborators
+}
+
+// GetFilledSeats returns the FilledSeats field if it's non-nil, zero value otherwise.
+func (p *Plan) GetFilledSeats() int {
+       if p == nil || p.FilledSeats == nil {
+               return 0
+       }
+       return *p.FilledSeats
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *Plan) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetPrivateRepos returns the PrivateRepos field if it's non-nil, zero value otherwise.
+func (p *Plan) GetPrivateRepos() int {
+       if p == nil || p.PrivateRepos == nil {
+               return 0
+       }
+       return *p.PrivateRepos
+}
+
+// GetSeats returns the Seats field if it's non-nil, zero value otherwise.
+func (p *Plan) GetSeats() int {
+       if p == nil || p.Seats == nil {
+               return 0
+       }
+       return *p.Seats
+}
+
+// GetSpace returns the Space field if it's non-nil, zero value otherwise.
+func (p *Plan) GetSpace() int {
+       if p == nil || p.Space == nil {
+               return 0
+       }
+       return *p.Space
+}
+
+// GetConfigURL returns the ConfigURL field if it's non-nil, zero value otherwise.
+func (p *PreReceiveHook) GetConfigURL() string {
+       if p == nil || p.ConfigURL == nil {
+               return ""
+       }
+       return *p.ConfigURL
+}
+
+// GetEnforcement returns the Enforcement field if it's non-nil, zero value otherwise.
+func (p *PreReceiveHook) GetEnforcement() string {
+       if p == nil || p.Enforcement == nil {
+               return ""
+       }
+       return *p.Enforcement
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PreReceiveHook) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PreReceiveHook) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetHRef returns the HRef field if it's non-nil, zero value otherwise.
+func (p *PRLink) GetHRef() string {
+       if p == nil || p.HRef == nil {
+               return ""
+       }
+       return *p.HRef
+}
+
+// GetComments returns the Comments field.
+func (p *PRLinks) GetComments() *PRLink {
+       if p == nil {
+               return nil
+       }
+       return p.Comments
+}
+
+// GetCommits returns the Commits field.
+func (p *PRLinks) GetCommits() *PRLink {
+       if p == nil {
+               return nil
+       }
+       return p.Commits
+}
+
+// GetHTML returns the HTML field.
+func (p *PRLinks) GetHTML() *PRLink {
+       if p == nil {
+               return nil
+       }
+       return p.HTML
+}
+
+// GetIssue returns the Issue field.
+func (p *PRLinks) GetIssue() *PRLink {
+       if p == nil {
+               return nil
+       }
+       return p.Issue
+}
+
+// GetReviewComment returns the ReviewComment field.
+func (p *PRLinks) GetReviewComment() *PRLink {
+       if p == nil {
+               return nil
+       }
+       return p.ReviewComment
+}
+
+// GetReviewComments returns the ReviewComments field.
+func (p *PRLinks) GetReviewComments() *PRLink {
+       if p == nil {
+               return nil
+       }
+       return p.ReviewComments
+}
+
+// GetSelf returns the Self field.
+func (p *PRLinks) GetSelf() *PRLink {
+       if p == nil {
+               return nil
+       }
+       return p.Self
+}
+
+// GetStatuses returns the Statuses field.
+func (p *PRLinks) GetStatuses() *PRLink {
+       if p == nil {
+               return nil
+       }
+       return p.Statuses
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (p *Project) GetBody() string {
+       if p == nil || p.Body == nil {
+               return ""
+       }
+       return *p.Body
+}
+
+// GetColumnsURL returns the ColumnsURL field if it's non-nil, zero value otherwise.
+func (p *Project) GetColumnsURL() string {
+       if p == nil || p.ColumnsURL == nil {
+               return ""
+       }
+       return *p.ColumnsURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *Project) GetCreatedAt() Timestamp {
+       if p == nil || p.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.CreatedAt
+}
+
+// GetCreator returns the Creator field.
+func (p *Project) GetCreator() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Creator
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *Project) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *Project) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *Project) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (p *Project) GetNodeID() string {
+       if p == nil || p.NodeID == nil {
+               return ""
+       }
+       return *p.NodeID
+}
+
+// GetNumber returns the Number field if it's non-nil, zero value otherwise.
+func (p *Project) GetNumber() int {
+       if p == nil || p.Number == nil {
+               return 0
+       }
+       return *p.Number
+}
+
+// GetOwnerURL returns the OwnerURL field if it's non-nil, zero value otherwise.
+func (p *Project) GetOwnerURL() string {
+       if p == nil || p.OwnerURL == nil {
+               return ""
+       }
+       return *p.OwnerURL
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (p *Project) GetState() string {
+       if p == nil || p.State == nil {
+               return ""
+       }
+       return *p.State
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (p *Project) GetUpdatedAt() Timestamp {
+       if p == nil || p.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *Project) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (p *ProjectBody) GetFrom() string {
+       if p == nil || p.From == nil {
+               return ""
+       }
+       return *p.From
+}
+
+// GetArchived returns the Archived field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetArchived() bool {
+       if p == nil || p.Archived == nil {
+               return false
+       }
+       return *p.Archived
+}
+
+// GetColumnID returns the ColumnID field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetColumnID() int64 {
+       if p == nil || p.ColumnID == nil {
+               return 0
+       }
+       return *p.ColumnID
+}
+
+// GetColumnName returns the ColumnName field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetColumnName() string {
+       if p == nil || p.ColumnName == nil {
+               return ""
+       }
+       return *p.ColumnName
+}
+
+// GetColumnURL returns the ColumnURL field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetColumnURL() string {
+       if p == nil || p.ColumnURL == nil {
+               return ""
+       }
+       return *p.ColumnURL
+}
+
+// GetContentURL returns the ContentURL field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetContentURL() string {
+       if p == nil || p.ContentURL == nil {
+               return ""
+       }
+       return *p.ContentURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetCreatedAt() Timestamp {
+       if p == nil || p.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.CreatedAt
+}
+
+// GetCreator returns the Creator field.
+func (p *ProjectCard) GetCreator() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Creator
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetNodeID() string {
+       if p == nil || p.NodeID == nil {
+               return ""
+       }
+       return *p.NodeID
+}
+
+// GetNote returns the Note field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetNote() string {
+       if p == nil || p.Note == nil {
+               return ""
+       }
+       return *p.Note
+}
+
+// GetPreviousColumnName returns the PreviousColumnName field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetPreviousColumnName() string {
+       if p == nil || p.PreviousColumnName == nil {
+               return ""
+       }
+       return *p.PreviousColumnName
+}
+
+// GetProjectID returns the ProjectID field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetProjectID() int64 {
+       if p == nil || p.ProjectID == nil {
+               return 0
+       }
+       return *p.ProjectID
+}
+
+// GetProjectURL returns the ProjectURL field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetProjectURL() string {
+       if p == nil || p.ProjectURL == nil {
+               return ""
+       }
+       return *p.ProjectURL
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetUpdatedAt() Timestamp {
+       if p == nil || p.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *ProjectCard) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetNote returns the Note field.
+func (p *ProjectCardChange) GetNote() *ProjectCardNote {
+       if p == nil {
+               return nil
+       }
+       return p.Note
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (p *ProjectCardEvent) GetAction() string {
+       if p == nil || p.Action == nil {
+               return ""
+       }
+       return *p.Action
+}
+
+// GetAfterID returns the AfterID field if it's non-nil, zero value otherwise.
+func (p *ProjectCardEvent) GetAfterID() int64 {
+       if p == nil || p.AfterID == nil {
+               return 0
+       }
+       return *p.AfterID
+}
+
+// GetChanges returns the Changes field.
+func (p *ProjectCardEvent) GetChanges() *ProjectCardChange {
+       if p == nil {
+               return nil
+       }
+       return p.Changes
+}
+
+// GetInstallation returns the Installation field.
+func (p *ProjectCardEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetOrg returns the Org field.
+func (p *ProjectCardEvent) GetOrg() *Organization {
+       if p == nil {
+               return nil
+       }
+       return p.Org
+}
+
+// GetProjectCard returns the ProjectCard field.
+func (p *ProjectCardEvent) GetProjectCard() *ProjectCard {
+       if p == nil {
+               return nil
+       }
+       return p.ProjectCard
+}
+
+// GetRepo returns the Repo field.
+func (p *ProjectCardEvent) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetSender returns the Sender field.
+func (p *ProjectCardEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetArchivedState returns the ArchivedState field if it's non-nil, zero value otherwise.
+func (p *ProjectCardListOptions) GetArchivedState() string {
+       if p == nil || p.ArchivedState == nil {
+               return ""
+       }
+       return *p.ArchivedState
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (p *ProjectCardNote) GetFrom() string {
+       if p == nil || p.From == nil {
+               return ""
+       }
+       return *p.From
+}
+
+// GetArchived returns the Archived field if it's non-nil, zero value otherwise.
+func (p *ProjectCardOptions) GetArchived() bool {
+       if p == nil || p.Archived == nil {
+               return false
+       }
+       return *p.Archived
+}
+
+// GetBody returns the Body field.
+func (p *ProjectChange) GetBody() *ProjectBody {
+       if p == nil {
+               return nil
+       }
+       return p.Body
+}
+
+// GetName returns the Name field.
+func (p *ProjectChange) GetName() *ProjectName {
+       if p == nil {
+               return nil
+       }
+       return p.Name
+}
+
+// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
+func (p *ProjectCollaboratorOptions) GetPermission() string {
+       if p == nil || p.Permission == nil {
+               return ""
+       }
+       return *p.Permission
+}
+
+// GetCardsURL returns the CardsURL field if it's non-nil, zero value otherwise.
+func (p *ProjectColumn) GetCardsURL() string {
+       if p == nil || p.CardsURL == nil {
+               return ""
+       }
+       return *p.CardsURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *ProjectColumn) GetCreatedAt() Timestamp {
+       if p == nil || p.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.CreatedAt
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *ProjectColumn) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *ProjectColumn) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (p *ProjectColumn) GetNodeID() string {
+       if p == nil || p.NodeID == nil {
+               return ""
+       }
+       return *p.NodeID
+}
+
+// GetProjectURL returns the ProjectURL field if it's non-nil, zero value otherwise.
+func (p *ProjectColumn) GetProjectURL() string {
+       if p == nil || p.ProjectURL == nil {
+               return ""
+       }
+       return *p.ProjectURL
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (p *ProjectColumn) GetUpdatedAt() Timestamp {
+       if p == nil || p.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *ProjectColumn) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetName returns the Name field.
+func (p *ProjectColumnChange) GetName() *ProjectColumnName {
+       if p == nil {
+               return nil
+       }
+       return p.Name
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (p *ProjectColumnEvent) GetAction() string {
+       if p == nil || p.Action == nil {
+               return ""
+       }
+       return *p.Action
+}
+
+// GetAfterID returns the AfterID field if it's non-nil, zero value otherwise.
+func (p *ProjectColumnEvent) GetAfterID() int64 {
+       if p == nil || p.AfterID == nil {
+               return 0
+       }
+       return *p.AfterID
+}
+
+// GetChanges returns the Changes field.
+func (p *ProjectColumnEvent) GetChanges() *ProjectColumnChange {
+       if p == nil {
+               return nil
+       }
+       return p.Changes
+}
+
+// GetInstallation returns the Installation field.
+func (p *ProjectColumnEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetOrg returns the Org field.
+func (p *ProjectColumnEvent) GetOrg() *Organization {
+       if p == nil {
+               return nil
+       }
+       return p.Org
+}
+
+// GetProjectColumn returns the ProjectColumn field.
+func (p *ProjectColumnEvent) GetProjectColumn() *ProjectColumn {
+       if p == nil {
+               return nil
+       }
+       return p.ProjectColumn
+}
+
+// GetRepo returns the Repo field.
+func (p *ProjectColumnEvent) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetSender returns the Sender field.
+func (p *ProjectColumnEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (p *ProjectColumnName) GetFrom() string {
+       if p == nil || p.From == nil {
+               return ""
+       }
+       return *p.From
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (p *ProjectEvent) GetAction() string {
+       if p == nil || p.Action == nil {
+               return ""
+       }
+       return *p.Action
+}
+
+// GetChanges returns the Changes field.
+func (p *ProjectEvent) GetChanges() *ProjectChange {
+       if p == nil {
+               return nil
+       }
+       return p.Changes
+}
+
+// GetInstallation returns the Installation field.
+func (p *ProjectEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetOrg returns the Org field.
+func (p *ProjectEvent) GetOrg() *Organization {
+       if p == nil {
+               return nil
+       }
+       return p.Org
+}
+
+// GetProject returns the Project field.
+func (p *ProjectEvent) GetProject() *Project {
+       if p == nil {
+               return nil
+       }
+       return p.Project
+}
+
+// GetRepo returns the Repo field.
+func (p *ProjectEvent) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetSender returns the Sender field.
+func (p *ProjectEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (p *ProjectName) GetFrom() string {
+       if p == nil || p.From == nil {
+               return ""
+       }
+       return *p.From
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (p *ProjectOptions) GetBody() string {
+       if p == nil || p.Body == nil {
+               return ""
+       }
+       return *p.Body
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *ProjectOptions) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetOrganizationPermission returns the OrganizationPermission field if it's non-nil, zero value otherwise.
+func (p *ProjectOptions) GetOrganizationPermission() string {
+       if p == nil || p.OrganizationPermission == nil {
+               return ""
+       }
+       return *p.OrganizationPermission
+}
+
+// GetPublic returns the Public field if it's non-nil, zero value otherwise.
+func (p *ProjectOptions) GetPublic() bool {
+       if p == nil || p.Public == nil {
+               return false
+       }
+       return *p.Public
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (p *ProjectOptions) GetState() string {
+       if p == nil || p.State == nil {
+               return ""
+       }
+       return *p.State
+}
+
+// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
+func (p *ProjectPermissionLevel) GetPermission() string {
+       if p == nil || p.Permission == nil {
+               return ""
+       }
+       return *p.Permission
+}
+
+// GetUser returns the User field.
+func (p *ProjectPermissionLevel) GetUser() *User {
+       if p == nil {
+               return nil
+       }
+       return p.User
+}
+
+// GetAllowDeletions returns the AllowDeletions field.
+func (p *Protection) GetAllowDeletions() *AllowDeletions {
+       if p == nil {
+               return nil
+       }
+       return p.AllowDeletions
+}
+
+// GetAllowForcePushes returns the AllowForcePushes field.
+func (p *Protection) GetAllowForcePushes() *AllowForcePushes {
+       if p == nil {
+               return nil
+       }
+       return p.AllowForcePushes
+}
+
+// GetEnforceAdmins returns the EnforceAdmins field.
+func (p *Protection) GetEnforceAdmins() *AdminEnforcement {
+       if p == nil {
+               return nil
+       }
+       return p.EnforceAdmins
+}
+
+// GetRequiredConversationResolution returns the RequiredConversationResolution field.
+func (p *Protection) GetRequiredConversationResolution() *RequiredConversationResolution {
+       if p == nil {
+               return nil
+       }
+       return p.RequiredConversationResolution
+}
+
+// GetRequiredPullRequestReviews returns the RequiredPullRequestReviews field.
+func (p *Protection) GetRequiredPullRequestReviews() *PullRequestReviewsEnforcement {
+       if p == nil {
+               return nil
+       }
+       return p.RequiredPullRequestReviews
+}
+
+// GetRequiredStatusChecks returns the RequiredStatusChecks field.
+func (p *Protection) GetRequiredStatusChecks() *RequiredStatusChecks {
+       if p == nil {
+               return nil
+       }
+       return p.RequiredStatusChecks
+}
+
+// GetRequireLinearHistory returns the RequireLinearHistory field.
+func (p *Protection) GetRequireLinearHistory() *RequireLinearHistory {
+       if p == nil {
+               return nil
+       }
+       return p.RequireLinearHistory
+}
+
+// GetRestrictions returns the Restrictions field.
+func (p *Protection) GetRestrictions() *BranchRestrictions {
+       if p == nil {
+               return nil
+       }
+       return p.Restrictions
+}
+
+// GetAllowDeletions returns the AllowDeletions field if it's non-nil, zero value otherwise.
+func (p *ProtectionRequest) GetAllowDeletions() bool {
+       if p == nil || p.AllowDeletions == nil {
+               return false
+       }
+       return *p.AllowDeletions
+}
+
+// GetAllowForcePushes returns the AllowForcePushes field if it's non-nil, zero value otherwise.
+func (p *ProtectionRequest) GetAllowForcePushes() bool {
+       if p == nil || p.AllowForcePushes == nil {
+               return false
+       }
+       return *p.AllowForcePushes
+}
+
+// GetRequiredPullRequestReviews returns the RequiredPullRequestReviews field.
+func (p *ProtectionRequest) GetRequiredPullRequestReviews() *PullRequestReviewsEnforcementRequest {
+       if p == nil {
+               return nil
+       }
+       return p.RequiredPullRequestReviews
+}
+
+// GetRequiredStatusChecks returns the RequiredStatusChecks field.
+func (p *ProtectionRequest) GetRequiredStatusChecks() *RequiredStatusChecks {
+       if p == nil {
+               return nil
+       }
+       return p.RequiredStatusChecks
+}
+
+// GetRequireLinearHistory returns the RequireLinearHistory field if it's non-nil, zero value otherwise.
+func (p *ProtectionRequest) GetRequireLinearHistory() bool {
+       if p == nil || p.RequireLinearHistory == nil {
+               return false
+       }
+       return *p.RequireLinearHistory
+}
+
+// GetRestrictions returns the Restrictions field.
+func (p *ProtectionRequest) GetRestrictions() *BranchRestrictionsRequest {
+       if p == nil {
+               return nil
+       }
+       return p.Restrictions
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *ProtectionRule) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (p *ProtectionRule) GetNodeID() string {
+       if p == nil || p.NodeID == nil {
+               return ""
+       }
+       return *p.NodeID
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (p *ProtectionRule) GetType() string {
+       if p == nil || p.Type == nil {
+               return ""
+       }
+       return *p.Type
+}
+
+// GetWaitTimer returns the WaitTimer field if it's non-nil, zero value otherwise.
+func (p *ProtectionRule) GetWaitTimer() int {
+       if p == nil || p.WaitTimer == nil {
+               return 0
+       }
+       return *p.WaitTimer
+}
+
+// GetInstallation returns the Installation field.
+func (p *PublicEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetRepo returns the Repo field.
+func (p *PublicEvent) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetSender returns the Sender field.
+func (p *PublicEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetKey returns the Key field if it's non-nil, zero value otherwise.
+func (p *PublicKey) GetKey() string {
+       if p == nil || p.Key == nil {
+               return ""
+       }
+       return *p.Key
+}
+
+// GetKeyID returns the KeyID field if it's non-nil, zero value otherwise.
+func (p *PublicKey) GetKeyID() string {
+       if p == nil || p.KeyID == nil {
+               return ""
+       }
+       return *p.KeyID
+}
+
+// GetActiveLockReason returns the ActiveLockReason field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetActiveLockReason() string {
+       if p == nil || p.ActiveLockReason == nil {
+               return ""
+       }
+       return *p.ActiveLockReason
+}
+
+// GetAdditions returns the Additions field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetAdditions() int {
+       if p == nil || p.Additions == nil {
+               return 0
+       }
+       return *p.Additions
+}
+
+// GetAssignee returns the Assignee field.
+func (p *PullRequest) GetAssignee() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Assignee
+}
+
+// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetAuthorAssociation() string {
+       if p == nil || p.AuthorAssociation == nil {
+               return ""
+       }
+       return *p.AuthorAssociation
+}
+
+// GetAutoMerge returns the AutoMerge field.
+func (p *PullRequest) GetAutoMerge() *PullRequestAutoMerge {
+       if p == nil {
+               return nil
+       }
+       return p.AutoMerge
+}
+
+// GetBase returns the Base field.
+func (p *PullRequest) GetBase() *PullRequestBranch {
+       if p == nil {
+               return nil
+       }
+       return p.Base
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetBody() string {
+       if p == nil || p.Body == nil {
+               return ""
+       }
+       return *p.Body
+}
+
+// GetChangedFiles returns the ChangedFiles field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetChangedFiles() int {
+       if p == nil || p.ChangedFiles == nil {
+               return 0
+       }
+       return *p.ChangedFiles
+}
+
+// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetClosedAt() time.Time {
+       if p == nil || p.ClosedAt == nil {
+               return time.Time{}
+       }
+       return *p.ClosedAt
+}
+
+// GetComments returns the Comments field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetComments() int {
+       if p == nil || p.Comments == nil {
+               return 0
+       }
+       return *p.Comments
+}
+
+// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetCommentsURL() string {
+       if p == nil || p.CommentsURL == nil {
+               return ""
+       }
+       return *p.CommentsURL
+}
+
+// GetCommits returns the Commits field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetCommits() int {
+       if p == nil || p.Commits == nil {
+               return 0
+       }
+       return *p.Commits
+}
+
+// GetCommitsURL returns the CommitsURL field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetCommitsURL() string {
+       if p == nil || p.CommitsURL == nil {
+               return ""
+       }
+       return *p.CommitsURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetCreatedAt() time.Time {
+       if p == nil || p.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *p.CreatedAt
+}
+
+// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetDeletions() int {
+       if p == nil || p.Deletions == nil {
+               return 0
+       }
+       return *p.Deletions
+}
+
+// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetDiffURL() string {
+       if p == nil || p.DiffURL == nil {
+               return ""
+       }
+       return *p.DiffURL
+}
+
+// GetDraft returns the Draft field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetDraft() bool {
+       if p == nil || p.Draft == nil {
+               return false
+       }
+       return *p.Draft
+}
+
+// GetHead returns the Head field.
+func (p *PullRequest) GetHead() *PullRequestBranch {
+       if p == nil {
+               return nil
+       }
+       return p.Head
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetIssueURL returns the IssueURL field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetIssueURL() string {
+       if p == nil || p.IssueURL == nil {
+               return ""
+       }
+       return *p.IssueURL
+}
+
+// GetLinks returns the Links field.
+func (p *PullRequest) GetLinks() *PRLinks {
+       if p == nil {
+               return nil
+       }
+       return p.Links
+}
+
+// GetLocked returns the Locked field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetLocked() bool {
+       if p == nil || p.Locked == nil {
+               return false
+       }
+       return *p.Locked
+}
+
+// GetMaintainerCanModify returns the MaintainerCanModify field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetMaintainerCanModify() bool {
+       if p == nil || p.MaintainerCanModify == nil {
+               return false
+       }
+       return *p.MaintainerCanModify
+}
+
+// GetMergeable returns the Mergeable field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetMergeable() bool {
+       if p == nil || p.Mergeable == nil {
+               return false
+       }
+       return *p.Mergeable
+}
+
+// GetMergeableState returns the MergeableState field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetMergeableState() string {
+       if p == nil || p.MergeableState == nil {
+               return ""
+       }
+       return *p.MergeableState
+}
+
+// GetMergeCommitSHA returns the MergeCommitSHA field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetMergeCommitSHA() string {
+       if p == nil || p.MergeCommitSHA == nil {
+               return ""
+       }
+       return *p.MergeCommitSHA
+}
+
+// GetMerged returns the Merged field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetMerged() bool {
+       if p == nil || p.Merged == nil {
+               return false
+       }
+       return *p.Merged
+}
+
+// GetMergedAt returns the MergedAt field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetMergedAt() time.Time {
+       if p == nil || p.MergedAt == nil {
+               return time.Time{}
+       }
+       return *p.MergedAt
+}
+
+// GetMergedBy returns the MergedBy field.
+func (p *PullRequest) GetMergedBy() *User {
+       if p == nil {
+               return nil
+       }
+       return p.MergedBy
+}
+
+// GetMilestone returns the Milestone field.
+func (p *PullRequest) GetMilestone() *Milestone {
+       if p == nil {
+               return nil
+       }
+       return p.Milestone
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetNodeID() string {
+       if p == nil || p.NodeID == nil {
+               return ""
+       }
+       return *p.NodeID
+}
+
+// GetNumber returns the Number field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetNumber() int {
+       if p == nil || p.Number == nil {
+               return 0
+       }
+       return *p.Number
+}
+
+// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetPatchURL() string {
+       if p == nil || p.PatchURL == nil {
+               return ""
+       }
+       return *p.PatchURL
+}
+
+// GetRebaseable returns the Rebaseable field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetRebaseable() bool {
+       if p == nil || p.Rebaseable == nil {
+               return false
+       }
+       return *p.Rebaseable
+}
+
+// GetReviewComments returns the ReviewComments field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetReviewComments() int {
+       if p == nil || p.ReviewComments == nil {
+               return 0
+       }
+       return *p.ReviewComments
+}
+
+// GetReviewCommentsURL returns the ReviewCommentsURL field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetReviewCommentsURL() string {
+       if p == nil || p.ReviewCommentsURL == nil {
+               return ""
+       }
+       return *p.ReviewCommentsURL
+}
+
+// GetReviewCommentURL returns the ReviewCommentURL field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetReviewCommentURL() string {
+       if p == nil || p.ReviewCommentURL == nil {
+               return ""
+       }
+       return *p.ReviewCommentURL
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetState() string {
+       if p == nil || p.State == nil {
+               return ""
+       }
+       return *p.State
+}
+
+// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetStatusesURL() string {
+       if p == nil || p.StatusesURL == nil {
+               return ""
+       }
+       return *p.StatusesURL
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetTitle() string {
+       if p == nil || p.Title == nil {
+               return ""
+       }
+       return *p.Title
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetUpdatedAt() time.Time {
+       if p == nil || p.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *p.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *PullRequest) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetUser returns the User field.
+func (p *PullRequest) GetUser() *User {
+       if p == nil {
+               return nil
+       }
+       return p.User
+}
+
+// GetCommitMessage returns the CommitMessage field if it's non-nil, zero value otherwise.
+func (p *PullRequestAutoMerge) GetCommitMessage() string {
+       if p == nil || p.CommitMessage == nil {
+               return ""
+       }
+       return *p.CommitMessage
+}
+
+// GetCommitTitle returns the CommitTitle field if it's non-nil, zero value otherwise.
+func (p *PullRequestAutoMerge) GetCommitTitle() string {
+       if p == nil || p.CommitTitle == nil {
+               return ""
+       }
+       return *p.CommitTitle
+}
+
+// GetEnabledBy returns the EnabledBy field.
+func (p *PullRequestAutoMerge) GetEnabledBy() *User {
+       if p == nil {
+               return nil
+       }
+       return p.EnabledBy
+}
+
+// GetMergeMethod returns the MergeMethod field if it's non-nil, zero value otherwise.
+func (p *PullRequestAutoMerge) GetMergeMethod() string {
+       if p == nil || p.MergeMethod == nil {
+               return ""
+       }
+       return *p.MergeMethod
+}
+
+// GetLabel returns the Label field if it's non-nil, zero value otherwise.
+func (p *PullRequestBranch) GetLabel() string {
+       if p == nil || p.Label == nil {
+               return ""
+       }
+       return *p.Label
+}
+
+// GetRef returns the Ref field if it's non-nil, zero value otherwise.
+func (p *PullRequestBranch) GetRef() string {
+       if p == nil || p.Ref == nil {
+               return ""
+       }
+       return *p.Ref
+}
+
+// GetRepo returns the Repo field.
+func (p *PullRequestBranch) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (p *PullRequestBranch) GetSHA() string {
+       if p == nil || p.SHA == nil {
+               return ""
+       }
+       return *p.SHA
+}
+
+// GetUser returns the User field.
+func (p *PullRequestBranch) GetUser() *User {
+       if p == nil {
+               return nil
+       }
+       return p.User
+}
+
+// GetExpectedHeadSHA returns the ExpectedHeadSHA field if it's non-nil, zero value otherwise.
+func (p *PullRequestBranchUpdateOptions) GetExpectedHeadSHA() string {
+       if p == nil || p.ExpectedHeadSHA == nil {
+               return ""
+       }
+       return *p.ExpectedHeadSHA
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (p *PullRequestBranchUpdateResponse) GetMessage() string {
+       if p == nil || p.Message == nil {
+               return ""
+       }
+       return *p.Message
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *PullRequestBranchUpdateResponse) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetAuthorAssociation() string {
+       if p == nil || p.AuthorAssociation == nil {
+               return ""
+       }
+       return *p.AuthorAssociation
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetBody() string {
+       if p == nil || p.Body == nil {
+               return ""
+       }
+       return *p.Body
+}
+
+// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetCommitID() string {
+       if p == nil || p.CommitID == nil {
+               return ""
+       }
+       return *p.CommitID
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetCreatedAt() time.Time {
+       if p == nil || p.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *p.CreatedAt
+}
+
+// GetDiffHunk returns the DiffHunk field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetDiffHunk() string {
+       if p == nil || p.DiffHunk == nil {
+               return ""
+       }
+       return *p.DiffHunk
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetInReplyTo returns the InReplyTo field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetInReplyTo() int64 {
+       if p == nil || p.InReplyTo == nil {
+               return 0
+       }
+       return *p.InReplyTo
+}
+
+// GetLine returns the Line field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetLine() int {
+       if p == nil || p.Line == nil {
+               return 0
+       }
+       return *p.Line
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetNodeID() string {
+       if p == nil || p.NodeID == nil {
+               return ""
+       }
+       return *p.NodeID
+}
+
+// GetOriginalCommitID returns the OriginalCommitID field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetOriginalCommitID() string {
+       if p == nil || p.OriginalCommitID == nil {
+               return ""
+       }
+       return *p.OriginalCommitID
+}
+
+// GetOriginalLine returns the OriginalLine field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetOriginalLine() int {
+       if p == nil || p.OriginalLine == nil {
+               return 0
+       }
+       return *p.OriginalLine
+}
+
+// GetOriginalPosition returns the OriginalPosition field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetOriginalPosition() int {
+       if p == nil || p.OriginalPosition == nil {
+               return 0
+       }
+       return *p.OriginalPosition
+}
+
+// GetOriginalStartLine returns the OriginalStartLine field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetOriginalStartLine() int {
+       if p == nil || p.OriginalStartLine == nil {
+               return 0
+       }
+       return *p.OriginalStartLine
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetPath() string {
+       if p == nil || p.Path == nil {
+               return ""
+       }
+       return *p.Path
+}
+
+// GetPosition returns the Position field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetPosition() int {
+       if p == nil || p.Position == nil {
+               return 0
+       }
+       return *p.Position
+}
+
+// GetPullRequestReviewID returns the PullRequestReviewID field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetPullRequestReviewID() int64 {
+       if p == nil || p.PullRequestReviewID == nil {
+               return 0
+       }
+       return *p.PullRequestReviewID
+}
+
+// GetPullRequestURL returns the PullRequestURL field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetPullRequestURL() string {
+       if p == nil || p.PullRequestURL == nil {
+               return ""
+       }
+       return *p.PullRequestURL
+}
+
+// GetReactions returns the Reactions field.
+func (p *PullRequestComment) GetReactions() *Reactions {
+       if p == nil {
+               return nil
+       }
+       return p.Reactions
+}
+
+// GetSide returns the Side field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetSide() string {
+       if p == nil || p.Side == nil {
+               return ""
+       }
+       return *p.Side
+}
+
+// GetStartLine returns the StartLine field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetStartLine() int {
+       if p == nil || p.StartLine == nil {
+               return 0
+       }
+       return *p.StartLine
+}
+
+// GetStartSide returns the StartSide field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetStartSide() string {
+       if p == nil || p.StartSide == nil {
+               return ""
+       }
+       return *p.StartSide
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetUpdatedAt() time.Time {
+       if p == nil || p.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *p.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *PullRequestComment) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetUser returns the User field.
+func (p *PullRequestComment) GetUser() *User {
+       if p == nil {
+               return nil
+       }
+       return p.User
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (p *PullRequestEvent) GetAction() string {
+       if p == nil || p.Action == nil {
+               return ""
+       }
+       return *p.Action
+}
+
+// GetAfter returns the After field if it's non-nil, zero value otherwise.
+func (p *PullRequestEvent) GetAfter() string {
+       if p == nil || p.After == nil {
+               return ""
+       }
+       return *p.After
+}
+
+// GetAssignee returns the Assignee field.
+func (p *PullRequestEvent) GetAssignee() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Assignee
+}
+
+// GetBefore returns the Before field if it's non-nil, zero value otherwise.
+func (p *PullRequestEvent) GetBefore() string {
+       if p == nil || p.Before == nil {
+               return ""
+       }
+       return *p.Before
+}
+
+// GetChanges returns the Changes field.
+func (p *PullRequestEvent) GetChanges() *EditChange {
+       if p == nil {
+               return nil
+       }
+       return p.Changes
+}
+
+// GetInstallation returns the Installation field.
+func (p *PullRequestEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetLabel returns the Label field.
+func (p *PullRequestEvent) GetLabel() *Label {
+       if p == nil {
+               return nil
+       }
+       return p.Label
+}
+
+// GetNumber returns the Number field if it's non-nil, zero value otherwise.
+func (p *PullRequestEvent) GetNumber() int {
+       if p == nil || p.Number == nil {
+               return 0
+       }
+       return *p.Number
+}
+
+// GetOrganization returns the Organization field.
+func (p *PullRequestEvent) GetOrganization() *Organization {
+       if p == nil {
+               return nil
+       }
+       return p.Organization
+}
+
+// GetPullRequest returns the PullRequest field.
+func (p *PullRequestEvent) GetPullRequest() *PullRequest {
+       if p == nil {
+               return nil
+       }
+       return p.PullRequest
+}
+
+// GetRepo returns the Repo field.
+func (p *PullRequestEvent) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetRequestedReviewer returns the RequestedReviewer field.
+func (p *PullRequestEvent) GetRequestedReviewer() *User {
+       if p == nil {
+               return nil
+       }
+       return p.RequestedReviewer
+}
+
+// GetRequestedTeam returns the RequestedTeam field.
+func (p *PullRequestEvent) GetRequestedTeam() *Team {
+       if p == nil {
+               return nil
+       }
+       return p.RequestedTeam
+}
+
+// GetSender returns the Sender field.
+func (p *PullRequestEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise.
+func (p *PullRequestLinks) GetDiffURL() string {
+       if p == nil || p.DiffURL == nil {
+               return ""
+       }
+       return *p.DiffURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *PullRequestLinks) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise.
+func (p *PullRequestLinks) GetPatchURL() string {
+       if p == nil || p.PatchURL == nil {
+               return ""
+       }
+       return *p.PatchURL
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *PullRequestLinks) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetMerged returns the Merged field if it's non-nil, zero value otherwise.
+func (p *PullRequestMergeResult) GetMerged() bool {
+       if p == nil || p.Merged == nil {
+               return false
+       }
+       return *p.Merged
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (p *PullRequestMergeResult) GetMessage() string {
+       if p == nil || p.Message == nil {
+               return ""
+       }
+       return *p.Message
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (p *PullRequestMergeResult) GetSHA() string {
+       if p == nil || p.SHA == nil {
+               return ""
+       }
+       return *p.SHA
+}
+
+// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise.
+func (p *PullRequestReview) GetAuthorAssociation() string {
+       if p == nil || p.AuthorAssociation == nil {
+               return ""
+       }
+       return *p.AuthorAssociation
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (p *PullRequestReview) GetBody() string {
+       if p == nil || p.Body == nil {
+               return ""
+       }
+       return *p.Body
+}
+
+// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
+func (p *PullRequestReview) GetCommitID() string {
+       if p == nil || p.CommitID == nil {
+               return ""
+       }
+       return *p.CommitID
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *PullRequestReview) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PullRequestReview) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (p *PullRequestReview) GetNodeID() string {
+       if p == nil || p.NodeID == nil {
+               return ""
+       }
+       return *p.NodeID
+}
+
+// GetPullRequestURL returns the PullRequestURL field if it's non-nil, zero value otherwise.
+func (p *PullRequestReview) GetPullRequestURL() string {
+       if p == nil || p.PullRequestURL == nil {
+               return ""
+       }
+       return *p.PullRequestURL
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (p *PullRequestReview) GetState() string {
+       if p == nil || p.State == nil {
+               return ""
+       }
+       return *p.State
+}
+
+// GetSubmittedAt returns the SubmittedAt field if it's non-nil, zero value otherwise.
+func (p *PullRequestReview) GetSubmittedAt() time.Time {
+       if p == nil || p.SubmittedAt == nil {
+               return time.Time{}
+       }
+       return *p.SubmittedAt
+}
+
+// GetUser returns the User field.
+func (p *PullRequestReview) GetUser() *User {
+       if p == nil {
+               return nil
+       }
+       return p.User
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (p *PullRequestReviewCommentEvent) GetAction() string {
+       if p == nil || p.Action == nil {
+               return ""
+       }
+       return *p.Action
+}
+
+// GetChanges returns the Changes field.
+func (p *PullRequestReviewCommentEvent) GetChanges() *EditChange {
+       if p == nil {
+               return nil
+       }
+       return p.Changes
+}
+
+// GetComment returns the Comment field.
+func (p *PullRequestReviewCommentEvent) GetComment() *PullRequestComment {
+       if p == nil {
+               return nil
+       }
+       return p.Comment
+}
+
+// GetInstallation returns the Installation field.
+func (p *PullRequestReviewCommentEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetPullRequest returns the PullRequest field.
+func (p *PullRequestReviewCommentEvent) GetPullRequest() *PullRequest {
+       if p == nil {
+               return nil
+       }
+       return p.PullRequest
+}
+
+// GetRepo returns the Repo field.
+func (p *PullRequestReviewCommentEvent) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetSender returns the Sender field.
+func (p *PullRequestReviewCommentEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (p *PullRequestReviewDismissalRequest) GetMessage() string {
+       if p == nil || p.Message == nil {
+               return ""
+       }
+       return *p.Message
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (p *PullRequestReviewEvent) GetAction() string {
+       if p == nil || p.Action == nil {
+               return ""
+       }
+       return *p.Action
+}
+
+// GetInstallation returns the Installation field.
+func (p *PullRequestReviewEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetOrganization returns the Organization field.
+func (p *PullRequestReviewEvent) GetOrganization() *Organization {
+       if p == nil {
+               return nil
+       }
+       return p.Organization
+}
+
+// GetPullRequest returns the PullRequest field.
+func (p *PullRequestReviewEvent) GetPullRequest() *PullRequest {
+       if p == nil {
+               return nil
+       }
+       return p.PullRequest
+}
+
+// GetRepo returns the Repo field.
+func (p *PullRequestReviewEvent) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetReview returns the Review field.
+func (p *PullRequestReviewEvent) GetReview() *PullRequestReview {
+       if p == nil {
+               return nil
+       }
+       return p.Review
+}
+
+// GetSender returns the Sender field.
+func (p *PullRequestReviewEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (p *PullRequestReviewRequest) GetBody() string {
+       if p == nil || p.Body == nil {
+               return ""
+       }
+       return *p.Body
+}
+
+// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
+func (p *PullRequestReviewRequest) GetCommitID() string {
+       if p == nil || p.CommitID == nil {
+               return ""
+       }
+       return *p.CommitID
+}
+
+// GetEvent returns the Event field if it's non-nil, zero value otherwise.
+func (p *PullRequestReviewRequest) GetEvent() string {
+       if p == nil || p.Event == nil {
+               return ""
+       }
+       return *p.Event
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (p *PullRequestReviewRequest) GetNodeID() string {
+       if p == nil || p.NodeID == nil {
+               return ""
+       }
+       return *p.NodeID
+}
+
+// GetDismissalRestrictions returns the DismissalRestrictions field.
+func (p *PullRequestReviewsEnforcement) GetDismissalRestrictions() *DismissalRestrictions {
+       if p == nil {
+               return nil
+       }
+       return p.DismissalRestrictions
+}
+
+// GetDismissalRestrictionsRequest returns the DismissalRestrictionsRequest field.
+func (p *PullRequestReviewsEnforcementRequest) GetDismissalRestrictionsRequest() *DismissalRestrictionsRequest {
+       if p == nil {
+               return nil
+       }
+       return p.DismissalRestrictionsRequest
+}
+
+// GetDismissalRestrictionsRequest returns the DismissalRestrictionsRequest field.
+func (p *PullRequestReviewsEnforcementUpdate) GetDismissalRestrictionsRequest() *DismissalRestrictionsRequest {
+       if p == nil {
+               return nil
+       }
+       return p.DismissalRestrictionsRequest
+}
+
+// GetDismissStaleReviews returns the DismissStaleReviews field if it's non-nil, zero value otherwise.
+func (p *PullRequestReviewsEnforcementUpdate) GetDismissStaleReviews() bool {
+       if p == nil || p.DismissStaleReviews == nil {
+               return false
+       }
+       return *p.DismissStaleReviews
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (p *PullRequestTargetEvent) GetAction() string {
+       if p == nil || p.Action == nil {
+               return ""
+       }
+       return *p.Action
+}
+
+// GetAfter returns the After field if it's non-nil, zero value otherwise.
+func (p *PullRequestTargetEvent) GetAfter() string {
+       if p == nil || p.After == nil {
+               return ""
+       }
+       return *p.After
+}
+
+// GetAssignee returns the Assignee field.
+func (p *PullRequestTargetEvent) GetAssignee() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Assignee
+}
+
+// GetBefore returns the Before field if it's non-nil, zero value otherwise.
+func (p *PullRequestTargetEvent) GetBefore() string {
+       if p == nil || p.Before == nil {
+               return ""
+       }
+       return *p.Before
+}
+
+// GetChanges returns the Changes field.
+func (p *PullRequestTargetEvent) GetChanges() *EditChange {
+       if p == nil {
+               return nil
+       }
+       return p.Changes
+}
+
+// GetInstallation returns the Installation field.
+func (p *PullRequestTargetEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetLabel returns the Label field.
+func (p *PullRequestTargetEvent) GetLabel() *Label {
+       if p == nil {
+               return nil
+       }
+       return p.Label
+}
+
+// GetNumber returns the Number field if it's non-nil, zero value otherwise.
+func (p *PullRequestTargetEvent) GetNumber() int {
+       if p == nil || p.Number == nil {
+               return 0
+       }
+       return *p.Number
+}
+
+// GetOrganization returns the Organization field.
+func (p *PullRequestTargetEvent) GetOrganization() *Organization {
+       if p == nil {
+               return nil
+       }
+       return p.Organization
+}
+
+// GetPullRequest returns the PullRequest field.
+func (p *PullRequestTargetEvent) GetPullRequest() *PullRequest {
+       if p == nil {
+               return nil
+       }
+       return p.PullRequest
+}
+
+// GetRepo returns the Repo field.
+func (p *PullRequestTargetEvent) GetRepo() *Repository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetRequestedReviewer returns the RequestedReviewer field.
+func (p *PullRequestTargetEvent) GetRequestedReviewer() *User {
+       if p == nil {
+               return nil
+       }
+       return p.RequestedReviewer
+}
+
+// GetRequestedTeam returns the RequestedTeam field.
+func (p *PullRequestTargetEvent) GetRequestedTeam() *Team {
+       if p == nil {
+               return nil
+       }
+       return p.RequestedTeam
+}
+
+// GetSender returns the Sender field.
+func (p *PullRequestTargetEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetMergablePulls returns the MergablePulls field if it's non-nil, zero value otherwise.
+func (p *PullStats) GetMergablePulls() int {
+       if p == nil || p.MergablePulls == nil {
+               return 0
+       }
+       return *p.MergablePulls
+}
+
+// GetMergedPulls returns the MergedPulls field if it's non-nil, zero value otherwise.
+func (p *PullStats) GetMergedPulls() int {
+       if p == nil || p.MergedPulls == nil {
+               return 0
+       }
+       return *p.MergedPulls
+}
+
+// GetTotalPulls returns the TotalPulls field if it's non-nil, zero value otherwise.
+func (p *PullStats) GetTotalPulls() int {
+       if p == nil || p.TotalPulls == nil {
+               return 0
+       }
+       return *p.TotalPulls
+}
+
+// GetUnmergablePulls returns the UnmergablePulls field if it's non-nil, zero value otherwise.
+func (p *PullStats) GetUnmergablePulls() int {
+       if p == nil || p.UnmergablePulls == nil {
+               return 0
+       }
+       return *p.UnmergablePulls
+}
+
+// GetCommits returns the Commits field if it's non-nil, zero value otherwise.
+func (p *PunchCard) GetCommits() int {
+       if p == nil || p.Commits == nil {
+               return 0
+       }
+       return *p.Commits
+}
+
+// GetDay returns the Day field if it's non-nil, zero value otherwise.
+func (p *PunchCard) GetDay() int {
+       if p == nil || p.Day == nil {
+               return 0
+       }
+       return *p.Day
+}
+
+// GetHour returns the Hour field if it's non-nil, zero value otherwise.
+func (p *PunchCard) GetHour() int {
+       if p == nil || p.Hour == nil {
+               return 0
+       }
+       return *p.Hour
+}
+
+// GetAfter returns the After field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetAfter() string {
+       if p == nil || p.After == nil {
+               return ""
+       }
+       return *p.After
+}
+
+// GetBaseRef returns the BaseRef field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetBaseRef() string {
+       if p == nil || p.BaseRef == nil {
+               return ""
+       }
+       return *p.BaseRef
+}
+
+// GetBefore returns the Before field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetBefore() string {
+       if p == nil || p.Before == nil {
+               return ""
+       }
+       return *p.Before
+}
+
+// GetCompare returns the Compare field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetCompare() string {
+       if p == nil || p.Compare == nil {
+               return ""
+       }
+       return *p.Compare
+}
+
+// GetCreated returns the Created field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetCreated() bool {
+       if p == nil || p.Created == nil {
+               return false
+       }
+       return *p.Created
+}
+
+// GetDeleted returns the Deleted field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetDeleted() bool {
+       if p == nil || p.Deleted == nil {
+               return false
+       }
+       return *p.Deleted
+}
+
+// GetDistinctSize returns the DistinctSize field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetDistinctSize() int {
+       if p == nil || p.DistinctSize == nil {
+               return 0
+       }
+       return *p.DistinctSize
+}
+
+// GetForced returns the Forced field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetForced() bool {
+       if p == nil || p.Forced == nil {
+               return false
+       }
+       return *p.Forced
+}
+
+// GetHead returns the Head field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetHead() string {
+       if p == nil || p.Head == nil {
+               return ""
+       }
+       return *p.Head
+}
+
+// GetHeadCommit returns the HeadCommit field.
+func (p *PushEvent) GetHeadCommit() *HeadCommit {
+       if p == nil {
+               return nil
+       }
+       return p.HeadCommit
+}
+
+// GetInstallation returns the Installation field.
+func (p *PushEvent) GetInstallation() *Installation {
+       if p == nil {
+               return nil
+       }
+       return p.Installation
+}
+
+// GetPusher returns the Pusher field.
+func (p *PushEvent) GetPusher() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Pusher
+}
+
+// GetPushID returns the PushID field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetPushID() int64 {
+       if p == nil || p.PushID == nil {
+               return 0
+       }
+       return *p.PushID
+}
+
+// GetRef returns the Ref field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetRef() string {
+       if p == nil || p.Ref == nil {
+               return ""
+       }
+       return *p.Ref
+}
+
+// GetRepo returns the Repo field.
+func (p *PushEvent) GetRepo() *PushEventRepository {
+       if p == nil {
+               return nil
+       }
+       return p.Repo
+}
+
+// GetSender returns the Sender field.
+func (p *PushEvent) GetSender() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Sender
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (p *PushEvent) GetSize() int {
+       if p == nil || p.Size == nil {
+               return 0
+       }
+       return *p.Size
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (p *PushEventRepoOwner) GetEmail() string {
+       if p == nil || p.Email == nil {
+               return ""
+       }
+       return *p.Email
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PushEventRepoOwner) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetArchived returns the Archived field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetArchived() bool {
+       if p == nil || p.Archived == nil {
+               return false
+       }
+       return *p.Archived
+}
+
+// GetArchiveURL returns the ArchiveURL field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetArchiveURL() string {
+       if p == nil || p.ArchiveURL == nil {
+               return ""
+       }
+       return *p.ArchiveURL
+}
+
+// GetCloneURL returns the CloneURL field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetCloneURL() string {
+       if p == nil || p.CloneURL == nil {
+               return ""
+       }
+       return *p.CloneURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetCreatedAt() Timestamp {
+       if p == nil || p.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.CreatedAt
+}
+
+// GetDefaultBranch returns the DefaultBranch field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetDefaultBranch() string {
+       if p == nil || p.DefaultBranch == nil {
+               return ""
+       }
+       return *p.DefaultBranch
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetDescription() string {
+       if p == nil || p.Description == nil {
+               return ""
+       }
+       return *p.Description
+}
+
+// GetDisabled returns the Disabled field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetDisabled() bool {
+       if p == nil || p.Disabled == nil {
+               return false
+       }
+       return *p.Disabled
+}
+
+// GetFork returns the Fork field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetFork() bool {
+       if p == nil || p.Fork == nil {
+               return false
+       }
+       return *p.Fork
+}
+
+// GetForksCount returns the ForksCount field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetForksCount() int {
+       if p == nil || p.ForksCount == nil {
+               return 0
+       }
+       return *p.ForksCount
+}
+
+// GetFullName returns the FullName field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetFullName() string {
+       if p == nil || p.FullName == nil {
+               return ""
+       }
+       return *p.FullName
+}
+
+// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetGitURL() string {
+       if p == nil || p.GitURL == nil {
+               return ""
+       }
+       return *p.GitURL
+}
+
+// GetHasDownloads returns the HasDownloads field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetHasDownloads() bool {
+       if p == nil || p.HasDownloads == nil {
+               return false
+       }
+       return *p.HasDownloads
+}
+
+// GetHasIssues returns the HasIssues field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetHasIssues() bool {
+       if p == nil || p.HasIssues == nil {
+               return false
+       }
+       return *p.HasIssues
+}
+
+// GetHasPages returns the HasPages field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetHasPages() bool {
+       if p == nil || p.HasPages == nil {
+               return false
+       }
+       return *p.HasPages
+}
+
+// GetHasWiki returns the HasWiki field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetHasWiki() bool {
+       if p == nil || p.HasWiki == nil {
+               return false
+       }
+       return *p.HasWiki
+}
+
+// GetHomepage returns the Homepage field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetHomepage() string {
+       if p == nil || p.Homepage == nil {
+               return ""
+       }
+       return *p.Homepage
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetHTMLURL() string {
+       if p == nil || p.HTMLURL == nil {
+               return ""
+       }
+       return *p.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetID() int64 {
+       if p == nil || p.ID == nil {
+               return 0
+       }
+       return *p.ID
+}
+
+// GetLanguage returns the Language field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetLanguage() string {
+       if p == nil || p.Language == nil {
+               return ""
+       }
+       return *p.Language
+}
+
+// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetMasterBranch() string {
+       if p == nil || p.MasterBranch == nil {
+               return ""
+       }
+       return *p.MasterBranch
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetName() string {
+       if p == nil || p.Name == nil {
+               return ""
+       }
+       return *p.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetNodeID() string {
+       if p == nil || p.NodeID == nil {
+               return ""
+       }
+       return *p.NodeID
+}
+
+// GetOpenIssuesCount returns the OpenIssuesCount field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetOpenIssuesCount() int {
+       if p == nil || p.OpenIssuesCount == nil {
+               return 0
+       }
+       return *p.OpenIssuesCount
+}
+
+// GetOrganization returns the Organization field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetOrganization() string {
+       if p == nil || p.Organization == nil {
+               return ""
+       }
+       return *p.Organization
+}
+
+// GetOwner returns the Owner field.
+func (p *PushEventRepository) GetOwner() *User {
+       if p == nil {
+               return nil
+       }
+       return p.Owner
+}
+
+// GetPrivate returns the Private field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetPrivate() bool {
+       if p == nil || p.Private == nil {
+               return false
+       }
+       return *p.Private
+}
+
+// GetPullsURL returns the PullsURL field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetPullsURL() string {
+       if p == nil || p.PullsURL == nil {
+               return ""
+       }
+       return *p.PullsURL
+}
+
+// GetPushedAt returns the PushedAt field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetPushedAt() Timestamp {
+       if p == nil || p.PushedAt == nil {
+               return Timestamp{}
+       }
+       return *p.PushedAt
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetSize() int {
+       if p == nil || p.Size == nil {
+               return 0
+       }
+       return *p.Size
+}
+
+// GetSSHURL returns the SSHURL field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetSSHURL() string {
+       if p == nil || p.SSHURL == nil {
+               return ""
+       }
+       return *p.SSHURL
+}
+
+// GetStargazersCount returns the StargazersCount field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetStargazersCount() int {
+       if p == nil || p.StargazersCount == nil {
+               return 0
+       }
+       return *p.StargazersCount
+}
+
+// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetStatusesURL() string {
+       if p == nil || p.StatusesURL == nil {
+               return ""
+       }
+       return *p.StatusesURL
+}
+
+// GetSVNURL returns the SVNURL field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetSVNURL() string {
+       if p == nil || p.SVNURL == nil {
+               return ""
+       }
+       return *p.SVNURL
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetUpdatedAt() Timestamp {
+       if p == nil || p.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *p.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetURL() string {
+       if p == nil || p.URL == nil {
+               return ""
+       }
+       return *p.URL
+}
+
+// GetWatchersCount returns the WatchersCount field if it's non-nil, zero value otherwise.
+func (p *PushEventRepository) GetWatchersCount() int {
+       if p == nil || p.WatchersCount == nil {
+               return 0
+       }
+       return *p.WatchersCount
+}
+
+// GetCore returns the Core field.
+func (r *RateLimits) GetCore() *Rate {
+       if r == nil {
+               return nil
+       }
+       return r.Core
+}
+
+// GetSearch returns the Search field.
+func (r *RateLimits) GetSearch() *Rate {
+       if r == nil {
+               return nil
+       }
+       return r.Search
+}
+
+// GetContent returns the Content field if it's non-nil, zero value otherwise.
+func (r *Reaction) GetContent() string {
+       if r == nil || r.Content == nil {
+               return ""
+       }
+       return *r.Content
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *Reaction) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (r *Reaction) GetNodeID() string {
+       if r == nil || r.NodeID == nil {
+               return ""
+       }
+       return *r.NodeID
+}
+
+// GetUser returns the User field.
+func (r *Reaction) GetUser() *User {
+       if r == nil {
+               return nil
+       }
+       return r.User
+}
+
+// GetConfused returns the Confused field if it's non-nil, zero value otherwise.
+func (r *Reactions) GetConfused() int {
+       if r == nil || r.Confused == nil {
+               return 0
+       }
+       return *r.Confused
+}
+
+// GetEyes returns the Eyes field if it's non-nil, zero value otherwise.
+func (r *Reactions) GetEyes() int {
+       if r == nil || r.Eyes == nil {
+               return 0
+       }
+       return *r.Eyes
+}
+
+// GetHeart returns the Heart field if it's non-nil, zero value otherwise.
+func (r *Reactions) GetHeart() int {
+       if r == nil || r.Heart == nil {
+               return 0
+       }
+       return *r.Heart
+}
+
+// GetHooray returns the Hooray field if it's non-nil, zero value otherwise.
+func (r *Reactions) GetHooray() int {
+       if r == nil || r.Hooray == nil {
+               return 0
+       }
+       return *r.Hooray
+}
+
+// GetLaugh returns the Laugh field if it's non-nil, zero value otherwise.
+func (r *Reactions) GetLaugh() int {
+       if r == nil || r.Laugh == nil {
+               return 0
+       }
+       return *r.Laugh
+}
+
+// GetMinusOne returns the MinusOne field if it's non-nil, zero value otherwise.
+func (r *Reactions) GetMinusOne() int {
+       if r == nil || r.MinusOne == nil {
+               return 0
+       }
+       return *r.MinusOne
+}
+
+// GetPlusOne returns the PlusOne field if it's non-nil, zero value otherwise.
+func (r *Reactions) GetPlusOne() int {
+       if r == nil || r.PlusOne == nil {
+               return 0
+       }
+       return *r.PlusOne
+}
+
+// GetRocket returns the Rocket field if it's non-nil, zero value otherwise.
+func (r *Reactions) GetRocket() int {
+       if r == nil || r.Rocket == nil {
+               return 0
+       }
+       return *r.Rocket
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (r *Reactions) GetTotalCount() int {
+       if r == nil || r.TotalCount == nil {
+               return 0
+       }
+       return *r.TotalCount
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *Reactions) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (r *Reference) GetNodeID() string {
+       if r == nil || r.NodeID == nil {
+               return ""
+       }
+       return *r.NodeID
+}
+
+// GetObject returns the Object field.
+func (r *Reference) GetObject() *GitObject {
+       if r == nil {
+               return nil
+       }
+       return r.Object
+}
+
+// GetRef returns the Ref field if it's non-nil, zero value otherwise.
+func (r *Reference) GetRef() string {
+       if r == nil || r.Ref == nil {
+               return ""
+       }
+       return *r.Ref
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *Reference) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
+func (r *RegistrationToken) GetExpiresAt() Timestamp {
+       if r == nil || r.ExpiresAt == nil {
+               return Timestamp{}
+       }
+       return *r.ExpiresAt
+}
+
+// GetToken returns the Token field if it's non-nil, zero value otherwise.
+func (r *RegistrationToken) GetToken() string {
+       if r == nil || r.Token == nil {
+               return ""
+       }
+       return *r.Token
+}
+
+// GetBrowserDownloadURL returns the BrowserDownloadURL field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetBrowserDownloadURL() string {
+       if r == nil || r.BrowserDownloadURL == nil {
+               return ""
+       }
+       return *r.BrowserDownloadURL
+}
+
+// GetContentType returns the ContentType field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetContentType() string {
+       if r == nil || r.ContentType == nil {
+               return ""
+       }
+       return *r.ContentType
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetCreatedAt() Timestamp {
+       if r == nil || r.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *r.CreatedAt
+}
+
+// GetDownloadCount returns the DownloadCount field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetDownloadCount() int {
+       if r == nil || r.DownloadCount == nil {
+               return 0
+       }
+       return *r.DownloadCount
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetLabel returns the Label field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetLabel() string {
+       if r == nil || r.Label == nil {
+               return ""
+       }
+       return *r.Label
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetName() string {
+       if r == nil || r.Name == nil {
+               return ""
+       }
+       return *r.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetNodeID() string {
+       if r == nil || r.NodeID == nil {
+               return ""
+       }
+       return *r.NodeID
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetSize() int {
+       if r == nil || r.Size == nil {
+               return 0
+       }
+       return *r.Size
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetState() string {
+       if r == nil || r.State == nil {
+               return ""
+       }
+       return *r.State
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetUpdatedAt() Timestamp {
+       if r == nil || r.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *r.UpdatedAt
+}
+
+// GetUploader returns the Uploader field.
+func (r *ReleaseAsset) GetUploader() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Uploader
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *ReleaseAsset) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (r *ReleaseEvent) GetAction() string {
+       if r == nil || r.Action == nil {
+               return ""
+       }
+       return *r.Action
+}
+
+// GetInstallation returns the Installation field.
+func (r *ReleaseEvent) GetInstallation() *Installation {
+       if r == nil {
+               return nil
+       }
+       return r.Installation
+}
+
+// GetRelease returns the Release field.
+func (r *ReleaseEvent) GetRelease() *RepositoryRelease {
+       if r == nil {
+               return nil
+       }
+       return r.Release
+}
+
+// GetRepo returns the Repo field.
+func (r *ReleaseEvent) GetRepo() *Repository {
+       if r == nil {
+               return nil
+       }
+       return r.Repo
+}
+
+// GetSender returns the Sender field.
+func (r *ReleaseEvent) GetSender() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Sender
+}
+
+// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise.
+func (r *RemoveToken) GetExpiresAt() Timestamp {
+       if r == nil || r.ExpiresAt == nil {
+               return Timestamp{}
+       }
+       return *r.ExpiresAt
+}
+
+// GetToken returns the Token field if it's non-nil, zero value otherwise.
+func (r *RemoveToken) GetToken() string {
+       if r == nil || r.Token == nil {
+               return ""
+       }
+       return *r.Token
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (r *Rename) GetFrom() string {
+       if r == nil || r.From == nil {
+               return ""
+       }
+       return *r.From
+}
+
+// GetTo returns the To field if it's non-nil, zero value otherwise.
+func (r *Rename) GetTo() string {
+       if r == nil || r.To == nil {
+               return ""
+       }
+       return *r.To
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (r *RenameOrgResponse) GetMessage() string {
+       if r == nil || r.Message == nil {
+               return ""
+       }
+       return *r.Message
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *RenameOrgResponse) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
+func (r *RepositoriesSearchResult) GetIncompleteResults() bool {
+       if r == nil || r.IncompleteResults == nil {
+               return false
+       }
+       return *r.IncompleteResults
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (r *RepositoriesSearchResult) GetTotal() int {
+       if r == nil || r.Total == nil {
+               return 0
+       }
+       return *r.Total
+}
+
+// GetAllowMergeCommit returns the AllowMergeCommit field if it's non-nil, zero value otherwise.
+func (r *Repository) GetAllowMergeCommit() bool {
+       if r == nil || r.AllowMergeCommit == nil {
+               return false
+       }
+       return *r.AllowMergeCommit
+}
+
+// GetAllowRebaseMerge returns the AllowRebaseMerge field if it's non-nil, zero value otherwise.
+func (r *Repository) GetAllowRebaseMerge() bool {
+       if r == nil || r.AllowRebaseMerge == nil {
+               return false
+       }
+       return *r.AllowRebaseMerge
+}
+
+// GetAllowSquashMerge returns the AllowSquashMerge field if it's non-nil, zero value otherwise.
+func (r *Repository) GetAllowSquashMerge() bool {
+       if r == nil || r.AllowSquashMerge == nil {
+               return false
+       }
+       return *r.AllowSquashMerge
+}
+
+// GetArchived returns the Archived field if it's non-nil, zero value otherwise.
+func (r *Repository) GetArchived() bool {
+       if r == nil || r.Archived == nil {
+               return false
+       }
+       return *r.Archived
+}
+
+// GetArchiveURL returns the ArchiveURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetArchiveURL() string {
+       if r == nil || r.ArchiveURL == nil {
+               return ""
+       }
+       return *r.ArchiveURL
+}
+
+// GetAssigneesURL returns the AssigneesURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetAssigneesURL() string {
+       if r == nil || r.AssigneesURL == nil {
+               return ""
+       }
+       return *r.AssigneesURL
+}
+
+// GetAutoInit returns the AutoInit field if it's non-nil, zero value otherwise.
+func (r *Repository) GetAutoInit() bool {
+       if r == nil || r.AutoInit == nil {
+               return false
+       }
+       return *r.AutoInit
+}
+
+// GetBlobsURL returns the BlobsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetBlobsURL() string {
+       if r == nil || r.BlobsURL == nil {
+               return ""
+       }
+       return *r.BlobsURL
+}
+
+// GetBranchesURL returns the BranchesURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetBranchesURL() string {
+       if r == nil || r.BranchesURL == nil {
+               return ""
+       }
+       return *r.BranchesURL
+}
+
+// GetCloneURL returns the CloneURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetCloneURL() string {
+       if r == nil || r.CloneURL == nil {
+               return ""
+       }
+       return *r.CloneURL
+}
+
+// GetCodeOfConduct returns the CodeOfConduct field.
+func (r *Repository) GetCodeOfConduct() *CodeOfConduct {
+       if r == nil {
+               return nil
+       }
+       return r.CodeOfConduct
+}
+
+// GetCollaboratorsURL returns the CollaboratorsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetCollaboratorsURL() string {
+       if r == nil || r.CollaboratorsURL == nil {
+               return ""
+       }
+       return *r.CollaboratorsURL
+}
+
+// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetCommentsURL() string {
+       if r == nil || r.CommentsURL == nil {
+               return ""
+       }
+       return *r.CommentsURL
+}
+
+// GetCommitsURL returns the CommitsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetCommitsURL() string {
+       if r == nil || r.CommitsURL == nil {
+               return ""
+       }
+       return *r.CommitsURL
+}
+
+// GetCompareURL returns the CompareURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetCompareURL() string {
+       if r == nil || r.CompareURL == nil {
+               return ""
+       }
+       return *r.CompareURL
+}
+
+// GetContentsURL returns the ContentsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetContentsURL() string {
+       if r == nil || r.ContentsURL == nil {
+               return ""
+       }
+       return *r.ContentsURL
+}
+
+// GetContributorsURL returns the ContributorsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetContributorsURL() string {
+       if r == nil || r.ContributorsURL == nil {
+               return ""
+       }
+       return *r.ContributorsURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (r *Repository) GetCreatedAt() Timestamp {
+       if r == nil || r.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *r.CreatedAt
+}
+
+// GetDefaultBranch returns the DefaultBranch field if it's non-nil, zero value otherwise.
+func (r *Repository) GetDefaultBranch() string {
+       if r == nil || r.DefaultBranch == nil {
+               return ""
+       }
+       return *r.DefaultBranch
+}
+
+// GetDeleteBranchOnMerge returns the DeleteBranchOnMerge field if it's non-nil, zero value otherwise.
+func (r *Repository) GetDeleteBranchOnMerge() bool {
+       if r == nil || r.DeleteBranchOnMerge == nil {
+               return false
+       }
+       return *r.DeleteBranchOnMerge
+}
+
+// GetDeploymentsURL returns the DeploymentsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetDeploymentsURL() string {
+       if r == nil || r.DeploymentsURL == nil {
+               return ""
+       }
+       return *r.DeploymentsURL
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (r *Repository) GetDescription() string {
+       if r == nil || r.Description == nil {
+               return ""
+       }
+       return *r.Description
+}
+
+// GetDisabled returns the Disabled field if it's non-nil, zero value otherwise.
+func (r *Repository) GetDisabled() bool {
+       if r == nil || r.Disabled == nil {
+               return false
+       }
+       return *r.Disabled
+}
+
+// GetDownloadsURL returns the DownloadsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetDownloadsURL() string {
+       if r == nil || r.DownloadsURL == nil {
+               return ""
+       }
+       return *r.DownloadsURL
+}
+
+// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetEventsURL() string {
+       if r == nil || r.EventsURL == nil {
+               return ""
+       }
+       return *r.EventsURL
+}
+
+// GetFork returns the Fork field if it's non-nil, zero value otherwise.
+func (r *Repository) GetFork() bool {
+       if r == nil || r.Fork == nil {
+               return false
+       }
+       return *r.Fork
+}
+
+// GetForksCount returns the ForksCount field if it's non-nil, zero value otherwise.
+func (r *Repository) GetForksCount() int {
+       if r == nil || r.ForksCount == nil {
+               return 0
+       }
+       return *r.ForksCount
+}
+
+// GetForksURL returns the ForksURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetForksURL() string {
+       if r == nil || r.ForksURL == nil {
+               return ""
+       }
+       return *r.ForksURL
+}
+
+// GetFullName returns the FullName field if it's non-nil, zero value otherwise.
+func (r *Repository) GetFullName() string {
+       if r == nil || r.FullName == nil {
+               return ""
+       }
+       return *r.FullName
+}
+
+// GetGitCommitsURL returns the GitCommitsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetGitCommitsURL() string {
+       if r == nil || r.GitCommitsURL == nil {
+               return ""
+       }
+       return *r.GitCommitsURL
+}
+
+// GetGitignoreTemplate returns the GitignoreTemplate field if it's non-nil, zero value otherwise.
+func (r *Repository) GetGitignoreTemplate() string {
+       if r == nil || r.GitignoreTemplate == nil {
+               return ""
+       }
+       return *r.GitignoreTemplate
+}
+
+// GetGitRefsURL returns the GitRefsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetGitRefsURL() string {
+       if r == nil || r.GitRefsURL == nil {
+               return ""
+       }
+       return *r.GitRefsURL
+}
+
+// GetGitTagsURL returns the GitTagsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetGitTagsURL() string {
+       if r == nil || r.GitTagsURL == nil {
+               return ""
+       }
+       return *r.GitTagsURL
+}
+
+// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetGitURL() string {
+       if r == nil || r.GitURL == nil {
+               return ""
+       }
+       return *r.GitURL
+}
+
+// GetHasDownloads returns the HasDownloads field if it's non-nil, zero value otherwise.
+func (r *Repository) GetHasDownloads() bool {
+       if r == nil || r.HasDownloads == nil {
+               return false
+       }
+       return *r.HasDownloads
+}
+
+// GetHasIssues returns the HasIssues field if it's non-nil, zero value otherwise.
+func (r *Repository) GetHasIssues() bool {
+       if r == nil || r.HasIssues == nil {
+               return false
+       }
+       return *r.HasIssues
+}
+
+// GetHasPages returns the HasPages field if it's non-nil, zero value otherwise.
+func (r *Repository) GetHasPages() bool {
+       if r == nil || r.HasPages == nil {
+               return false
+       }
+       return *r.HasPages
+}
+
+// GetHasProjects returns the HasProjects field if it's non-nil, zero value otherwise.
+func (r *Repository) GetHasProjects() bool {
+       if r == nil || r.HasProjects == nil {
+               return false
+       }
+       return *r.HasProjects
+}
+
+// GetHasWiki returns the HasWiki field if it's non-nil, zero value otherwise.
+func (r *Repository) GetHasWiki() bool {
+       if r == nil || r.HasWiki == nil {
+               return false
+       }
+       return *r.HasWiki
+}
+
+// GetHomepage returns the Homepage field if it's non-nil, zero value otherwise.
+func (r *Repository) GetHomepage() string {
+       if r == nil || r.Homepage == nil {
+               return ""
+       }
+       return *r.Homepage
+}
+
+// GetHooksURL returns the HooksURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetHooksURL() string {
+       if r == nil || r.HooksURL == nil {
+               return ""
+       }
+       return *r.HooksURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetHTMLURL() string {
+       if r == nil || r.HTMLURL == nil {
+               return ""
+       }
+       return *r.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *Repository) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetIssueCommentURL returns the IssueCommentURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetIssueCommentURL() string {
+       if r == nil || r.IssueCommentURL == nil {
+               return ""
+       }
+       return *r.IssueCommentURL
+}
+
+// GetIssueEventsURL returns the IssueEventsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetIssueEventsURL() string {
+       if r == nil || r.IssueEventsURL == nil {
+               return ""
+       }
+       return *r.IssueEventsURL
+}
+
+// GetIssuesURL returns the IssuesURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetIssuesURL() string {
+       if r == nil || r.IssuesURL == nil {
+               return ""
+       }
+       return *r.IssuesURL
+}
+
+// GetIsTemplate returns the IsTemplate field if it's non-nil, zero value otherwise.
+func (r *Repository) GetIsTemplate() bool {
+       if r == nil || r.IsTemplate == nil {
+               return false
+       }
+       return *r.IsTemplate
+}
+
+// GetKeysURL returns the KeysURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetKeysURL() string {
+       if r == nil || r.KeysURL == nil {
+               return ""
+       }
+       return *r.KeysURL
+}
+
+// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetLabelsURL() string {
+       if r == nil || r.LabelsURL == nil {
+               return ""
+       }
+       return *r.LabelsURL
+}
+
+// GetLanguage returns the Language field if it's non-nil, zero value otherwise.
+func (r *Repository) GetLanguage() string {
+       if r == nil || r.Language == nil {
+               return ""
+       }
+       return *r.Language
+}
+
+// GetLanguagesURL returns the LanguagesURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetLanguagesURL() string {
+       if r == nil || r.LanguagesURL == nil {
+               return ""
+       }
+       return *r.LanguagesURL
+}
+
+// GetLicense returns the License field.
+func (r *Repository) GetLicense() *License {
+       if r == nil {
+               return nil
+       }
+       return r.License
+}
+
+// GetLicenseTemplate returns the LicenseTemplate field if it's non-nil, zero value otherwise.
+func (r *Repository) GetLicenseTemplate() string {
+       if r == nil || r.LicenseTemplate == nil {
+               return ""
+       }
+       return *r.LicenseTemplate
+}
+
+// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise.
+func (r *Repository) GetMasterBranch() string {
+       if r == nil || r.MasterBranch == nil {
+               return ""
+       }
+       return *r.MasterBranch
+}
+
+// GetMergesURL returns the MergesURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetMergesURL() string {
+       if r == nil || r.MergesURL == nil {
+               return ""
+       }
+       return *r.MergesURL
+}
+
+// GetMilestonesURL returns the MilestonesURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetMilestonesURL() string {
+       if r == nil || r.MilestonesURL == nil {
+               return ""
+       }
+       return *r.MilestonesURL
+}
+
+// GetMirrorURL returns the MirrorURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetMirrorURL() string {
+       if r == nil || r.MirrorURL == nil {
+               return ""
+       }
+       return *r.MirrorURL
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (r *Repository) GetName() string {
+       if r == nil || r.Name == nil {
+               return ""
+       }
+       return *r.Name
+}
+
+// GetNetworkCount returns the NetworkCount field if it's non-nil, zero value otherwise.
+func (r *Repository) GetNetworkCount() int {
+       if r == nil || r.NetworkCount == nil {
+               return 0
+       }
+       return *r.NetworkCount
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (r *Repository) GetNodeID() string {
+       if r == nil || r.NodeID == nil {
+               return ""
+       }
+       return *r.NodeID
+}
+
+// GetNotificationsURL returns the NotificationsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetNotificationsURL() string {
+       if r == nil || r.NotificationsURL == nil {
+               return ""
+       }
+       return *r.NotificationsURL
+}
+
+// GetOpenIssues returns the OpenIssues field if it's non-nil, zero value otherwise.
+func (r *Repository) GetOpenIssues() int {
+       if r == nil || r.OpenIssues == nil {
+               return 0
+       }
+       return *r.OpenIssues
+}
+
+// GetOpenIssuesCount returns the OpenIssuesCount field if it's non-nil, zero value otherwise.
+func (r *Repository) GetOpenIssuesCount() int {
+       if r == nil || r.OpenIssuesCount == nil {
+               return 0
+       }
+       return *r.OpenIssuesCount
+}
+
+// GetOrganization returns the Organization field.
+func (r *Repository) GetOrganization() *Organization {
+       if r == nil {
+               return nil
+       }
+       return r.Organization
+}
+
+// GetOwner returns the Owner field.
+func (r *Repository) GetOwner() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Owner
+}
+
+// GetParent returns the Parent field.
+func (r *Repository) GetParent() *Repository {
+       if r == nil {
+               return nil
+       }
+       return r.Parent
+}
+
+// GetPermissions returns the Permissions map if it's non-nil, an empty map otherwise.
+func (r *Repository) GetPermissions() map[string]bool {
+       if r == nil || r.Permissions == nil {
+               return map[string]bool{}
+       }
+       return r.Permissions
+}
+
+// GetPrivate returns the Private field if it's non-nil, zero value otherwise.
+func (r *Repository) GetPrivate() bool {
+       if r == nil || r.Private == nil {
+               return false
+       }
+       return *r.Private
+}
+
+// GetPullsURL returns the PullsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetPullsURL() string {
+       if r == nil || r.PullsURL == nil {
+               return ""
+       }
+       return *r.PullsURL
+}
+
+// GetPushedAt returns the PushedAt field if it's non-nil, zero value otherwise.
+func (r *Repository) GetPushedAt() Timestamp {
+       if r == nil || r.PushedAt == nil {
+               return Timestamp{}
+       }
+       return *r.PushedAt
+}
+
+// GetReleasesURL returns the ReleasesURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetReleasesURL() string {
+       if r == nil || r.ReleasesURL == nil {
+               return ""
+       }
+       return *r.ReleasesURL
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (r *Repository) GetSize() int {
+       if r == nil || r.Size == nil {
+               return 0
+       }
+       return *r.Size
+}
+
+// GetSource returns the Source field.
+func (r *Repository) GetSource() *Repository {
+       if r == nil {
+               return nil
+       }
+       return r.Source
+}
+
+// GetSSHURL returns the SSHURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetSSHURL() string {
+       if r == nil || r.SSHURL == nil {
+               return ""
+       }
+       return *r.SSHURL
+}
+
+// GetStargazersCount returns the StargazersCount field if it's non-nil, zero value otherwise.
+func (r *Repository) GetStargazersCount() int {
+       if r == nil || r.StargazersCount == nil {
+               return 0
+       }
+       return *r.StargazersCount
+}
+
+// GetStargazersURL returns the StargazersURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetStargazersURL() string {
+       if r == nil || r.StargazersURL == nil {
+               return ""
+       }
+       return *r.StargazersURL
+}
+
+// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetStatusesURL() string {
+       if r == nil || r.StatusesURL == nil {
+               return ""
+       }
+       return *r.StatusesURL
+}
+
+// GetSubscribersCount returns the SubscribersCount field if it's non-nil, zero value otherwise.
+func (r *Repository) GetSubscribersCount() int {
+       if r == nil || r.SubscribersCount == nil {
+               return 0
+       }
+       return *r.SubscribersCount
+}
+
+// GetSubscribersURL returns the SubscribersURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetSubscribersURL() string {
+       if r == nil || r.SubscribersURL == nil {
+               return ""
+       }
+       return *r.SubscribersURL
+}
+
+// GetSubscriptionURL returns the SubscriptionURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetSubscriptionURL() string {
+       if r == nil || r.SubscriptionURL == nil {
+               return ""
+       }
+       return *r.SubscriptionURL
+}
+
+// GetSVNURL returns the SVNURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetSVNURL() string {
+       if r == nil || r.SVNURL == nil {
+               return ""
+       }
+       return *r.SVNURL
+}
+
+// GetTagsURL returns the TagsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetTagsURL() string {
+       if r == nil || r.TagsURL == nil {
+               return ""
+       }
+       return *r.TagsURL
+}
+
+// GetTeamID returns the TeamID field if it's non-nil, zero value otherwise.
+func (r *Repository) GetTeamID() int64 {
+       if r == nil || r.TeamID == nil {
+               return 0
+       }
+       return *r.TeamID
+}
+
+// GetTeamsURL returns the TeamsURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetTeamsURL() string {
+       if r == nil || r.TeamsURL == nil {
+               return ""
+       }
+       return *r.TeamsURL
+}
+
+// GetTemplateRepository returns the TemplateRepository field.
+func (r *Repository) GetTemplateRepository() *Repository {
+       if r == nil {
+               return nil
+       }
+       return r.TemplateRepository
+}
+
+// GetTreesURL returns the TreesURL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetTreesURL() string {
+       if r == nil || r.TreesURL == nil {
+               return ""
+       }
+       return *r.TreesURL
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (r *Repository) GetUpdatedAt() Timestamp {
+       if r == nil || r.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *r.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *Repository) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetVisibility returns the Visibility field if it's non-nil, zero value otherwise.
+func (r *Repository) GetVisibility() string {
+       if r == nil || r.Visibility == nil {
+               return ""
+       }
+       return *r.Visibility
+}
+
+// GetWatchers returns the Watchers field if it's non-nil, zero value otherwise.
+func (r *Repository) GetWatchers() int {
+       if r == nil || r.Watchers == nil {
+               return 0
+       }
+       return *r.Watchers
+}
+
+// GetWatchersCount returns the WatchersCount field if it's non-nil, zero value otherwise.
+func (r *Repository) GetWatchersCount() int {
+       if r == nil || r.WatchersCount == nil {
+               return 0
+       }
+       return *r.WatchersCount
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (r *RepositoryComment) GetBody() string {
+       if r == nil || r.Body == nil {
+               return ""
+       }
+       return *r.Body
+}
+
+// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
+func (r *RepositoryComment) GetCommitID() string {
+       if r == nil || r.CommitID == nil {
+               return ""
+       }
+       return *r.CommitID
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (r *RepositoryComment) GetCreatedAt() time.Time {
+       if r == nil || r.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *r.CreatedAt
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryComment) GetHTMLURL() string {
+       if r == nil || r.HTMLURL == nil {
+               return ""
+       }
+       return *r.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *RepositoryComment) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (r *RepositoryComment) GetNodeID() string {
+       if r == nil || r.NodeID == nil {
+               return ""
+       }
+       return *r.NodeID
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (r *RepositoryComment) GetPath() string {
+       if r == nil || r.Path == nil {
+               return ""
+       }
+       return *r.Path
+}
+
+// GetPosition returns the Position field if it's non-nil, zero value otherwise.
+func (r *RepositoryComment) GetPosition() int {
+       if r == nil || r.Position == nil {
+               return 0
+       }
+       return *r.Position
+}
+
+// GetReactions returns the Reactions field.
+func (r *RepositoryComment) GetReactions() *Reactions {
+       if r == nil {
+               return nil
+       }
+       return r.Reactions
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (r *RepositoryComment) GetUpdatedAt() time.Time {
+       if r == nil || r.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *r.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *RepositoryComment) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetUser returns the User field.
+func (r *RepositoryComment) GetUser() *User {
+       if r == nil {
+               return nil
+       }
+       return r.User
+}
+
+// GetAuthor returns the Author field.
+func (r *RepositoryCommit) GetAuthor() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Author
+}
+
+// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryCommit) GetCommentsURL() string {
+       if r == nil || r.CommentsURL == nil {
+               return ""
+       }
+       return *r.CommentsURL
+}
+
+// GetCommit returns the Commit field.
+func (r *RepositoryCommit) GetCommit() *Commit {
+       if r == nil {
+               return nil
+       }
+       return r.Commit
+}
+
+// GetCommitter returns the Committer field.
+func (r *RepositoryCommit) GetCommitter() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Committer
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryCommit) GetHTMLURL() string {
+       if r == nil || r.HTMLURL == nil {
+               return ""
+       }
+       return *r.HTMLURL
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (r *RepositoryCommit) GetNodeID() string {
+       if r == nil || r.NodeID == nil {
+               return ""
+       }
+       return *r.NodeID
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (r *RepositoryCommit) GetSHA() string {
+       if r == nil || r.SHA == nil {
+               return ""
+       }
+       return *r.SHA
+}
+
+// GetStats returns the Stats field.
+func (r *RepositoryCommit) GetStats() *CommitStats {
+       if r == nil {
+               return nil
+       }
+       return r.Stats
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *RepositoryCommit) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetDownloadURL() string {
+       if r == nil || r.DownloadURL == nil {
+               return ""
+       }
+       return *r.DownloadURL
+}
+
+// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetEncoding() string {
+       if r == nil || r.Encoding == nil {
+               return ""
+       }
+       return *r.Encoding
+}
+
+// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetGitURL() string {
+       if r == nil || r.GitURL == nil {
+               return ""
+       }
+       return *r.GitURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetHTMLURL() string {
+       if r == nil || r.HTMLURL == nil {
+               return ""
+       }
+       return *r.HTMLURL
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetName() string {
+       if r == nil || r.Name == nil {
+               return ""
+       }
+       return *r.Name
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetPath() string {
+       if r == nil || r.Path == nil {
+               return ""
+       }
+       return *r.Path
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetSHA() string {
+       if r == nil || r.SHA == nil {
+               return ""
+       }
+       return *r.SHA
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetSize() int {
+       if r == nil || r.Size == nil {
+               return 0
+       }
+       return *r.Size
+}
+
+// GetTarget returns the Target field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetTarget() string {
+       if r == nil || r.Target == nil {
+               return ""
+       }
+       return *r.Target
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetType() string {
+       if r == nil || r.Type == nil {
+               return ""
+       }
+       return *r.Type
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *RepositoryContent) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetAuthor returns the Author field.
+func (r *RepositoryContentFileOptions) GetAuthor() *CommitAuthor {
+       if r == nil {
+               return nil
+       }
+       return r.Author
+}
+
+// GetBranch returns the Branch field if it's non-nil, zero value otherwise.
+func (r *RepositoryContentFileOptions) GetBranch() string {
+       if r == nil || r.Branch == nil {
+               return ""
+       }
+       return *r.Branch
+}
+
+// GetCommitter returns the Committer field.
+func (r *RepositoryContentFileOptions) GetCommitter() *CommitAuthor {
+       if r == nil {
+               return nil
+       }
+       return r.Committer
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (r *RepositoryContentFileOptions) GetMessage() string {
+       if r == nil || r.Message == nil {
+               return ""
+       }
+       return *r.Message
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (r *RepositoryContentFileOptions) GetSHA() string {
+       if r == nil || r.SHA == nil {
+               return ""
+       }
+       return *r.SHA
+}
+
+// GetContent returns the Content field.
+func (r *RepositoryContentResponse) GetContent() *RepositoryContent {
+       if r == nil {
+               return nil
+       }
+       return r.Content
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (r *RepositoryDispatchEvent) GetAction() string {
+       if r == nil || r.Action == nil {
+               return ""
+       }
+       return *r.Action
+}
+
+// GetBranch returns the Branch field if it's non-nil, zero value otherwise.
+func (r *RepositoryDispatchEvent) GetBranch() string {
+       if r == nil || r.Branch == nil {
+               return ""
+       }
+       return *r.Branch
+}
+
+// GetInstallation returns the Installation field.
+func (r *RepositoryDispatchEvent) GetInstallation() *Installation {
+       if r == nil {
+               return nil
+       }
+       return r.Installation
+}
+
+// GetOrg returns the Org field.
+func (r *RepositoryDispatchEvent) GetOrg() *Organization {
+       if r == nil {
+               return nil
+       }
+       return r.Org
+}
+
+// GetRepo returns the Repo field.
+func (r *RepositoryDispatchEvent) GetRepo() *Repository {
+       if r == nil {
+               return nil
+       }
+       return r.Repo
+}
+
+// GetSender returns the Sender field.
+func (r *RepositoryDispatchEvent) GetSender() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Sender
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (r *RepositoryEvent) GetAction() string {
+       if r == nil || r.Action == nil {
+               return ""
+       }
+       return *r.Action
+}
+
+// GetInstallation returns the Installation field.
+func (r *RepositoryEvent) GetInstallation() *Installation {
+       if r == nil {
+               return nil
+       }
+       return r.Installation
+}
+
+// GetOrg returns the Org field.
+func (r *RepositoryEvent) GetOrg() *Organization {
+       if r == nil {
+               return nil
+       }
+       return r.Org
+}
+
+// GetRepo returns the Repo field.
+func (r *RepositoryEvent) GetRepo() *Repository {
+       if r == nil {
+               return nil
+       }
+       return r.Repo
+}
+
+// GetSender returns the Sender field.
+func (r *RepositoryEvent) GetSender() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Sender
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (r *RepositoryInvitation) GetCreatedAt() Timestamp {
+       if r == nil || r.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *r.CreatedAt
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryInvitation) GetHTMLURL() string {
+       if r == nil || r.HTMLURL == nil {
+               return ""
+       }
+       return *r.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *RepositoryInvitation) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetInvitee returns the Invitee field.
+func (r *RepositoryInvitation) GetInvitee() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Invitee
+}
+
+// GetInviter returns the Inviter field.
+func (r *RepositoryInvitation) GetInviter() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Inviter
+}
+
+// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise.
+func (r *RepositoryInvitation) GetPermissions() string {
+       if r == nil || r.Permissions == nil {
+               return ""
+       }
+       return *r.Permissions
+}
+
+// GetRepo returns the Repo field.
+func (r *RepositoryInvitation) GetRepo() *Repository {
+       if r == nil {
+               return nil
+       }
+       return r.Repo
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *RepositoryInvitation) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetContent returns the Content field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetContent() string {
+       if r == nil || r.Content == nil {
+               return ""
+       }
+       return *r.Content
+}
+
+// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetDownloadURL() string {
+       if r == nil || r.DownloadURL == nil {
+               return ""
+       }
+       return *r.DownloadURL
+}
+
+// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetEncoding() string {
+       if r == nil || r.Encoding == nil {
+               return ""
+       }
+       return *r.Encoding
+}
+
+// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetGitURL() string {
+       if r == nil || r.GitURL == nil {
+               return ""
+       }
+       return *r.GitURL
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetHTMLURL() string {
+       if r == nil || r.HTMLURL == nil {
+               return ""
+       }
+       return *r.HTMLURL
+}
+
+// GetLicense returns the License field.
+func (r *RepositoryLicense) GetLicense() *License {
+       if r == nil {
+               return nil
+       }
+       return r.License
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetName() string {
+       if r == nil || r.Name == nil {
+               return ""
+       }
+       return *r.Name
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetPath() string {
+       if r == nil || r.Path == nil {
+               return ""
+       }
+       return *r.Path
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetSHA() string {
+       if r == nil || r.SHA == nil {
+               return ""
+       }
+       return *r.SHA
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetSize() int {
+       if r == nil || r.Size == nil {
+               return 0
+       }
+       return *r.Size
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetType() string {
+       if r == nil || r.Type == nil {
+               return ""
+       }
+       return *r.Type
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *RepositoryLicense) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetBase returns the Base field if it's non-nil, zero value otherwise.
+func (r *RepositoryMergeRequest) GetBase() string {
+       if r == nil || r.Base == nil {
+               return ""
+       }
+       return *r.Base
+}
+
+// GetCommitMessage returns the CommitMessage field if it's non-nil, zero value otherwise.
+func (r *RepositoryMergeRequest) GetCommitMessage() string {
+       if r == nil || r.CommitMessage == nil {
+               return ""
+       }
+       return *r.CommitMessage
+}
+
+// GetHead returns the Head field if it's non-nil, zero value otherwise.
+func (r *RepositoryMergeRequest) GetHead() string {
+       if r == nil || r.Head == nil {
+               return ""
+       }
+       return *r.Head
+}
+
+// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
+func (r *RepositoryPermissionLevel) GetPermission() string {
+       if r == nil || r.Permission == nil {
+               return ""
+       }
+       return *r.Permission
+}
+
+// GetUser returns the User field.
+func (r *RepositoryPermissionLevel) GetUser() *User {
+       if r == nil {
+               return nil
+       }
+       return r.User
+}
+
+// GetAssetsURL returns the AssetsURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetAssetsURL() string {
+       if r == nil || r.AssetsURL == nil {
+               return ""
+       }
+       return *r.AssetsURL
+}
+
+// GetAuthor returns the Author field.
+func (r *RepositoryRelease) GetAuthor() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Author
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetBody() string {
+       if r == nil || r.Body == nil {
+               return ""
+       }
+       return *r.Body
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetCreatedAt() Timestamp {
+       if r == nil || r.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *r.CreatedAt
+}
+
+// GetDiscussionCategoryName returns the DiscussionCategoryName field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetDiscussionCategoryName() string {
+       if r == nil || r.DiscussionCategoryName == nil {
+               return ""
+       }
+       return *r.DiscussionCategoryName
+}
+
+// GetDraft returns the Draft field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetDraft() bool {
+       if r == nil || r.Draft == nil {
+               return false
+       }
+       return *r.Draft
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetHTMLURL() string {
+       if r == nil || r.HTMLURL == nil {
+               return ""
+       }
+       return *r.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetName() string {
+       if r == nil || r.Name == nil {
+               return ""
+       }
+       return *r.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetNodeID() string {
+       if r == nil || r.NodeID == nil {
+               return ""
+       }
+       return *r.NodeID
+}
+
+// GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetPrerelease() bool {
+       if r == nil || r.Prerelease == nil {
+               return false
+       }
+       return *r.Prerelease
+}
+
+// GetPublishedAt returns the PublishedAt field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetPublishedAt() Timestamp {
+       if r == nil || r.PublishedAt == nil {
+               return Timestamp{}
+       }
+       return *r.PublishedAt
+}
+
+// GetTagName returns the TagName field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetTagName() string {
+       if r == nil || r.TagName == nil {
+               return ""
+       }
+       return *r.TagName
+}
+
+// GetTarballURL returns the TarballURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetTarballURL() string {
+       if r == nil || r.TarballURL == nil {
+               return ""
+       }
+       return *r.TarballURL
+}
+
+// GetTargetCommitish returns the TargetCommitish field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetTargetCommitish() string {
+       if r == nil || r.TargetCommitish == nil {
+               return ""
+       }
+       return *r.TargetCommitish
+}
+
+// GetUploadURL returns the UploadURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetUploadURL() string {
+       if r == nil || r.UploadURL == nil {
+               return ""
+       }
+       return *r.UploadURL
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetZipballURL returns the ZipballURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryRelease) GetZipballURL() string {
+       if r == nil || r.ZipballURL == nil {
+               return ""
+       }
+       return *r.ZipballURL
+}
+
+// GetCommit returns the Commit field.
+func (r *RepositoryTag) GetCommit() *Commit {
+       if r == nil {
+               return nil
+       }
+       return r.Commit
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (r *RepositoryTag) GetName() string {
+       if r == nil || r.Name == nil {
+               return ""
+       }
+       return *r.Name
+}
+
+// GetTarballURL returns the TarballURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryTag) GetTarballURL() string {
+       if r == nil || r.TarballURL == nil {
+               return ""
+       }
+       return *r.TarballURL
+}
+
+// GetZipballURL returns the ZipballURL field if it's non-nil, zero value otherwise.
+func (r *RepositoryTag) GetZipballURL() string {
+       if r == nil || r.ZipballURL == nil {
+               return ""
+       }
+       return *r.ZipballURL
+}
+
+// GetAffectedPackageName returns the AffectedPackageName field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetAffectedPackageName() string {
+       if r == nil || r.AffectedPackageName == nil {
+               return ""
+       }
+       return *r.AffectedPackageName
+}
+
+// GetAffectedRange returns the AffectedRange field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetAffectedRange() string {
+       if r == nil || r.AffectedRange == nil {
+               return ""
+       }
+       return *r.AffectedRange
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetCreatedAt() Timestamp {
+       if r == nil || r.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *r.CreatedAt
+}
+
+// GetDismissedAt returns the DismissedAt field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetDismissedAt() Timestamp {
+       if r == nil || r.DismissedAt == nil {
+               return Timestamp{}
+       }
+       return *r.DismissedAt
+}
+
+// GetDismisser returns the Dismisser field.
+func (r *RepositoryVulnerabilityAlert) GetDismisser() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Dismisser
+}
+
+// GetDismissReason returns the DismissReason field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetDismissReason() string {
+       if r == nil || r.DismissReason == nil {
+               return ""
+       }
+       return *r.DismissReason
+}
+
+// GetExternalIdentifier returns the ExternalIdentifier field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetExternalIdentifier() string {
+       if r == nil || r.ExternalIdentifier == nil {
+               return ""
+       }
+       return *r.ExternalIdentifier
+}
+
+// GetExternalReference returns the ExternalReference field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetExternalReference() string {
+       if r == nil || r.ExternalReference == nil {
+               return ""
+       }
+       return *r.ExternalReference
+}
+
+// GetFixedIn returns the FixedIn field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetFixedIn() string {
+       if r == nil || r.FixedIn == nil {
+               return ""
+       }
+       return *r.FixedIn
+}
+
+// GetGitHubSecurityAdvisoryID returns the GitHubSecurityAdvisoryID field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetGitHubSecurityAdvisoryID() string {
+       if r == nil || r.GitHubSecurityAdvisoryID == nil {
+               return ""
+       }
+       return *r.GitHubSecurityAdvisoryID
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetSeverity returns the Severity field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlert) GetSeverity() string {
+       if r == nil || r.Severity == nil {
+               return ""
+       }
+       return *r.Severity
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (r *RepositoryVulnerabilityAlertEvent) GetAction() string {
+       if r == nil || r.Action == nil {
+               return ""
+       }
+       return *r.Action
+}
+
+// GetAlert returns the Alert field.
+func (r *RepositoryVulnerabilityAlertEvent) GetAlert() *RepositoryVulnerabilityAlert {
+       if r == nil {
+               return nil
+       }
+       return r.Alert
+}
+
+// GetRepository returns the Repository field.
+func (r *RepositoryVulnerabilityAlertEvent) GetRepository() *Repository {
+       if r == nil {
+               return nil
+       }
+       return r.Repository
+}
+
+// GetForkRepos returns the ForkRepos field if it's non-nil, zero value otherwise.
+func (r *RepoStats) GetForkRepos() int {
+       if r == nil || r.ForkRepos == nil {
+               return 0
+       }
+       return *r.ForkRepos
+}
+
+// GetOrgRepos returns the OrgRepos field if it's non-nil, zero value otherwise.
+func (r *RepoStats) GetOrgRepos() int {
+       if r == nil || r.OrgRepos == nil {
+               return 0
+       }
+       return *r.OrgRepos
+}
+
+// GetRootRepos returns the RootRepos field if it's non-nil, zero value otherwise.
+func (r *RepoStats) GetRootRepos() int {
+       if r == nil || r.RootRepos == nil {
+               return 0
+       }
+       return *r.RootRepos
+}
+
+// GetTotalPushes returns the TotalPushes field if it's non-nil, zero value otherwise.
+func (r *RepoStats) GetTotalPushes() int {
+       if r == nil || r.TotalPushes == nil {
+               return 0
+       }
+       return *r.TotalPushes
+}
+
+// GetTotalRepos returns the TotalRepos field if it's non-nil, zero value otherwise.
+func (r *RepoStats) GetTotalRepos() int {
+       if r == nil || r.TotalRepos == nil {
+               return 0
+       }
+       return *r.TotalRepos
+}
+
+// GetTotalWikis returns the TotalWikis field if it's non-nil, zero value otherwise.
+func (r *RepoStats) GetTotalWikis() int {
+       if r == nil || r.TotalWikis == nil {
+               return 0
+       }
+       return *r.TotalWikis
+}
+
+// GetContext returns the Context field if it's non-nil, zero value otherwise.
+func (r *RepoStatus) GetContext() string {
+       if r == nil || r.Context == nil {
+               return ""
+       }
+       return *r.Context
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (r *RepoStatus) GetCreatedAt() time.Time {
+       if r == nil || r.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *r.CreatedAt
+}
+
+// GetCreator returns the Creator field.
+func (r *RepoStatus) GetCreator() *User {
+       if r == nil {
+               return nil
+       }
+       return r.Creator
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (r *RepoStatus) GetDescription() string {
+       if r == nil || r.Description == nil {
+               return ""
+       }
+       return *r.Description
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *RepoStatus) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (r *RepoStatus) GetNodeID() string {
+       if r == nil || r.NodeID == nil {
+               return ""
+       }
+       return *r.NodeID
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (r *RepoStatus) GetState() string {
+       if r == nil || r.State == nil {
+               return ""
+       }
+       return *r.State
+}
+
+// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise.
+func (r *RepoStatus) GetTargetURL() string {
+       if r == nil || r.TargetURL == nil {
+               return ""
+       }
+       return *r.TargetURL
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (r *RepoStatus) GetUpdatedAt() time.Time {
+       if r == nil || r.UpdatedAt == nil {
+               return time.Time{}
+       }
+       return *r.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (r *RepoStatus) GetURL() string {
+       if r == nil || r.URL == nil {
+               return ""
+       }
+       return *r.URL
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (r *RequiredReviewer) GetType() string {
+       if r == nil || r.Type == nil {
+               return ""
+       }
+       return *r.Type
+}
+
+// GetStrict returns the Strict field if it's non-nil, zero value otherwise.
+func (r *RequiredStatusChecksRequest) GetStrict() bool {
+       if r == nil || r.Strict == nil {
+               return false
+       }
+       return *r.Strict
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (r *ReviewersRequest) GetNodeID() string {
+       if r == nil || r.NodeID == nil {
+               return ""
+       }
+       return *r.NodeID
+}
+
+// GetBusy returns the Busy field if it's non-nil, zero value otherwise.
+func (r *Runner) GetBusy() bool {
+       if r == nil || r.Busy == nil {
+               return false
+       }
+       return *r.Busy
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *Runner) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (r *Runner) GetName() string {
+       if r == nil || r.Name == nil {
+               return ""
+       }
+       return *r.Name
+}
+
+// GetOS returns the OS field if it's non-nil, zero value otherwise.
+func (r *Runner) GetOS() string {
+       if r == nil || r.OS == nil {
+               return ""
+       }
+       return *r.OS
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (r *Runner) GetStatus() string {
+       if r == nil || r.Status == nil {
+               return ""
+       }
+       return *r.Status
+}
+
+// GetArchitecture returns the Architecture field if it's non-nil, zero value otherwise.
+func (r *RunnerApplicationDownload) GetArchitecture() string {
+       if r == nil || r.Architecture == nil {
+               return ""
+       }
+       return *r.Architecture
+}
+
+// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise.
+func (r *RunnerApplicationDownload) GetDownloadURL() string {
+       if r == nil || r.DownloadURL == nil {
+               return ""
+       }
+       return *r.DownloadURL
+}
+
+// GetFilename returns the Filename field if it's non-nil, zero value otherwise.
+func (r *RunnerApplicationDownload) GetFilename() string {
+       if r == nil || r.Filename == nil {
+               return ""
+       }
+       return *r.Filename
+}
+
+// GetOS returns the OS field if it's non-nil, zero value otherwise.
+func (r *RunnerApplicationDownload) GetOS() string {
+       if r == nil || r.OS == nil {
+               return ""
+       }
+       return *r.OS
+}
+
+// GetSHA256Checksum returns the SHA256Checksum field if it's non-nil, zero value otherwise.
+func (r *RunnerApplicationDownload) GetSHA256Checksum() string {
+       if r == nil || r.SHA256Checksum == nil {
+               return ""
+       }
+       return *r.SHA256Checksum
+}
+
+// GetTempDownloadToken returns the TempDownloadToken field if it's non-nil, zero value otherwise.
+func (r *RunnerApplicationDownload) GetTempDownloadToken() string {
+       if r == nil || r.TempDownloadToken == nil {
+               return ""
+       }
+       return *r.TempDownloadToken
+}
+
+// GetAllowsPublicRepositories returns the AllowsPublicRepositories field if it's non-nil, zero value otherwise.
+func (r *RunnerGroup) GetAllowsPublicRepositories() bool {
+       if r == nil || r.AllowsPublicRepositories == nil {
+               return false
+       }
+       return *r.AllowsPublicRepositories
+}
+
+// GetDefault returns the Default field if it's non-nil, zero value otherwise.
+func (r *RunnerGroup) GetDefault() bool {
+       if r == nil || r.Default == nil {
+               return false
+       }
+       return *r.Default
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *RunnerGroup) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetInherited returns the Inherited field if it's non-nil, zero value otherwise.
+func (r *RunnerGroup) GetInherited() bool {
+       if r == nil || r.Inherited == nil {
+               return false
+       }
+       return *r.Inherited
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (r *RunnerGroup) GetName() string {
+       if r == nil || r.Name == nil {
+               return ""
+       }
+       return *r.Name
+}
+
+// GetRunnersURL returns the RunnersURL field if it's non-nil, zero value otherwise.
+func (r *RunnerGroup) GetRunnersURL() string {
+       if r == nil || r.RunnersURL == nil {
+               return ""
+       }
+       return *r.RunnersURL
+}
+
+// GetSelectedRepositoriesURL returns the SelectedRepositoriesURL field if it's non-nil, zero value otherwise.
+func (r *RunnerGroup) GetSelectedRepositoriesURL() string {
+       if r == nil || r.SelectedRepositoriesURL == nil {
+               return ""
+       }
+       return *r.SelectedRepositoriesURL
+}
+
+// GetVisibility returns the Visibility field if it's non-nil, zero value otherwise.
+func (r *RunnerGroup) GetVisibility() string {
+       if r == nil || r.Visibility == nil {
+               return ""
+       }
+       return *r.Visibility
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (r *RunnerLabels) GetID() int64 {
+       if r == nil || r.ID == nil {
+               return 0
+       }
+       return *r.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (r *RunnerLabels) GetName() string {
+       if r == nil || r.Name == nil {
+               return ""
+       }
+       return *r.Name
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (r *RunnerLabels) GetType() string {
+       if r == nil || r.Type == nil {
+               return ""
+       }
+       return *r.Type
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (s *SelectedReposList) GetTotalCount() int {
+       if s == nil || s.TotalCount == nil {
+               return 0
+       }
+       return *s.TotalCount
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (s *ServiceHook) GetName() string {
+       if s == nil || s.Name == nil {
+               return ""
+       }
+       return *s.Name
+}
+
+// GetEnabled returns the Enabled field if it's non-nil, zero value otherwise.
+func (s *SignaturesProtectedBranch) GetEnabled() bool {
+       if s == nil || s.Enabled == nil {
+               return false
+       }
+       return *s.Enabled
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (s *SignaturesProtectedBranch) GetURL() string {
+       if s == nil || s.URL == nil {
+               return ""
+       }
+       return *s.URL
+}
+
+// GetPayload returns the Payload field if it's non-nil, zero value otherwise.
+func (s *SignatureVerification) GetPayload() string {
+       if s == nil || s.Payload == nil {
+               return ""
+       }
+       return *s.Payload
+}
+
+// GetReason returns the Reason field if it's non-nil, zero value otherwise.
+func (s *SignatureVerification) GetReason() string {
+       if s == nil || s.Reason == nil {
+               return ""
+       }
+       return *s.Reason
+}
+
+// GetSignature returns the Signature field if it's non-nil, zero value otherwise.
+func (s *SignatureVerification) GetSignature() string {
+       if s == nil || s.Signature == nil {
+               return ""
+       }
+       return *s.Signature
+}
+
+// GetVerified returns the Verified field if it's non-nil, zero value otherwise.
+func (s *SignatureVerification) GetVerified() bool {
+       if s == nil || s.Verified == nil {
+               return false
+       }
+       return *s.Verified
+}
+
+// GetActor returns the Actor field.
+func (s *Source) GetActor() *User {
+       if s == nil {
+               return nil
+       }
+       return s.Actor
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (s *Source) GetID() int64 {
+       if s == nil || s.ID == nil {
+               return 0
+       }
+       return *s.ID
+}
+
+// GetIssue returns the Issue field.
+func (s *Source) GetIssue() *Issue {
+       if s == nil {
+               return nil
+       }
+       return s.Issue
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (s *Source) GetType() string {
+       if s == nil || s.Type == nil {
+               return ""
+       }
+       return *s.Type
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (s *Source) GetURL() string {
+       if s == nil || s.URL == nil {
+               return ""
+       }
+       return *s.URL
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (s *SourceImportAuthor) GetEmail() string {
+       if s == nil || s.Email == nil {
+               return ""
+       }
+       return *s.Email
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (s *SourceImportAuthor) GetID() int64 {
+       if s == nil || s.ID == nil {
+               return 0
+       }
+       return *s.ID
+}
+
+// GetImportURL returns the ImportURL field if it's non-nil, zero value otherwise.
+func (s *SourceImportAuthor) GetImportURL() string {
+       if s == nil || s.ImportURL == nil {
+               return ""
+       }
+       return *s.ImportURL
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (s *SourceImportAuthor) GetName() string {
+       if s == nil || s.Name == nil {
+               return ""
+       }
+       return *s.Name
+}
+
+// GetRemoteID returns the RemoteID field if it's non-nil, zero value otherwise.
+func (s *SourceImportAuthor) GetRemoteID() string {
+       if s == nil || s.RemoteID == nil {
+               return ""
+       }
+       return *s.RemoteID
+}
+
+// GetRemoteName returns the RemoteName field if it's non-nil, zero value otherwise.
+func (s *SourceImportAuthor) GetRemoteName() string {
+       if s == nil || s.RemoteName == nil {
+               return ""
+       }
+       return *s.RemoteName
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (s *SourceImportAuthor) GetURL() string {
+       if s == nil || s.URL == nil {
+               return ""
+       }
+       return *s.URL
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (s *StarEvent) GetAction() string {
+       if s == nil || s.Action == nil {
+               return ""
+       }
+       return *s.Action
+}
+
+// GetOrg returns the Org field.
+func (s *StarEvent) GetOrg() *Organization {
+       if s == nil {
+               return nil
+       }
+       return s.Org
+}
+
+// GetRepo returns the Repo field.
+func (s *StarEvent) GetRepo() *Repository {
+       if s == nil {
+               return nil
+       }
+       return s.Repo
+}
+
+// GetSender returns the Sender field.
+func (s *StarEvent) GetSender() *User {
+       if s == nil {
+               return nil
+       }
+       return s.Sender
+}
+
+// GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise.
+func (s *StarEvent) GetStarredAt() Timestamp {
+       if s == nil || s.StarredAt == nil {
+               return Timestamp{}
+       }
+       return *s.StarredAt
+}
+
+// GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise.
+func (s *Stargazer) GetStarredAt() Timestamp {
+       if s == nil || s.StarredAt == nil {
+               return Timestamp{}
+       }
+       return *s.StarredAt
+}
+
+// GetUser returns the User field.
+func (s *Stargazer) GetUser() *User {
+       if s == nil {
+               return nil
+       }
+       return s.User
+}
+
+// GetRepository returns the Repository field.
+func (s *StarredRepository) GetRepository() *Repository {
+       if s == nil {
+               return nil
+       }
+       return s.Repository
+}
+
+// GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise.
+func (s *StarredRepository) GetStarredAt() Timestamp {
+       if s == nil || s.StarredAt == nil {
+               return Timestamp{}
+       }
+       return *s.StarredAt
+}
+
+// GetCommit returns the Commit field.
+func (s *StatusEvent) GetCommit() *RepositoryCommit {
+       if s == nil {
+               return nil
+       }
+       return s.Commit
+}
+
+// GetContext returns the Context field if it's non-nil, zero value otherwise.
+func (s *StatusEvent) GetContext() string {
+       if s == nil || s.Context == nil {
+               return ""
+       }
+       return *s.Context
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (s *StatusEvent) GetCreatedAt() Timestamp {
+       if s == nil || s.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *s.CreatedAt
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (s *StatusEvent) GetDescription() string {
+       if s == nil || s.Description == nil {
+               return ""
+       }
+       return *s.Description
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (s *StatusEvent) GetID() int64 {
+       if s == nil || s.ID == nil {
+               return 0
+       }
+       return *s.ID
+}
+
+// GetInstallation returns the Installation field.
+func (s *StatusEvent) GetInstallation() *Installation {
+       if s == nil {
+               return nil
+       }
+       return s.Installation
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (s *StatusEvent) GetName() string {
+       if s == nil || s.Name == nil {
+               return ""
+       }
+       return *s.Name
+}
+
+// GetRepo returns the Repo field.
+func (s *StatusEvent) GetRepo() *Repository {
+       if s == nil {
+               return nil
+       }
+       return s.Repo
+}
+
+// GetSender returns the Sender field.
+func (s *StatusEvent) GetSender() *User {
+       if s == nil {
+               return nil
+       }
+       return s.Sender
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (s *StatusEvent) GetSHA() string {
+       if s == nil || s.SHA == nil {
+               return ""
+       }
+       return *s.SHA
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (s *StatusEvent) GetState() string {
+       if s == nil || s.State == nil {
+               return ""
+       }
+       return *s.State
+}
+
+// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise.
+func (s *StatusEvent) GetTargetURL() string {
+       if s == nil || s.TargetURL == nil {
+               return ""
+       }
+       return *s.TargetURL
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (s *StatusEvent) GetUpdatedAt() Timestamp {
+       if s == nil || s.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *s.UpdatedAt
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (s *Subscription) GetCreatedAt() Timestamp {
+       if s == nil || s.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *s.CreatedAt
+}
+
+// GetIgnored returns the Ignored field if it's non-nil, zero value otherwise.
+func (s *Subscription) GetIgnored() bool {
+       if s == nil || s.Ignored == nil {
+               return false
+       }
+       return *s.Ignored
+}
+
+// GetReason returns the Reason field if it's non-nil, zero value otherwise.
+func (s *Subscription) GetReason() string {
+       if s == nil || s.Reason == nil {
+               return ""
+       }
+       return *s.Reason
+}
+
+// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise.
+func (s *Subscription) GetRepositoryURL() string {
+       if s == nil || s.RepositoryURL == nil {
+               return ""
+       }
+       return *s.RepositoryURL
+}
+
+// GetSubscribed returns the Subscribed field if it's non-nil, zero value otherwise.
+func (s *Subscription) GetSubscribed() bool {
+       if s == nil || s.Subscribed == nil {
+               return false
+       }
+       return *s.Subscribed
+}
+
+// GetThreadURL returns the ThreadURL field if it's non-nil, zero value otherwise.
+func (s *Subscription) GetThreadURL() string {
+       if s == nil || s.ThreadURL == nil {
+               return ""
+       }
+       return *s.ThreadURL
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (s *Subscription) GetURL() string {
+       if s == nil || s.URL == nil {
+               return ""
+       }
+       return *s.URL
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (t *Tag) GetMessage() string {
+       if t == nil || t.Message == nil {
+               return ""
+       }
+       return *t.Message
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (t *Tag) GetNodeID() string {
+       if t == nil || t.NodeID == nil {
+               return ""
+       }
+       return *t.NodeID
+}
+
+// GetObject returns the Object field.
+func (t *Tag) GetObject() *GitObject {
+       if t == nil {
+               return nil
+       }
+       return t.Object
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (t *Tag) GetSHA() string {
+       if t == nil || t.SHA == nil {
+               return ""
+       }
+       return *t.SHA
+}
+
+// GetTag returns the Tag field if it's non-nil, zero value otherwise.
+func (t *Tag) GetTag() string {
+       if t == nil || t.Tag == nil {
+               return ""
+       }
+       return *t.Tag
+}
+
+// GetTagger returns the Tagger field.
+func (t *Tag) GetTagger() *CommitAuthor {
+       if t == nil {
+               return nil
+       }
+       return t.Tagger
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (t *Tag) GetURL() string {
+       if t == nil || t.URL == nil {
+               return ""
+       }
+       return *t.URL
+}
+
+// GetVerification returns the Verification field.
+func (t *Tag) GetVerification() *SignatureVerification {
+       if t == nil {
+               return nil
+       }
+       return t.Verification
+}
+
+// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
+func (t *TaskStep) GetCompletedAt() Timestamp {
+       if t == nil || t.CompletedAt == nil {
+               return Timestamp{}
+       }
+       return *t.CompletedAt
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (t *TaskStep) GetConclusion() string {
+       if t == nil || t.Conclusion == nil {
+               return ""
+       }
+       return *t.Conclusion
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (t *TaskStep) GetName() string {
+       if t == nil || t.Name == nil {
+               return ""
+       }
+       return *t.Name
+}
+
+// GetNumber returns the Number field if it's non-nil, zero value otherwise.
+func (t *TaskStep) GetNumber() int64 {
+       if t == nil || t.Number == nil {
+               return 0
+       }
+       return *t.Number
+}
+
+// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
+func (t *TaskStep) GetStartedAt() Timestamp {
+       if t == nil || t.StartedAt == nil {
+               return Timestamp{}
+       }
+       return *t.StartedAt
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (t *TaskStep) GetStatus() string {
+       if t == nil || t.Status == nil {
+               return ""
+       }
+       return *t.Status
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (t *Team) GetDescription() string {
+       if t == nil || t.Description == nil {
+               return ""
+       }
+       return *t.Description
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (t *Team) GetID() int64 {
+       if t == nil || t.ID == nil {
+               return 0
+       }
+       return *t.ID
+}
+
+// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise.
+func (t *Team) GetLDAPDN() string {
+       if t == nil || t.LDAPDN == nil {
+               return ""
+       }
+       return *t.LDAPDN
+}
+
+// GetMembersCount returns the MembersCount field if it's non-nil, zero value otherwise.
+func (t *Team) GetMembersCount() int {
+       if t == nil || t.MembersCount == nil {
+               return 0
+       }
+       return *t.MembersCount
+}
+
+// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise.
+func (t *Team) GetMembersURL() string {
+       if t == nil || t.MembersURL == nil {
+               return ""
+       }
+       return *t.MembersURL
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (t *Team) GetName() string {
+       if t == nil || t.Name == nil {
+               return ""
+       }
+       return *t.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (t *Team) GetNodeID() string {
+       if t == nil || t.NodeID == nil {
+               return ""
+       }
+       return *t.NodeID
+}
+
+// GetOrganization returns the Organization field.
+func (t *Team) GetOrganization() *Organization {
+       if t == nil {
+               return nil
+       }
+       return t.Organization
+}
+
+// GetParent returns the Parent field.
+func (t *Team) GetParent() *Team {
+       if t == nil {
+               return nil
+       }
+       return t.Parent
+}
+
+// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
+func (t *Team) GetPermission() string {
+       if t == nil || t.Permission == nil {
+               return ""
+       }
+       return *t.Permission
+}
+
+// GetPermissions returns the Permissions map if it's non-nil, an empty map otherwise.
+func (t *Team) GetPermissions() map[string]bool {
+       if t == nil || t.Permissions == nil {
+               return map[string]bool{}
+       }
+       return t.Permissions
+}
+
+// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise.
+func (t *Team) GetPrivacy() string {
+       if t == nil || t.Privacy == nil {
+               return ""
+       }
+       return *t.Privacy
+}
+
+// GetReposCount returns the ReposCount field if it's non-nil, zero value otherwise.
+func (t *Team) GetReposCount() int {
+       if t == nil || t.ReposCount == nil {
+               return 0
+       }
+       return *t.ReposCount
+}
+
+// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise.
+func (t *Team) GetRepositoriesURL() string {
+       if t == nil || t.RepositoriesURL == nil {
+               return ""
+       }
+       return *t.RepositoriesURL
+}
+
+// GetSlug returns the Slug field if it's non-nil, zero value otherwise.
+func (t *Team) GetSlug() string {
+       if t == nil || t.Slug == nil {
+               return ""
+       }
+       return *t.Slug
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (t *Team) GetURL() string {
+       if t == nil || t.URL == nil {
+               return ""
+       }
+       return *t.URL
+}
+
+// GetInstallation returns the Installation field.
+func (t *TeamAddEvent) GetInstallation() *Installation {
+       if t == nil {
+               return nil
+       }
+       return t.Installation
+}
+
+// GetOrg returns the Org field.
+func (t *TeamAddEvent) GetOrg() *Organization {
+       if t == nil {
+               return nil
+       }
+       return t.Org
+}
+
+// GetRepo returns the Repo field.
+func (t *TeamAddEvent) GetRepo() *Repository {
+       if t == nil {
+               return nil
+       }
+       return t.Repo
+}
+
+// GetSender returns the Sender field.
+func (t *TeamAddEvent) GetSender() *User {
+       if t == nil {
+               return nil
+       }
+       return t.Sender
+}
+
+// GetTeam returns the Team field.
+func (t *TeamAddEvent) GetTeam() *Team {
+       if t == nil {
+               return nil
+       }
+       return t.Team
+}
+
+// GetDescription returns the Description field.
+func (t *TeamChange) GetDescription() *TeamDescription {
+       if t == nil {
+               return nil
+       }
+       return t.Description
+}
+
+// GetName returns the Name field.
+func (t *TeamChange) GetName() *TeamName {
+       if t == nil {
+               return nil
+       }
+       return t.Name
+}
+
+// GetPrivacy returns the Privacy field.
+func (t *TeamChange) GetPrivacy() *TeamPrivacy {
+       if t == nil {
+               return nil
+       }
+       return t.Privacy
+}
+
+// GetRepository returns the Repository field.
+func (t *TeamChange) GetRepository() *TeamRepository {
+       if t == nil {
+               return nil
+       }
+       return t.Repository
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (t *TeamDescription) GetFrom() string {
+       if t == nil || t.From == nil {
+               return ""
+       }
+       return *t.From
+}
+
+// GetAuthor returns the Author field.
+func (t *TeamDiscussion) GetAuthor() *User {
+       if t == nil {
+               return nil
+       }
+       return t.Author
+}
+
+// GetBody returns the Body field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetBody() string {
+       if t == nil || t.Body == nil {
+               return ""
+       }
+       return *t.Body
+}
+
+// GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetBodyHTML() string {
+       if t == nil || t.BodyHTML == nil {
+               return ""
+       }
+       return *t.BodyHTML
+}
+
+// GetBodyVersion returns the BodyVersion field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetBodyVersion() string {
+       if t == nil || t.BodyVersion == nil {
+               return ""
+       }
+       return *t.BodyVersion
+}
+
+// GetCommentsCount returns the CommentsCount field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetCommentsCount() int {
+       if t == nil || t.CommentsCount == nil {
+               return 0
+       }
+       return *t.CommentsCount
+}
+
+// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetCommentsURL() string {
+       if t == nil || t.CommentsURL == nil {
+               return ""
+       }
+       return *t.CommentsURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetCreatedAt() Timestamp {
+       if t == nil || t.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *t.CreatedAt
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetHTMLURL() string {
+       if t == nil || t.HTMLURL == nil {
+               return ""
+       }
+       return *t.HTMLURL
+}
+
+// GetLastEditedAt returns the LastEditedAt field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetLastEditedAt() Timestamp {
+       if t == nil || t.LastEditedAt == nil {
+               return Timestamp{}
+       }
+       return *t.LastEditedAt
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetNodeID() string {
+       if t == nil || t.NodeID == nil {
+               return ""
+       }
+       return *t.NodeID
+}
+
+// GetNumber returns the Number field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetNumber() int {
+       if t == nil || t.Number == nil {
+               return 0
+       }
+       return *t.Number
+}
+
+// GetPinned returns the Pinned field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetPinned() bool {
+       if t == nil || t.Pinned == nil {
+               return false
+       }
+       return *t.Pinned
+}
+
+// GetPrivate returns the Private field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetPrivate() bool {
+       if t == nil || t.Private == nil {
+               return false
+       }
+       return *t.Private
+}
+
+// GetReactions returns the Reactions field.
+func (t *TeamDiscussion) GetReactions() *Reactions {
+       if t == nil {
+               return nil
+       }
+       return t.Reactions
+}
+
+// GetTeamURL returns the TeamURL field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetTeamURL() string {
+       if t == nil || t.TeamURL == nil {
+               return ""
+       }
+       return *t.TeamURL
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetTitle() string {
+       if t == nil || t.Title == nil {
+               return ""
+       }
+       return *t.Title
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetUpdatedAt() Timestamp {
+       if t == nil || t.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *t.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (t *TeamDiscussion) GetURL() string {
+       if t == nil || t.URL == nil {
+               return ""
+       }
+       return *t.URL
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (t *TeamEvent) GetAction() string {
+       if t == nil || t.Action == nil {
+               return ""
+       }
+       return *t.Action
+}
+
+// GetChanges returns the Changes field.
+func (t *TeamEvent) GetChanges() *TeamChange {
+       if t == nil {
+               return nil
+       }
+       return t.Changes
+}
+
+// GetInstallation returns the Installation field.
+func (t *TeamEvent) GetInstallation() *Installation {
+       if t == nil {
+               return nil
+       }
+       return t.Installation
+}
+
+// GetOrg returns the Org field.
+func (t *TeamEvent) GetOrg() *Organization {
+       if t == nil {
+               return nil
+       }
+       return t.Org
+}
+
+// GetRepo returns the Repo field.
+func (t *TeamEvent) GetRepo() *Repository {
+       if t == nil {
+               return nil
+       }
+       return t.Repo
+}
+
+// GetSender returns the Sender field.
+func (t *TeamEvent) GetSender() *User {
+       if t == nil {
+               return nil
+       }
+       return t.Sender
+}
+
+// GetTeam returns the Team field.
+func (t *TeamEvent) GetTeam() *Team {
+       if t == nil {
+               return nil
+       }
+       return t.Team
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (t *TeamLDAPMapping) GetDescription() string {
+       if t == nil || t.Description == nil {
+               return ""
+       }
+       return *t.Description
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (t *TeamLDAPMapping) GetID() int64 {
+       if t == nil || t.ID == nil {
+               return 0
+       }
+       return *t.ID
+}
+
+// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise.
+func (t *TeamLDAPMapping) GetLDAPDN() string {
+       if t == nil || t.LDAPDN == nil {
+               return ""
+       }
+       return *t.LDAPDN
+}
+
+// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise.
+func (t *TeamLDAPMapping) GetMembersURL() string {
+       if t == nil || t.MembersURL == nil {
+               return ""
+       }
+       return *t.MembersURL
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (t *TeamLDAPMapping) GetName() string {
+       if t == nil || t.Name == nil {
+               return ""
+       }
+       return *t.Name
+}
+
+// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
+func (t *TeamLDAPMapping) GetPermission() string {
+       if t == nil || t.Permission == nil {
+               return ""
+       }
+       return *t.Permission
+}
+
+// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise.
+func (t *TeamLDAPMapping) GetPrivacy() string {
+       if t == nil || t.Privacy == nil {
+               return ""
+       }
+       return *t.Privacy
+}
+
+// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise.
+func (t *TeamLDAPMapping) GetRepositoriesURL() string {
+       if t == nil || t.RepositoriesURL == nil {
+               return ""
+       }
+       return *t.RepositoriesURL
+}
+
+// GetSlug returns the Slug field if it's non-nil, zero value otherwise.
+func (t *TeamLDAPMapping) GetSlug() string {
+       if t == nil || t.Slug == nil {
+               return ""
+       }
+       return *t.Slug
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (t *TeamLDAPMapping) GetURL() string {
+       if t == nil || t.URL == nil {
+               return ""
+       }
+       return *t.URL
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (t *TeamName) GetFrom() string {
+       if t == nil || t.From == nil {
+               return ""
+       }
+       return *t.From
+}
+
+// GetFrom returns the From field.
+func (t *TeamPermissions) GetFrom() *TeamPermissionsFrom {
+       if t == nil {
+               return nil
+       }
+       return t.From
+}
+
+// GetAdmin returns the Admin field if it's non-nil, zero value otherwise.
+func (t *TeamPermissionsFrom) GetAdmin() bool {
+       if t == nil || t.Admin == nil {
+               return false
+       }
+       return *t.Admin
+}
+
+// GetPull returns the Pull field if it's non-nil, zero value otherwise.
+func (t *TeamPermissionsFrom) GetPull() bool {
+       if t == nil || t.Pull == nil {
+               return false
+       }
+       return *t.Pull
+}
+
+// GetPush returns the Push field if it's non-nil, zero value otherwise.
+func (t *TeamPermissionsFrom) GetPush() bool {
+       if t == nil || t.Push == nil {
+               return false
+       }
+       return *t.Push
+}
+
+// GetFrom returns the From field if it's non-nil, zero value otherwise.
+func (t *TeamPrivacy) GetFrom() string {
+       if t == nil || t.From == nil {
+               return ""
+       }
+       return *t.From
+}
+
+// GetPermission returns the Permission field if it's non-nil, zero value otherwise.
+func (t *TeamProjectOptions) GetPermission() string {
+       if t == nil || t.Permission == nil {
+               return ""
+       }
+       return *t.Permission
+}
+
+// GetPermissions returns the Permissions field.
+func (t *TeamRepository) GetPermissions() *TeamPermissions {
+       if t == nil {
+               return nil
+       }
+       return t.Permissions
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (t *TemplateRepoRequest) GetDescription() string {
+       if t == nil || t.Description == nil {
+               return ""
+       }
+       return *t.Description
+}
+
+// GetIncludeAllBranches returns the IncludeAllBranches field if it's non-nil, zero value otherwise.
+func (t *TemplateRepoRequest) GetIncludeAllBranches() bool {
+       if t == nil || t.IncludeAllBranches == nil {
+               return false
+       }
+       return *t.IncludeAllBranches
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (t *TemplateRepoRequest) GetName() string {
+       if t == nil || t.Name == nil {
+               return ""
+       }
+       return *t.Name
+}
+
+// GetOwner returns the Owner field if it's non-nil, zero value otherwise.
+func (t *TemplateRepoRequest) GetOwner() string {
+       if t == nil || t.Owner == nil {
+               return ""
+       }
+       return *t.Owner
+}
+
+// GetPrivate returns the Private field if it's non-nil, zero value otherwise.
+func (t *TemplateRepoRequest) GetPrivate() bool {
+       if t == nil || t.Private == nil {
+               return false
+       }
+       return *t.Private
+}
+
+// GetFragment returns the Fragment field if it's non-nil, zero value otherwise.
+func (t *TextMatch) GetFragment() string {
+       if t == nil || t.Fragment == nil {
+               return ""
+       }
+       return *t.Fragment
+}
+
+// GetObjectType returns the ObjectType field if it's non-nil, zero value otherwise.
+func (t *TextMatch) GetObjectType() string {
+       if t == nil || t.ObjectType == nil {
+               return ""
+       }
+       return *t.ObjectType
+}
+
+// GetObjectURL returns the ObjectURL field if it's non-nil, zero value otherwise.
+func (t *TextMatch) GetObjectURL() string {
+       if t == nil || t.ObjectURL == nil {
+               return ""
+       }
+       return *t.ObjectURL
+}
+
+// GetProperty returns the Property field if it's non-nil, zero value otherwise.
+func (t *TextMatch) GetProperty() string {
+       if t == nil || t.Property == nil {
+               return ""
+       }
+       return *t.Property
+}
+
+// GetActor returns the Actor field.
+func (t *Timeline) GetActor() *User {
+       if t == nil {
+               return nil
+       }
+       return t.Actor
+}
+
+// GetAssignee returns the Assignee field.
+func (t *Timeline) GetAssignee() *User {
+       if t == nil {
+               return nil
+       }
+       return t.Assignee
+}
+
+// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise.
+func (t *Timeline) GetCommitID() string {
+       if t == nil || t.CommitID == nil {
+               return ""
+       }
+       return *t.CommitID
+}
+
+// GetCommitURL returns the CommitURL field if it's non-nil, zero value otherwise.
+func (t *Timeline) GetCommitURL() string {
+       if t == nil || t.CommitURL == nil {
+               return ""
+       }
+       return *t.CommitURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (t *Timeline) GetCreatedAt() time.Time {
+       if t == nil || t.CreatedAt == nil {
+               return time.Time{}
+       }
+       return *t.CreatedAt
+}
+
+// GetEvent returns the Event field if it's non-nil, zero value otherwise.
+func (t *Timeline) GetEvent() string {
+       if t == nil || t.Event == nil {
+               return ""
+       }
+       return *t.Event
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (t *Timeline) GetID() int64 {
+       if t == nil || t.ID == nil {
+               return 0
+       }
+       return *t.ID
+}
+
+// GetLabel returns the Label field.
+func (t *Timeline) GetLabel() *Label {
+       if t == nil {
+               return nil
+       }
+       return t.Label
+}
+
+// GetMilestone returns the Milestone field.
+func (t *Timeline) GetMilestone() *Milestone {
+       if t == nil {
+               return nil
+       }
+       return t.Milestone
+}
+
+// GetProjectCard returns the ProjectCard field.
+func (t *Timeline) GetProjectCard() *ProjectCard {
+       if t == nil {
+               return nil
+       }
+       return t.ProjectCard
+}
+
+// GetRename returns the Rename field.
+func (t *Timeline) GetRename() *Rename {
+       if t == nil {
+               return nil
+       }
+       return t.Rename
+}
+
+// GetSource returns the Source field.
+func (t *Timeline) GetSource() *Source {
+       if t == nil {
+               return nil
+       }
+       return t.Source
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (t *Timeline) GetState() string {
+       if t == nil || t.State == nil {
+               return ""
+       }
+       return *t.State
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (t *Timeline) GetURL() string {
+       if t == nil || t.URL == nil {
+               return ""
+       }
+       return *t.URL
+}
+
+// GetGUID returns the GUID field if it's non-nil, zero value otherwise.
+func (t *Tool) GetGUID() string {
+       if t == nil || t.GUID == nil {
+               return ""
+       }
+       return *t.GUID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (t *Tool) GetName() string {
+       if t == nil || t.Name == nil {
+               return ""
+       }
+       return *t.Name
+}
+
+// GetVersion returns the Version field if it's non-nil, zero value otherwise.
+func (t *Tool) GetVersion() string {
+       if t == nil || t.Version == nil {
+               return ""
+       }
+       return *t.Version
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (t *TopicResult) GetCreatedAt() Timestamp {
+       if t == nil || t.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *t.CreatedAt
+}
+
+// GetCreatedBy returns the CreatedBy field if it's non-nil, zero value otherwise.
+func (t *TopicResult) GetCreatedBy() string {
+       if t == nil || t.CreatedBy == nil {
+               return ""
+       }
+       return *t.CreatedBy
+}
+
+// GetCurated returns the Curated field if it's non-nil, zero value otherwise.
+func (t *TopicResult) GetCurated() bool {
+       if t == nil || t.Curated == nil {
+               return false
+       }
+       return *t.Curated
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (t *TopicResult) GetDescription() string {
+       if t == nil || t.Description == nil {
+               return ""
+       }
+       return *t.Description
+}
+
+// GetDisplayName returns the DisplayName field if it's non-nil, zero value otherwise.
+func (t *TopicResult) GetDisplayName() string {
+       if t == nil || t.DisplayName == nil {
+               return ""
+       }
+       return *t.DisplayName
+}
+
+// GetFeatured returns the Featured field if it's non-nil, zero value otherwise.
+func (t *TopicResult) GetFeatured() bool {
+       if t == nil || t.Featured == nil {
+               return false
+       }
+       return *t.Featured
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (t *TopicResult) GetName() string {
+       if t == nil || t.Name == nil {
+               return ""
+       }
+       return *t.Name
+}
+
+// GetScore returns the Score field.
+func (t *TopicResult) GetScore() *float64 {
+       if t == nil {
+               return nil
+       }
+       return t.Score
+}
+
+// GetShortDescription returns the ShortDescription field if it's non-nil, zero value otherwise.
+func (t *TopicResult) GetShortDescription() string {
+       if t == nil || t.ShortDescription == nil {
+               return ""
+       }
+       return *t.ShortDescription
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (t *TopicResult) GetUpdatedAt() string {
+       if t == nil || t.UpdatedAt == nil {
+               return ""
+       }
+       return *t.UpdatedAt
+}
+
+// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
+func (t *TopicsSearchResult) GetIncompleteResults() bool {
+       if t == nil || t.IncompleteResults == nil {
+               return false
+       }
+       return *t.IncompleteResults
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (t *TopicsSearchResult) GetTotal() int {
+       if t == nil || t.Total == nil {
+               return 0
+       }
+       return *t.Total
+}
+
+// GetCount returns the Count field if it's non-nil, zero value otherwise.
+func (t *TrafficClones) GetCount() int {
+       if t == nil || t.Count == nil {
+               return 0
+       }
+       return *t.Count
+}
+
+// GetUniques returns the Uniques field if it's non-nil, zero value otherwise.
+func (t *TrafficClones) GetUniques() int {
+       if t == nil || t.Uniques == nil {
+               return 0
+       }
+       return *t.Uniques
+}
+
+// GetCount returns the Count field if it's non-nil, zero value otherwise.
+func (t *TrafficData) GetCount() int {
+       if t == nil || t.Count == nil {
+               return 0
+       }
+       return *t.Count
+}
+
+// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise.
+func (t *TrafficData) GetTimestamp() Timestamp {
+       if t == nil || t.Timestamp == nil {
+               return Timestamp{}
+       }
+       return *t.Timestamp
+}
+
+// GetUniques returns the Uniques field if it's non-nil, zero value otherwise.
+func (t *TrafficData) GetUniques() int {
+       if t == nil || t.Uniques == nil {
+               return 0
+       }
+       return *t.Uniques
+}
+
+// GetCount returns the Count field if it's non-nil, zero value otherwise.
+func (t *TrafficPath) GetCount() int {
+       if t == nil || t.Count == nil {
+               return 0
+       }
+       return *t.Count
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (t *TrafficPath) GetPath() string {
+       if t == nil || t.Path == nil {
+               return ""
+       }
+       return *t.Path
+}
+
+// GetTitle returns the Title field if it's non-nil, zero value otherwise.
+func (t *TrafficPath) GetTitle() string {
+       if t == nil || t.Title == nil {
+               return ""
+       }
+       return *t.Title
+}
+
+// GetUniques returns the Uniques field if it's non-nil, zero value otherwise.
+func (t *TrafficPath) GetUniques() int {
+       if t == nil || t.Uniques == nil {
+               return 0
+       }
+       return *t.Uniques
+}
+
+// GetCount returns the Count field if it's non-nil, zero value otherwise.
+func (t *TrafficReferrer) GetCount() int {
+       if t == nil || t.Count == nil {
+               return 0
+       }
+       return *t.Count
+}
+
+// GetReferrer returns the Referrer field if it's non-nil, zero value otherwise.
+func (t *TrafficReferrer) GetReferrer() string {
+       if t == nil || t.Referrer == nil {
+               return ""
+       }
+       return *t.Referrer
+}
+
+// GetUniques returns the Uniques field if it's non-nil, zero value otherwise.
+func (t *TrafficReferrer) GetUniques() int {
+       if t == nil || t.Uniques == nil {
+               return 0
+       }
+       return *t.Uniques
+}
+
+// GetCount returns the Count field if it's non-nil, zero value otherwise.
+func (t *TrafficViews) GetCount() int {
+       if t == nil || t.Count == nil {
+               return 0
+       }
+       return *t.Count
+}
+
+// GetUniques returns the Uniques field if it's non-nil, zero value otherwise.
+func (t *TrafficViews) GetUniques() int {
+       if t == nil || t.Uniques == nil {
+               return 0
+       }
+       return *t.Uniques
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (t *Tree) GetSHA() string {
+       if t == nil || t.SHA == nil {
+               return ""
+       }
+       return *t.SHA
+}
+
+// GetTruncated returns the Truncated field if it's non-nil, zero value otherwise.
+func (t *Tree) GetTruncated() bool {
+       if t == nil || t.Truncated == nil {
+               return false
+       }
+       return *t.Truncated
+}
+
+// GetContent returns the Content field if it's non-nil, zero value otherwise.
+func (t *TreeEntry) GetContent() string {
+       if t == nil || t.Content == nil {
+               return ""
+       }
+       return *t.Content
+}
+
+// GetMode returns the Mode field if it's non-nil, zero value otherwise.
+func (t *TreeEntry) GetMode() string {
+       if t == nil || t.Mode == nil {
+               return ""
+       }
+       return *t.Mode
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (t *TreeEntry) GetPath() string {
+       if t == nil || t.Path == nil {
+               return ""
+       }
+       return *t.Path
+}
+
+// GetSHA returns the SHA field if it's non-nil, zero value otherwise.
+func (t *TreeEntry) GetSHA() string {
+       if t == nil || t.SHA == nil {
+               return ""
+       }
+       return *t.SHA
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (t *TreeEntry) GetSize() int {
+       if t == nil || t.Size == nil {
+               return 0
+       }
+       return *t.Size
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (t *TreeEntry) GetType() string {
+       if t == nil || t.Type == nil {
+               return ""
+       }
+       return *t.Type
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (t *TreeEntry) GetURL() string {
+       if t == nil || t.URL == nil {
+               return ""
+       }
+       return *t.URL
+}
+
+// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetCompletedAt() Timestamp {
+       if u == nil || u.CompletedAt == nil {
+               return Timestamp{}
+       }
+       return *u.CompletedAt
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetConclusion() string {
+       if u == nil || u.Conclusion == nil {
+               return ""
+       }
+       return *u.Conclusion
+}
+
+// GetDetailsURL returns the DetailsURL field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetDetailsURL() string {
+       if u == nil || u.DetailsURL == nil {
+               return ""
+       }
+       return *u.DetailsURL
+}
+
+// GetExternalID returns the ExternalID field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetExternalID() string {
+       if u == nil || u.ExternalID == nil {
+               return ""
+       }
+       return *u.ExternalID
+}
+
+// GetOutput returns the Output field.
+func (u *UpdateCheckRunOptions) GetOutput() *CheckRunOutput {
+       if u == nil {
+               return nil
+       }
+       return u.Output
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (u *UpdateCheckRunOptions) GetStatus() string {
+       if u == nil || u.Status == nil {
+               return ""
+       }
+       return *u.Status
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (u *UpdateRunnerGroupRequest) GetName() string {
+       if u == nil || u.Name == nil {
+               return ""
+       }
+       return *u.Name
+}
+
+// GetVisibility returns the Visibility field if it's non-nil, zero value otherwise.
+func (u *UpdateRunnerGroupRequest) GetVisibility() string {
+       if u == nil || u.Visibility == nil {
+               return ""
+       }
+       return *u.Visibility
+}
+
+// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
+func (u *User) GetAvatarURL() string {
+       if u == nil || u.AvatarURL == nil {
+               return ""
+       }
+       return *u.AvatarURL
+}
+
+// GetBio returns the Bio field if it's non-nil, zero value otherwise.
+func (u *User) GetBio() string {
+       if u == nil || u.Bio == nil {
+               return ""
+       }
+       return *u.Bio
+}
+
+// GetBlog returns the Blog field if it's non-nil, zero value otherwise.
+func (u *User) GetBlog() string {
+       if u == nil || u.Blog == nil {
+               return ""
+       }
+       return *u.Blog
+}
+
+// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise.
+func (u *User) GetCollaborators() int {
+       if u == nil || u.Collaborators == nil {
+               return 0
+       }
+       return *u.Collaborators
+}
+
+// GetCompany returns the Company field if it's non-nil, zero value otherwise.
+func (u *User) GetCompany() string {
+       if u == nil || u.Company == nil {
+               return ""
+       }
+       return *u.Company
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (u *User) GetCreatedAt() Timestamp {
+       if u == nil || u.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *u.CreatedAt
+}
+
+// GetDiskUsage returns the DiskUsage field if it's non-nil, zero value otherwise.
+func (u *User) GetDiskUsage() int {
+       if u == nil || u.DiskUsage == nil {
+               return 0
+       }
+       return *u.DiskUsage
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (u *User) GetEmail() string {
+       if u == nil || u.Email == nil {
+               return ""
+       }
+       return *u.Email
+}
+
+// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
+func (u *User) GetEventsURL() string {
+       if u == nil || u.EventsURL == nil {
+               return ""
+       }
+       return *u.EventsURL
+}
+
+// GetFollowers returns the Followers field if it's non-nil, zero value otherwise.
+func (u *User) GetFollowers() int {
+       if u == nil || u.Followers == nil {
+               return 0
+       }
+       return *u.Followers
+}
+
+// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise.
+func (u *User) GetFollowersURL() string {
+       if u == nil || u.FollowersURL == nil {
+               return ""
+       }
+       return *u.FollowersURL
+}
+
+// GetFollowing returns the Following field if it's non-nil, zero value otherwise.
+func (u *User) GetFollowing() int {
+       if u == nil || u.Following == nil {
+               return 0
+       }
+       return *u.Following
+}
+
+// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise.
+func (u *User) GetFollowingURL() string {
+       if u == nil || u.FollowingURL == nil {
+               return ""
+       }
+       return *u.FollowingURL
+}
+
+// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise.
+func (u *User) GetGistsURL() string {
+       if u == nil || u.GistsURL == nil {
+               return ""
+       }
+       return *u.GistsURL
+}
+
+// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise.
+func (u *User) GetGravatarID() string {
+       if u == nil || u.GravatarID == nil {
+               return ""
+       }
+       return *u.GravatarID
+}
+
+// GetHireable returns the Hireable field if it's non-nil, zero value otherwise.
+func (u *User) GetHireable() bool {
+       if u == nil || u.Hireable == nil {
+               return false
+       }
+       return *u.Hireable
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (u *User) GetHTMLURL() string {
+       if u == nil || u.HTMLURL == nil {
+               return ""
+       }
+       return *u.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (u *User) GetID() int64 {
+       if u == nil || u.ID == nil {
+               return 0
+       }
+       return *u.ID
+}
+
+// GetLdapDn returns the LdapDn field if it's non-nil, zero value otherwise.
+func (u *User) GetLdapDn() string {
+       if u == nil || u.LdapDn == nil {
+               return ""
+       }
+       return *u.LdapDn
+}
+
+// GetLocation returns the Location field if it's non-nil, zero value otherwise.
+func (u *User) GetLocation() string {
+       if u == nil || u.Location == nil {
+               return ""
+       }
+       return *u.Location
+}
+
+// GetLogin returns the Login field if it's non-nil, zero value otherwise.
+func (u *User) GetLogin() string {
+       if u == nil || u.Login == nil {
+               return ""
+       }
+       return *u.Login
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (u *User) GetName() string {
+       if u == nil || u.Name == nil {
+               return ""
+       }
+       return *u.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (u *User) GetNodeID() string {
+       if u == nil || u.NodeID == nil {
+               return ""
+       }
+       return *u.NodeID
+}
+
+// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise.
+func (u *User) GetOrganizationsURL() string {
+       if u == nil || u.OrganizationsURL == nil {
+               return ""
+       }
+       return *u.OrganizationsURL
+}
+
+// GetOwnedPrivateRepos returns the OwnedPrivateRepos field if it's non-nil, zero value otherwise.
+func (u *User) GetOwnedPrivateRepos() int {
+       if u == nil || u.OwnedPrivateRepos == nil {
+               return 0
+       }
+       return *u.OwnedPrivateRepos
+}
+
+// GetPermissions returns the Permissions map if it's non-nil, an empty map otherwise.
+func (u *User) GetPermissions() map[string]bool {
+       if u == nil || u.Permissions == nil {
+               return map[string]bool{}
+       }
+       return u.Permissions
+}
+
+// GetPlan returns the Plan field.
+func (u *User) GetPlan() *Plan {
+       if u == nil {
+               return nil
+       }
+       return u.Plan
+}
+
+// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise.
+func (u *User) GetPrivateGists() int {
+       if u == nil || u.PrivateGists == nil {
+               return 0
+       }
+       return *u.PrivateGists
+}
+
+// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise.
+func (u *User) GetPublicGists() int {
+       if u == nil || u.PublicGists == nil {
+               return 0
+       }
+       return *u.PublicGists
+}
+
+// GetPublicRepos returns the PublicRepos field if it's non-nil, zero value otherwise.
+func (u *User) GetPublicRepos() int {
+       if u == nil || u.PublicRepos == nil {
+               return 0
+       }
+       return *u.PublicRepos
+}
+
+// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise.
+func (u *User) GetReceivedEventsURL() string {
+       if u == nil || u.ReceivedEventsURL == nil {
+               return ""
+       }
+       return *u.ReceivedEventsURL
+}
+
+// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise.
+func (u *User) GetReposURL() string {
+       if u == nil || u.ReposURL == nil {
+               return ""
+       }
+       return *u.ReposURL
+}
+
+// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise.
+func (u *User) GetSiteAdmin() bool {
+       if u == nil || u.SiteAdmin == nil {
+               return false
+       }
+       return *u.SiteAdmin
+}
+
+// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise.
+func (u *User) GetStarredURL() string {
+       if u == nil || u.StarredURL == nil {
+               return ""
+       }
+       return *u.StarredURL
+}
+
+// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise.
+func (u *User) GetSubscriptionsURL() string {
+       if u == nil || u.SubscriptionsURL == nil {
+               return ""
+       }
+       return *u.SubscriptionsURL
+}
+
+// GetSuspendedAt returns the SuspendedAt field if it's non-nil, zero value otherwise.
+func (u *User) GetSuspendedAt() Timestamp {
+       if u == nil || u.SuspendedAt == nil {
+               return Timestamp{}
+       }
+       return *u.SuspendedAt
+}
+
+// GetTotalPrivateRepos returns the TotalPrivateRepos field if it's non-nil, zero value otherwise.
+func (u *User) GetTotalPrivateRepos() int {
+       if u == nil || u.TotalPrivateRepos == nil {
+               return 0
+       }
+       return *u.TotalPrivateRepos
+}
+
+// GetTwitterUsername returns the TwitterUsername field if it's non-nil, zero value otherwise.
+func (u *User) GetTwitterUsername() string {
+       if u == nil || u.TwitterUsername == nil {
+               return ""
+       }
+       return *u.TwitterUsername
+}
+
+// GetTwoFactorAuthentication returns the TwoFactorAuthentication field if it's non-nil, zero value otherwise.
+func (u *User) GetTwoFactorAuthentication() bool {
+       if u == nil || u.TwoFactorAuthentication == nil {
+               return false
+       }
+       return *u.TwoFactorAuthentication
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (u *User) GetType() string {
+       if u == nil || u.Type == nil {
+               return ""
+       }
+       return *u.Type
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (u *User) GetUpdatedAt() Timestamp {
+       if u == nil || u.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *u.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (u *User) GetURL() string {
+       if u == nil || u.URL == nil {
+               return ""
+       }
+       return *u.URL
+}
+
+// GetApp returns the App field.
+func (u *UserAuthorization) GetApp() *OAuthAPP {
+       if u == nil {
+               return nil
+       }
+       return u.App
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (u *UserAuthorization) GetCreatedAt() Timestamp {
+       if u == nil || u.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *u.CreatedAt
+}
+
+// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise.
+func (u *UserAuthorization) GetFingerprint() string {
+       if u == nil || u.Fingerprint == nil {
+               return ""
+       }
+       return *u.Fingerprint
+}
+
+// GetHashedToken returns the HashedToken field if it's non-nil, zero value otherwise.
+func (u *UserAuthorization) GetHashedToken() string {
+       if u == nil || u.HashedToken == nil {
+               return ""
+       }
+       return *u.HashedToken
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (u *UserAuthorization) GetID() int64 {
+       if u == nil || u.ID == nil {
+               return 0
+       }
+       return *u.ID
+}
+
+// GetNote returns the Note field if it's non-nil, zero value otherwise.
+func (u *UserAuthorization) GetNote() string {
+       if u == nil || u.Note == nil {
+               return ""
+       }
+       return *u.Note
+}
+
+// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise.
+func (u *UserAuthorization) GetNoteURL() string {
+       if u == nil || u.NoteURL == nil {
+               return ""
+       }
+       return *u.NoteURL
+}
+
+// GetToken returns the Token field if it's non-nil, zero value otherwise.
+func (u *UserAuthorization) GetToken() string {
+       if u == nil || u.Token == nil {
+               return ""
+       }
+       return *u.Token
+}
+
+// GetTokenLastEight returns the TokenLastEight field if it's non-nil, zero value otherwise.
+func (u *UserAuthorization) GetTokenLastEight() string {
+       if u == nil || u.TokenLastEight == nil {
+               return ""
+       }
+       return *u.TokenLastEight
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (u *UserAuthorization) GetUpdatedAt() Timestamp {
+       if u == nil || u.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *u.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (u *UserAuthorization) GetURL() string {
+       if u == nil || u.URL == nil {
+               return ""
+       }
+       return *u.URL
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (u *UserContext) GetMessage() string {
+       if u == nil || u.Message == nil {
+               return ""
+       }
+       return *u.Message
+}
+
+// GetOcticon returns the Octicon field if it's non-nil, zero value otherwise.
+func (u *UserContext) GetOcticon() string {
+       if u == nil || u.Octicon == nil {
+               return ""
+       }
+       return *u.Octicon
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (u *UserEmail) GetEmail() string {
+       if u == nil || u.Email == nil {
+               return ""
+       }
+       return *u.Email
+}
+
+// GetPrimary returns the Primary field if it's non-nil, zero value otherwise.
+func (u *UserEmail) GetPrimary() bool {
+       if u == nil || u.Primary == nil {
+               return false
+       }
+       return *u.Primary
+}
+
+// GetVerified returns the Verified field if it's non-nil, zero value otherwise.
+func (u *UserEmail) GetVerified() bool {
+       if u == nil || u.Verified == nil {
+               return false
+       }
+       return *u.Verified
+}
+
+// GetVisibility returns the Visibility field if it's non-nil, zero value otherwise.
+func (u *UserEmail) GetVisibility() string {
+       if u == nil || u.Visibility == nil {
+               return ""
+       }
+       return *u.Visibility
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (u *UserEvent) GetAction() string {
+       if u == nil || u.Action == nil {
+               return ""
+       }
+       return *u.Action
+}
+
+// GetEnterprise returns the Enterprise field.
+func (u *UserEvent) GetEnterprise() *Enterprise {
+       if u == nil {
+               return nil
+       }
+       return u.Enterprise
+}
+
+// GetSender returns the Sender field.
+func (u *UserEvent) GetSender() *User {
+       if u == nil {
+               return nil
+       }
+       return u.Sender
+}
+
+// GetUser returns the User field.
+func (u *UserEvent) GetUser() *User {
+       if u == nil {
+               return nil
+       }
+       return u.User
+}
+
+// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetAvatarURL() string {
+       if u == nil || u.AvatarURL == nil {
+               return ""
+       }
+       return *u.AvatarURL
+}
+
+// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetEventsURL() string {
+       if u == nil || u.EventsURL == nil {
+               return ""
+       }
+       return *u.EventsURL
+}
+
+// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetFollowersURL() string {
+       if u == nil || u.FollowersURL == nil {
+               return ""
+       }
+       return *u.FollowersURL
+}
+
+// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetFollowingURL() string {
+       if u == nil || u.FollowingURL == nil {
+               return ""
+       }
+       return *u.FollowingURL
+}
+
+// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetGistsURL() string {
+       if u == nil || u.GistsURL == nil {
+               return ""
+       }
+       return *u.GistsURL
+}
+
+// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetGravatarID() string {
+       if u == nil || u.GravatarID == nil {
+               return ""
+       }
+       return *u.GravatarID
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetID() int64 {
+       if u == nil || u.ID == nil {
+               return 0
+       }
+       return *u.ID
+}
+
+// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetLDAPDN() string {
+       if u == nil || u.LDAPDN == nil {
+               return ""
+       }
+       return *u.LDAPDN
+}
+
+// GetLogin returns the Login field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetLogin() string {
+       if u == nil || u.Login == nil {
+               return ""
+       }
+       return *u.Login
+}
+
+// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetOrganizationsURL() string {
+       if u == nil || u.OrganizationsURL == nil {
+               return ""
+       }
+       return *u.OrganizationsURL
+}
+
+// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetReceivedEventsURL() string {
+       if u == nil || u.ReceivedEventsURL == nil {
+               return ""
+       }
+       return *u.ReceivedEventsURL
+}
+
+// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetReposURL() string {
+       if u == nil || u.ReposURL == nil {
+               return ""
+       }
+       return *u.ReposURL
+}
+
+// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetSiteAdmin() bool {
+       if u == nil || u.SiteAdmin == nil {
+               return false
+       }
+       return *u.SiteAdmin
+}
+
+// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetStarredURL() string {
+       if u == nil || u.StarredURL == nil {
+               return ""
+       }
+       return *u.StarredURL
+}
+
+// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetSubscriptionsURL() string {
+       if u == nil || u.SubscriptionsURL == nil {
+               return ""
+       }
+       return *u.SubscriptionsURL
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetType() string {
+       if u == nil || u.Type == nil {
+               return ""
+       }
+       return *u.Type
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (u *UserLDAPMapping) GetURL() string {
+       if u == nil || u.URL == nil {
+               return ""
+       }
+       return *u.URL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetCreatedAt() string {
+       if u == nil || u.CreatedAt == nil {
+               return ""
+       }
+       return *u.CreatedAt
+}
+
+// GetExcludeAttachments returns the ExcludeAttachments field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetExcludeAttachments() bool {
+       if u == nil || u.ExcludeAttachments == nil {
+               return false
+       }
+       return *u.ExcludeAttachments
+}
+
+// GetGUID returns the GUID field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetGUID() string {
+       if u == nil || u.GUID == nil {
+               return ""
+       }
+       return *u.GUID
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetID() int64 {
+       if u == nil || u.ID == nil {
+               return 0
+       }
+       return *u.ID
+}
+
+// GetLockRepositories returns the LockRepositories field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetLockRepositories() bool {
+       if u == nil || u.LockRepositories == nil {
+               return false
+       }
+       return *u.LockRepositories
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetState() string {
+       if u == nil || u.State == nil {
+               return ""
+       }
+       return *u.State
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetUpdatedAt() string {
+       if u == nil || u.UpdatedAt == nil {
+               return ""
+       }
+       return *u.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (u *UserMigration) GetURL() string {
+       if u == nil || u.URL == nil {
+               return ""
+       }
+       return *u.URL
+}
+
+// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise.
+func (u *UsersSearchResult) GetIncompleteResults() bool {
+       if u == nil || u.IncompleteResults == nil {
+               return false
+       }
+       return *u.IncompleteResults
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (u *UsersSearchResult) GetTotal() int {
+       if u == nil || u.Total == nil {
+               return 0
+       }
+       return *u.Total
+}
+
+// GetAdminUsers returns the AdminUsers field if it's non-nil, zero value otherwise.
+func (u *UserStats) GetAdminUsers() int {
+       if u == nil || u.AdminUsers == nil {
+               return 0
+       }
+       return *u.AdminUsers
+}
+
+// GetSuspendedUsers returns the SuspendedUsers field if it's non-nil, zero value otherwise.
+func (u *UserStats) GetSuspendedUsers() int {
+       if u == nil || u.SuspendedUsers == nil {
+               return 0
+       }
+       return *u.SuspendedUsers
+}
+
+// GetTotalUsers returns the TotalUsers field if it's non-nil, zero value otherwise.
+func (u *UserStats) GetTotalUsers() int {
+       if u == nil || u.TotalUsers == nil {
+               return 0
+       }
+       return *u.TotalUsers
+}
+
+// GetReason returns the Reason field if it's non-nil, zero value otherwise.
+func (u *UserSuspendOptions) GetReason() string {
+       if u == nil || u.Reason == nil {
+               return ""
+       }
+       return *u.Reason
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (w *WatchEvent) GetAction() string {
+       if w == nil || w.Action == nil {
+               return ""
+       }
+       return *w.Action
+}
+
+// GetInstallation returns the Installation field.
+func (w *WatchEvent) GetInstallation() *Installation {
+       if w == nil {
+               return nil
+       }
+       return w.Installation
+}
+
+// GetRepo returns the Repo field.
+func (w *WatchEvent) GetRepo() *Repository {
+       if w == nil {
+               return nil
+       }
+       return w.Repo
+}
+
+// GetSender returns the Sender field.
+func (w *WatchEvent) GetSender() *User {
+       if w == nil {
+               return nil
+       }
+       return w.Sender
+}
+
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (w *WebHookAuthor) GetEmail() string {
+       if w == nil || w.Email == nil {
+               return ""
+       }
+       return *w.Email
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (w *WebHookAuthor) GetName() string {
+       if w == nil || w.Name == nil {
+               return ""
+       }
+       return *w.Name
+}
+
+// GetUsername returns the Username field if it's non-nil, zero value otherwise.
+func (w *WebHookAuthor) GetUsername() string {
+       if w == nil || w.Username == nil {
+               return ""
+       }
+       return *w.Username
+}
+
+// GetAuthor returns the Author field.
+func (w *WebHookCommit) GetAuthor() *WebHookAuthor {
+       if w == nil {
+               return nil
+       }
+       return w.Author
+}
+
+// GetCommitter returns the Committer field.
+func (w *WebHookCommit) GetCommitter() *WebHookAuthor {
+       if w == nil {
+               return nil
+       }
+       return w.Committer
+}
+
+// GetDistinct returns the Distinct field if it's non-nil, zero value otherwise.
+func (w *WebHookCommit) GetDistinct() bool {
+       if w == nil || w.Distinct == nil {
+               return false
+       }
+       return *w.Distinct
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (w *WebHookCommit) GetID() string {
+       if w == nil || w.ID == nil {
+               return ""
+       }
+       return *w.ID
+}
+
+// GetMessage returns the Message field if it's non-nil, zero value otherwise.
+func (w *WebHookCommit) GetMessage() string {
+       if w == nil || w.Message == nil {
+               return ""
+       }
+       return *w.Message
+}
+
+// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise.
+func (w *WebHookCommit) GetTimestamp() time.Time {
+       if w == nil || w.Timestamp == nil {
+               return time.Time{}
+       }
+       return *w.Timestamp
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (w *WebHookPayload) GetAction() string {
+       if w == nil || w.Action == nil {
+               return ""
+       }
+       return *w.Action
+}
+
+// GetAfter returns the After field if it's non-nil, zero value otherwise.
+func (w *WebHookPayload) GetAfter() string {
+       if w == nil || w.After == nil {
+               return ""
+       }
+       return *w.After
+}
+
+// GetBefore returns the Before field if it's non-nil, zero value otherwise.
+func (w *WebHookPayload) GetBefore() string {
+       if w == nil || w.Before == nil {
+               return ""
+       }
+       return *w.Before
+}
+
+// GetCompare returns the Compare field if it's non-nil, zero value otherwise.
+func (w *WebHookPayload) GetCompare() string {
+       if w == nil || w.Compare == nil {
+               return ""
+       }
+       return *w.Compare
+}
+
+// GetCreated returns the Created field if it's non-nil, zero value otherwise.
+func (w *WebHookPayload) GetCreated() bool {
+       if w == nil || w.Created == nil {
+               return false
+       }
+       return *w.Created
+}
+
+// GetDeleted returns the Deleted field if it's non-nil, zero value otherwise.
+func (w *WebHookPayload) GetDeleted() bool {
+       if w == nil || w.Deleted == nil {
+               return false
+       }
+       return *w.Deleted
+}
+
+// GetForced returns the Forced field if it's non-nil, zero value otherwise.
+func (w *WebHookPayload) GetForced() bool {
+       if w == nil || w.Forced == nil {
+               return false
+       }
+       return *w.Forced
+}
+
+// GetHeadCommit returns the HeadCommit field.
+func (w *WebHookPayload) GetHeadCommit() *WebHookCommit {
+       if w == nil {
+               return nil
+       }
+       return w.HeadCommit
+}
+
+// GetInstallation returns the Installation field.
+func (w *WebHookPayload) GetInstallation() *Installation {
+       if w == nil {
+               return nil
+       }
+       return w.Installation
+}
+
+// GetOrganization returns the Organization field.
+func (w *WebHookPayload) GetOrganization() *Organization {
+       if w == nil {
+               return nil
+       }
+       return w.Organization
+}
+
+// GetPusher returns the Pusher field.
+func (w *WebHookPayload) GetPusher() *User {
+       if w == nil {
+               return nil
+       }
+       return w.Pusher
+}
+
+// GetRef returns the Ref field if it's non-nil, zero value otherwise.
+func (w *WebHookPayload) GetRef() string {
+       if w == nil || w.Ref == nil {
+               return ""
+       }
+       return *w.Ref
+}
+
+// GetRepo returns the Repo field.
+func (w *WebHookPayload) GetRepo() *Repository {
+       if w == nil {
+               return nil
+       }
+       return w.Repo
+}
+
+// GetSender returns the Sender field.
+func (w *WebHookPayload) GetSender() *User {
+       if w == nil {
+               return nil
+       }
+       return w.Sender
+}
+
+// GetTotal returns the Total field if it's non-nil, zero value otherwise.
+func (w *WeeklyCommitActivity) GetTotal() int {
+       if w == nil || w.Total == nil {
+               return 0
+       }
+       return *w.Total
+}
+
+// GetWeek returns the Week field if it's non-nil, zero value otherwise.
+func (w *WeeklyCommitActivity) GetWeek() Timestamp {
+       if w == nil || w.Week == nil {
+               return Timestamp{}
+       }
+       return *w.Week
+}
+
+// GetAdditions returns the Additions field if it's non-nil, zero value otherwise.
+func (w *WeeklyStats) GetAdditions() int {
+       if w == nil || w.Additions == nil {
+               return 0
+       }
+       return *w.Additions
+}
+
+// GetCommits returns the Commits field if it's non-nil, zero value otherwise.
+func (w *WeeklyStats) GetCommits() int {
+       if w == nil || w.Commits == nil {
+               return 0
+       }
+       return *w.Commits
+}
+
+// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise.
+func (w *WeeklyStats) GetDeletions() int {
+       if w == nil || w.Deletions == nil {
+               return 0
+       }
+       return *w.Deletions
+}
+
+// GetWeek returns the Week field if it's non-nil, zero value otherwise.
+func (w *WeeklyStats) GetWeek() Timestamp {
+       if w == nil || w.Week == nil {
+               return Timestamp{}
+       }
+       return *w.Week
+}
+
+// GetBadgeURL returns the BadgeURL field if it's non-nil, zero value otherwise.
+func (w *Workflow) GetBadgeURL() string {
+       if w == nil || w.BadgeURL == nil {
+               return ""
+       }
+       return *w.BadgeURL
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (w *Workflow) GetCreatedAt() Timestamp {
+       if w == nil || w.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *w.CreatedAt
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (w *Workflow) GetHTMLURL() string {
+       if w == nil || w.HTMLURL == nil {
+               return ""
+       }
+       return *w.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (w *Workflow) GetID() int64 {
+       if w == nil || w.ID == nil {
+               return 0
+       }
+       return *w.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (w *Workflow) GetName() string {
+       if w == nil || w.Name == nil {
+               return ""
+       }
+       return *w.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (w *Workflow) GetNodeID() string {
+       if w == nil || w.NodeID == nil {
+               return ""
+       }
+       return *w.NodeID
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (w *Workflow) GetPath() string {
+       if w == nil || w.Path == nil {
+               return ""
+       }
+       return *w.Path
+}
+
+// GetState returns the State field if it's non-nil, zero value otherwise.
+func (w *Workflow) GetState() string {
+       if w == nil || w.State == nil {
+               return ""
+       }
+       return *w.State
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (w *Workflow) GetUpdatedAt() Timestamp {
+       if w == nil || w.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *w.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (w *Workflow) GetURL() string {
+       if w == nil || w.URL == nil {
+               return ""
+       }
+       return *w.URL
+}
+
+// GetTotalMS returns the TotalMS field if it's non-nil, zero value otherwise.
+func (w *WorkflowBill) GetTotalMS() int64 {
+       if w == nil || w.TotalMS == nil {
+               return 0
+       }
+       return *w.TotalMS
+}
+
+// GetOrg returns the Org field.
+func (w *WorkflowDispatchEvent) GetOrg() *Organization {
+       if w == nil {
+               return nil
+       }
+       return w.Org
+}
+
+// GetRef returns the Ref field if it's non-nil, zero value otherwise.
+func (w *WorkflowDispatchEvent) GetRef() string {
+       if w == nil || w.Ref == nil {
+               return ""
+       }
+       return *w.Ref
+}
+
+// GetRepo returns the Repo field.
+func (w *WorkflowDispatchEvent) GetRepo() *Repository {
+       if w == nil {
+               return nil
+       }
+       return w.Repo
+}
+
+// GetSender returns the Sender field.
+func (w *WorkflowDispatchEvent) GetSender() *User {
+       if w == nil {
+               return nil
+       }
+       return w.Sender
+}
+
+// GetWorkflow returns the Workflow field if it's non-nil, zero value otherwise.
+func (w *WorkflowDispatchEvent) GetWorkflow() string {
+       if w == nil || w.Workflow == nil {
+               return ""
+       }
+       return *w.Workflow
+}
+
+// GetMacOS returns the MacOS field.
+func (w *WorkflowEnvironment) GetMacOS() *WorkflowBill {
+       if w == nil {
+               return nil
+       }
+       return w.MacOS
+}
+
+// GetUbuntu returns the Ubuntu field.
+func (w *WorkflowEnvironment) GetUbuntu() *WorkflowBill {
+       if w == nil {
+               return nil
+       }
+       return w.Ubuntu
+}
+
+// GetWindows returns the Windows field.
+func (w *WorkflowEnvironment) GetWindows() *WorkflowBill {
+       if w == nil {
+               return nil
+       }
+       return w.Windows
+}
+
+// GetCheckRunURL returns the CheckRunURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetCheckRunURL() string {
+       if w == nil || w.CheckRunURL == nil {
+               return ""
+       }
+       return *w.CheckRunURL
+}
+
+// GetCompletedAt returns the CompletedAt field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetCompletedAt() Timestamp {
+       if w == nil || w.CompletedAt == nil {
+               return Timestamp{}
+       }
+       return *w.CompletedAt
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetConclusion() string {
+       if w == nil || w.Conclusion == nil {
+               return ""
+       }
+       return *w.Conclusion
+}
+
+// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetHeadSHA() string {
+       if w == nil || w.HeadSHA == nil {
+               return ""
+       }
+       return *w.HeadSHA
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetHTMLURL() string {
+       if w == nil || w.HTMLURL == nil {
+               return ""
+       }
+       return *w.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetID() int64 {
+       if w == nil || w.ID == nil {
+               return 0
+       }
+       return *w.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetName() string {
+       if w == nil || w.Name == nil {
+               return ""
+       }
+       return *w.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetNodeID() string {
+       if w == nil || w.NodeID == nil {
+               return ""
+       }
+       return *w.NodeID
+}
+
+// GetRunID returns the RunID field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetRunID() int64 {
+       if w == nil || w.RunID == nil {
+               return 0
+       }
+       return *w.RunID
+}
+
+// GetRunURL returns the RunURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetRunURL() string {
+       if w == nil || w.RunURL == nil {
+               return ""
+       }
+       return *w.RunURL
+}
+
+// GetStartedAt returns the StartedAt field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetStartedAt() Timestamp {
+       if w == nil || w.StartedAt == nil {
+               return Timestamp{}
+       }
+       return *w.StartedAt
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetStatus() string {
+       if w == nil || w.Status == nil {
+               return ""
+       }
+       return *w.Status
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (w *WorkflowJob) GetURL() string {
+       if w == nil || w.URL == nil {
+               return ""
+       }
+       return *w.URL
+}
+
+// GetArtifactsURL returns the ArtifactsURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetArtifactsURL() string {
+       if w == nil || w.ArtifactsURL == nil {
+               return ""
+       }
+       return *w.ArtifactsURL
+}
+
+// GetCancelURL returns the CancelURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetCancelURL() string {
+       if w == nil || w.CancelURL == nil {
+               return ""
+       }
+       return *w.CancelURL
+}
+
+// GetCheckSuiteURL returns the CheckSuiteURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetCheckSuiteURL() string {
+       if w == nil || w.CheckSuiteURL == nil {
+               return ""
+       }
+       return *w.CheckSuiteURL
+}
+
+// GetConclusion returns the Conclusion field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetConclusion() string {
+       if w == nil || w.Conclusion == nil {
+               return ""
+       }
+       return *w.Conclusion
+}
+
+// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetCreatedAt() Timestamp {
+       if w == nil || w.CreatedAt == nil {
+               return Timestamp{}
+       }
+       return *w.CreatedAt
+}
+
+// GetEvent returns the Event field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetEvent() string {
+       if w == nil || w.Event == nil {
+               return ""
+       }
+       return *w.Event
+}
+
+// GetHeadBranch returns the HeadBranch field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetHeadBranch() string {
+       if w == nil || w.HeadBranch == nil {
+               return ""
+       }
+       return *w.HeadBranch
+}
+
+// GetHeadCommit returns the HeadCommit field.
+func (w *WorkflowRun) GetHeadCommit() *HeadCommit {
+       if w == nil {
+               return nil
+       }
+       return w.HeadCommit
+}
+
+// GetHeadRepository returns the HeadRepository field.
+func (w *WorkflowRun) GetHeadRepository() *Repository {
+       if w == nil {
+               return nil
+       }
+       return w.HeadRepository
+}
+
+// GetHeadSHA returns the HeadSHA field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetHeadSHA() string {
+       if w == nil || w.HeadSHA == nil {
+               return ""
+       }
+       return *w.HeadSHA
+}
+
+// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetHTMLURL() string {
+       if w == nil || w.HTMLURL == nil {
+               return ""
+       }
+       return *w.HTMLURL
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetID() int64 {
+       if w == nil || w.ID == nil {
+               return 0
+       }
+       return *w.ID
+}
+
+// GetJobsURL returns the JobsURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetJobsURL() string {
+       if w == nil || w.JobsURL == nil {
+               return ""
+       }
+       return *w.JobsURL
+}
+
+// GetLogsURL returns the LogsURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetLogsURL() string {
+       if w == nil || w.LogsURL == nil {
+               return ""
+       }
+       return *w.LogsURL
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetName() string {
+       if w == nil || w.Name == nil {
+               return ""
+       }
+       return *w.Name
+}
+
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetNodeID() string {
+       if w == nil || w.NodeID == nil {
+               return ""
+       }
+       return *w.NodeID
+}
+
+// GetRepository returns the Repository field.
+func (w *WorkflowRun) GetRepository() *Repository {
+       if w == nil {
+               return nil
+       }
+       return w.Repository
+}
+
+// GetRerunURL returns the RerunURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetRerunURL() string {
+       if w == nil || w.RerunURL == nil {
+               return ""
+       }
+       return *w.RerunURL
+}
+
+// GetRunNumber returns the RunNumber field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetRunNumber() int {
+       if w == nil || w.RunNumber == nil {
+               return 0
+       }
+       return *w.RunNumber
+}
+
+// GetStatus returns the Status field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetStatus() string {
+       if w == nil || w.Status == nil {
+               return ""
+       }
+       return *w.Status
+}
+
+// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetUpdatedAt() Timestamp {
+       if w == nil || w.UpdatedAt == nil {
+               return Timestamp{}
+       }
+       return *w.UpdatedAt
+}
+
+// GetURL returns the URL field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetURL() string {
+       if w == nil || w.URL == nil {
+               return ""
+       }
+       return *w.URL
+}
+
+// GetWorkflowID returns the WorkflowID field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetWorkflowID() int64 {
+       if w == nil || w.WorkflowID == nil {
+               return 0
+       }
+       return *w.WorkflowID
+}
+
+// GetWorkflowURL returns the WorkflowURL field if it's non-nil, zero value otherwise.
+func (w *WorkflowRun) GetWorkflowURL() string {
+       if w == nil || w.WorkflowURL == nil {
+               return ""
+       }
+       return *w.WorkflowURL
+}
+
+// GetJobs returns the Jobs field if it's non-nil, zero value otherwise.
+func (w *WorkflowRunBill) GetJobs() int {
+       if w == nil || w.Jobs == nil {
+               return 0
+       }
+       return *w.Jobs
+}
+
+// GetTotalMS returns the TotalMS field if it's non-nil, zero value otherwise.
+func (w *WorkflowRunBill) GetTotalMS() int64 {
+       if w == nil || w.TotalMS == nil {
+               return 0
+       }
+       return *w.TotalMS
+}
+
+// GetMacOS returns the MacOS field.
+func (w *WorkflowRunEnvironment) GetMacOS() *WorkflowRunBill {
+       if w == nil {
+               return nil
+       }
+       return w.MacOS
+}
+
+// GetUbuntu returns the Ubuntu field.
+func (w *WorkflowRunEnvironment) GetUbuntu() *WorkflowRunBill {
+       if w == nil {
+               return nil
+       }
+       return w.Ubuntu
+}
+
+// GetWindows returns the Windows field.
+func (w *WorkflowRunEnvironment) GetWindows() *WorkflowRunBill {
+       if w == nil {
+               return nil
+       }
+       return w.Windows
+}
+
+// GetAction returns the Action field if it's non-nil, zero value otherwise.
+func (w *WorkflowRunEvent) GetAction() string {
+       if w == nil || w.Action == nil {
+               return ""
+       }
+       return *w.Action
+}
+
+// GetOrg returns the Org field.
+func (w *WorkflowRunEvent) GetOrg() *Organization {
+       if w == nil {
+               return nil
+       }
+       return w.Org
+}
+
+// GetRepo returns the Repo field.
+func (w *WorkflowRunEvent) GetRepo() *Repository {
+       if w == nil {
+               return nil
+       }
+       return w.Repo
+}
+
+// GetSender returns the Sender field.
+func (w *WorkflowRunEvent) GetSender() *User {
+       if w == nil {
+               return nil
+       }
+       return w.Sender
+}
+
+// GetWorkflow returns the Workflow field.
+func (w *WorkflowRunEvent) GetWorkflow() *Workflow {
+       if w == nil {
+               return nil
+       }
+       return w.Workflow
+}
+
+// GetWorkflowRun returns the WorkflowRun field.
+func (w *WorkflowRunEvent) GetWorkflowRun() *WorkflowRun {
+       if w == nil {
+               return nil
+       }
+       return w.WorkflowRun
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (w *WorkflowRuns) GetTotalCount() int {
+       if w == nil || w.TotalCount == nil {
+               return 0
+       }
+       return *w.TotalCount
+}
+
+// GetBillable returns the Billable field.
+func (w *WorkflowRunUsage) GetBillable() *WorkflowRunEnvironment {
+       if w == nil {
+               return nil
+       }
+       return w.Billable
+}
+
+// GetRunDurationMS returns the RunDurationMS field if it's non-nil, zero value otherwise.
+func (w *WorkflowRunUsage) GetRunDurationMS() int64 {
+       if w == nil || w.RunDurationMS == nil {
+               return 0
+       }
+       return *w.RunDurationMS
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (w *Workflows) GetTotalCount() int {
+       if w == nil || w.TotalCount == nil {
+               return 0
+       }
+       return *w.TotalCount
+}
+
+// GetBillable returns the Billable field.
+func (w *WorkflowUsage) GetBillable() *WorkflowEnvironment {
+       if w == nil {
+               return nil
+       }
+       return w.Billable
+}
diff --git a/vendor/github.com/google/go-github/v37/github/github.go b/vendor/github.com/google/go-github/v37/github/github.go
new file mode 100644 (file)
index 0000000..264e27f
--- /dev/null
@@ -0,0 +1,1209 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run gen-accessors.go
+//go:generate go run gen-stringify-test.go
+
+package github
+
+import (
+       "bytes"
+       "context"
+       "encoding/json"
+       "errors"
+       "fmt"
+       "io"
+       "io/ioutil"
+       "net/http"
+       "net/url"
+       "reflect"
+       "strconv"
+       "strings"
+       "sync"
+       "time"
+
+       "github.com/google/go-querystring/query"
+)
+
+const (
+       defaultBaseURL = "https://api.github.com/"
+       uploadBaseURL  = "https://uploads.github.com/"
+       userAgent      = "go-github"
+
+       headerRateLimit     = "X-RateLimit-Limit"
+       headerRateRemaining = "X-RateLimit-Remaining"
+       headerRateReset     = "X-RateLimit-Reset"
+       headerOTP           = "X-GitHub-OTP"
+
+       mediaTypeV3                = "application/vnd.github.v3+json"
+       defaultMediaType           = "application/octet-stream"
+       mediaTypeV3SHA             = "application/vnd.github.v3.sha"
+       mediaTypeV3Diff            = "application/vnd.github.v3.diff"
+       mediaTypeV3Patch           = "application/vnd.github.v3.patch"
+       mediaTypeOrgPermissionRepo = "application/vnd.github.v3.repository+json"
+       mediaTypeIssueImportAPI    = "application/vnd.github.golden-comet-preview+json"
+
+       // Media Type values to access preview APIs
+
+       // https://developer.github.com/changes/2014-12-09-new-attributes-for-stars-api/
+       mediaTypeStarringPreview = "application/vnd.github.v3.star+json"
+
+       // https://help.github.com/enterprise/2.4/admin/guides/migrations/exporting-the-github-com-organization-s-repositories/
+       mediaTypeMigrationsPreview = "application/vnd.github.wyandotte-preview+json"
+
+       // https://developer.github.com/changes/2016-04-06-deployment-and-deployment-status-enhancements/
+       mediaTypeDeploymentStatusPreview = "application/vnd.github.ant-man-preview+json"
+
+       // https://developer.github.com/changes/2018-10-16-deployments-environments-states-and-auto-inactive-updates/
+       mediaTypeExpandDeploymentStatusPreview = "application/vnd.github.flash-preview+json"
+
+       // https://developer.github.com/changes/2016-05-12-reactions-api-preview/
+       mediaTypeReactionsPreview = "application/vnd.github.squirrel-girl-preview"
+
+       // https://developer.github.com/changes/2016-05-23-timeline-preview-api/
+       mediaTypeTimelinePreview = "application/vnd.github.mockingbird-preview+json"
+
+       // https://developer.github.com/changes/2016-09-14-projects-api/
+       mediaTypeProjectsPreview = "application/vnd.github.inertia-preview+json"
+
+       // https://developer.github.com/changes/2017-01-05-commit-search-api/
+       mediaTypeCommitSearchPreview = "application/vnd.github.cloak-preview+json"
+
+       // https://developer.github.com/changes/2017-02-28-user-blocking-apis-and-webhook/
+       mediaTypeBlockUsersPreview = "application/vnd.github.giant-sentry-fist-preview+json"
+
+       // https://developer.github.com/changes/2017-02-09-community-health/
+       mediaTypeRepositoryCommunityHealthMetricsPreview = "application/vnd.github.black-panther-preview+json"
+
+       // https://developer.github.com/changes/2017-05-23-coc-api/
+       mediaTypeCodesOfConductPreview = "application/vnd.github.scarlet-witch-preview+json"
+
+       // https://developer.github.com/changes/2017-07-17-update-topics-on-repositories/
+       mediaTypeTopicsPreview = "application/vnd.github.mercy-preview+json"
+
+       // https://developer.github.com/changes/2018-03-16-protected-branches-required-approving-reviews/
+       mediaTypeRequiredApprovingReviewsPreview = "application/vnd.github.luke-cage-preview+json"
+
+       // https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/
+       mediaTypePreReceiveHooksPreview = "application/vnd.github.eye-scream-preview"
+
+       // https://developer.github.com/changes/2018-02-22-protected-branches-required-signatures/
+       mediaTypeSignaturePreview = "application/vnd.github.zzzax-preview+json"
+
+       // https://developer.github.com/changes/2018-09-05-project-card-events/
+       mediaTypeProjectCardDetailsPreview = "application/vnd.github.starfox-preview+json"
+
+       // https://developer.github.com/changes/2018-12-18-interactions-preview/
+       mediaTypeInteractionRestrictionsPreview = "application/vnd.github.sombra-preview+json"
+
+       // https://developer.github.com/changes/2019-03-14-enabling-disabling-pages/
+       mediaTypeEnablePagesAPIPreview = "application/vnd.github.switcheroo-preview+json"
+
+       // https://developer.github.com/changes/2019-04-24-vulnerability-alerts/
+       mediaTypeRequiredVulnerabilityAlertsPreview = "application/vnd.github.dorian-preview+json"
+
+       // https://developer.github.com/changes/2019-06-04-automated-security-fixes/
+       mediaTypeRequiredAutomatedSecurityFixesPreview = "application/vnd.github.london-preview+json"
+
+       // https://developer.github.com/changes/2019-05-29-update-branch-api/
+       mediaTypeUpdatePullRequestBranchPreview = "application/vnd.github.lydian-preview+json"
+
+       // https://developer.github.com/changes/2019-04-11-pulls-branches-for-commit/
+       mediaTypeListPullsOrBranchesForCommitPreview = "application/vnd.github.groot-preview+json"
+
+       // https://docs.github.com/en/free-pro-team@latest/rest/reference/previews/#repository-creation-permissions
+       mediaTypeMemberAllowedRepoCreationTypePreview = "application/vnd.github.surtur-preview+json"
+
+       // https://docs.github.com/en/free-pro-team@latest/rest/reference/previews/#create-and-use-repository-templates
+       mediaTypeRepositoryTemplatePreview = "application/vnd.github.baptiste-preview+json"
+
+       // https://developer.github.com/changes/2019-10-03-multi-line-comments/
+       mediaTypeMultiLineCommentsPreview = "application/vnd.github.comfort-fade-preview+json"
+
+       // https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api/
+       mediaTypeOAuthAppPreview = "application/vnd.github.doctor-strange-preview+json"
+
+       // https://developer.github.com/changes/2019-12-03-internal-visibility-changes/
+       mediaTypeRepositoryVisibilityPreview = "application/vnd.github.nebula-preview+json"
+
+       // https://developer.github.com/changes/2018-12-10-content-attachments-api/
+       mediaTypeContentAttachmentsPreview = "application/vnd.github.corsair-preview+json"
+)
+
+var errNonNilContext = errors.New("context must be non-nil")
+
+// A Client manages communication with the GitHub API.
+type Client struct {
+       clientMu sync.Mutex   // clientMu protects the client during calls that modify the CheckRedirect func.
+       client   *http.Client // HTTP client used to communicate with the API.
+
+       // Base URL for API requests. Defaults to the public GitHub API, but can be
+       // set to a domain endpoint to use with GitHub Enterprise. BaseURL should
+       // always be specified with a trailing slash.
+       BaseURL *url.URL
+
+       // Base URL for uploading files.
+       UploadURL *url.URL
+
+       // User agent used when communicating with the GitHub API.
+       UserAgent string
+
+       rateMu     sync.Mutex
+       rateLimits [categories]Rate // Rate limits for the client as determined by the most recent API calls.
+
+       common service // Reuse a single struct instead of allocating one for each service on the heap.
+
+       // Services used for talking to different parts of the GitHub API.
+       Actions        *ActionsService
+       Activity       *ActivityService
+       Admin          *AdminService
+       Apps           *AppsService
+       Authorizations *AuthorizationsService
+       Billing        *BillingService
+       Checks         *ChecksService
+       CodeScanning   *CodeScanningService
+       Enterprise     *EnterpriseService
+       Gists          *GistsService
+       Git            *GitService
+       Gitignores     *GitignoresService
+       Interactions   *InteractionsService
+       IssueImport    *IssueImportService
+       Issues         *IssuesService
+       Licenses       *LicensesService
+       Marketplace    *MarketplaceService
+       Migrations     *MigrationService
+       Organizations  *OrganizationsService
+       Projects       *ProjectsService
+       PullRequests   *PullRequestsService
+       Reactions      *ReactionsService
+       Repositories   *RepositoriesService
+       Search         *SearchService
+       Teams          *TeamsService
+       Users          *UsersService
+}
+
+type service struct {
+       client *Client
+}
+
+// ListOptions specifies the optional parameters to various List methods that
+// support offset pagination.
+type ListOptions struct {
+       // For paginated result sets, page of results to retrieve.
+       Page int `url:"page,omitempty"`
+
+       // For paginated result sets, the number of results to include per page.
+       PerPage int `url:"per_page,omitempty"`
+}
+
+// ListCursorOptions specifies the optional parameters to various List methods that
+// support cursor pagination.
+type ListCursorOptions struct {
+       // For paginated result sets, page of results to retrieve.
+       Page string `url:"page,omitempty"`
+
+       // For paginated result sets, the number of results to include per page.
+       PerPage int `url:"per_page,omitempty"`
+
+       // A cursor, as given in the Link header. If specified, the query only searches for events after this cursor.
+       After string `url:"after,omitempty"`
+
+       // A cursor, as given in the Link header. If specified, the query only searches for events before this cursor.
+       Before string `url:"before,omitempty"`
+}
+
+// UploadOptions specifies the parameters to methods that support uploads.
+type UploadOptions struct {
+       Name      string `url:"name,omitempty"`
+       Label     string `url:"label,omitempty"`
+       MediaType string `url:"-"`
+}
+
+// RawType represents type of raw format of a request instead of JSON.
+type RawType uint8
+
+const (
+       // Diff format.
+       Diff RawType = 1 + iota
+       // Patch format.
+       Patch
+)
+
+// RawOptions specifies parameters when user wants to get raw format of
+// a response instead of JSON.
+type RawOptions struct {
+       Type RawType
+}
+
+// addOptions adds the parameters in opts as URL query parameters to s. opts
+// must be a struct whose fields may contain "url" tags.
+func addOptions(s string, opts interface{}) (string, error) {
+       v := reflect.ValueOf(opts)
+       if v.Kind() == reflect.Ptr && v.IsNil() {
+               return s, nil
+       }
+
+       u, err := url.Parse(s)
+       if err != nil {
+               return s, err
+       }
+
+       qs, err := query.Values(opts)
+       if err != nil {
+               return s, err
+       }
+
+       u.RawQuery = qs.Encode()
+       return u.String(), nil
+}
+
+// NewClient returns a new GitHub API client. If a nil httpClient is
+// provided, a new http.Client will be used. To use API methods which require
+// authentication, provide an http.Client that will perform the authentication
+// for you (such as that provided by the golang.org/x/oauth2 library).
+func NewClient(httpClient *http.Client) *Client {
+       if httpClient == nil {
+               httpClient = &http.Client{}
+       }
+       baseURL, _ := url.Parse(defaultBaseURL)
+       uploadURL, _ := url.Parse(uploadBaseURL)
+
+       c := &Client{client: httpClient, BaseURL: baseURL, UserAgent: userAgent, UploadURL: uploadURL}
+       c.common.client = c
+       c.Actions = (*ActionsService)(&c.common)
+       c.Activity = (*ActivityService)(&c.common)
+       c.Admin = (*AdminService)(&c.common)
+       c.Apps = (*AppsService)(&c.common)
+       c.Authorizations = (*AuthorizationsService)(&c.common)
+       c.Billing = (*BillingService)(&c.common)
+       c.Checks = (*ChecksService)(&c.common)
+       c.CodeScanning = (*CodeScanningService)(&c.common)
+       c.Enterprise = (*EnterpriseService)(&c.common)
+       c.Gists = (*GistsService)(&c.common)
+       c.Git = (*GitService)(&c.common)
+       c.Gitignores = (*GitignoresService)(&c.common)
+       c.Interactions = (*InteractionsService)(&c.common)
+       c.IssueImport = (*IssueImportService)(&c.common)
+       c.Issues = (*IssuesService)(&c.common)
+       c.Licenses = (*LicensesService)(&c.common)
+       c.Marketplace = &MarketplaceService{client: c}
+       c.Migrations = (*MigrationService)(&c.common)
+       c.Organizations = (*OrganizationsService)(&c.common)
+       c.Projects = (*ProjectsService)(&c.common)
+       c.PullRequests = (*PullRequestsService)(&c.common)
+       c.Reactions = (*ReactionsService)(&c.common)
+       c.Repositories = (*RepositoriesService)(&c.common)
+       c.Search = (*SearchService)(&c.common)
+       c.Teams = (*TeamsService)(&c.common)
+       c.Users = (*UsersService)(&c.common)
+       return c
+}
+
+// NewEnterpriseClient returns a new GitHub API client with provided
+// base URL and upload URL (often is your GitHub Enterprise hostname).
+// If the base URL does not have the suffix "/api/v3/", it will be added automatically.
+// If the upload URL does not have the suffix "/api/uploads", it will be added automatically.
+// If a nil httpClient is provided, a new http.Client will be used.
+//
+// Note that NewEnterpriseClient is a convenience helper only;
+// its behavior is equivalent to using NewClient, followed by setting
+// the BaseURL and UploadURL fields.
+//
+// Another important thing is that by default, the GitHub Enterprise URL format
+// should be http(s)://[hostname]/api/v3/ or you will always receive the 406 status code.
+// The upload URL format should be http(s)://[hostname]/api/uploads/.
+func NewEnterpriseClient(baseURL, uploadURL string, httpClient *http.Client) (*Client, error) {
+       baseEndpoint, err := url.Parse(baseURL)
+       if err != nil {
+               return nil, err
+       }
+       if !strings.HasSuffix(baseEndpoint.Path, "/") {
+               baseEndpoint.Path += "/"
+       }
+       if !strings.HasSuffix(baseEndpoint.Path, "/api/v3/") &&
+               !strings.HasPrefix(baseEndpoint.Host, "api.") &&
+               !strings.Contains(baseEndpoint.Host, ".api.") {
+               baseEndpoint.Path += "api/v3/"
+       }
+
+       uploadEndpoint, err := url.Parse(uploadURL)
+       if err != nil {
+               return nil, err
+       }
+       if !strings.HasSuffix(uploadEndpoint.Path, "/") {
+               uploadEndpoint.Path += "/"
+       }
+       if !strings.HasSuffix(uploadEndpoint.Path, "/api/uploads/") &&
+               !strings.HasPrefix(uploadEndpoint.Host, "api.") &&
+               !strings.Contains(uploadEndpoint.Host, ".api.") {
+               uploadEndpoint.Path += "api/uploads/"
+       }
+
+       c := NewClient(httpClient)
+       c.BaseURL = baseEndpoint
+       c.UploadURL = uploadEndpoint
+       return c, nil
+}
+
+// NewRequest creates an API request. A relative URL can be provided in urlStr,
+// in which case it is resolved relative to the BaseURL of the Client.
+// Relative URLs should always be specified without a preceding slash. If
+// specified, the value pointed to by body is JSON encoded and included as the
+// request body.
+func (c *Client) NewRequest(method, urlStr string, body interface{}) (*http.Request, error) {
+       if !strings.HasSuffix(c.BaseURL.Path, "/") {
+               return nil, fmt.Errorf("BaseURL must have a trailing slash, but %q does not", c.BaseURL)
+       }
+       u, err := c.BaseURL.Parse(urlStr)
+       if err != nil {
+               return nil, err
+       }
+
+       var buf io.ReadWriter
+       if body != nil {
+               buf = &bytes.Buffer{}
+               enc := json.NewEncoder(buf)
+               enc.SetEscapeHTML(false)
+               err := enc.Encode(body)
+               if err != nil {
+                       return nil, err
+               }
+       }
+
+       req, err := http.NewRequest(method, u.String(), buf)
+       if err != nil {
+               return nil, err
+       }
+
+       if body != nil {
+               req.Header.Set("Content-Type", "application/json")
+       }
+       req.Header.Set("Accept", mediaTypeV3)
+       if c.UserAgent != "" {
+               req.Header.Set("User-Agent", c.UserAgent)
+       }
+       return req, nil
+}
+
+// NewUploadRequest creates an upload request. A relative URL can be provided in
+// urlStr, in which case it is resolved relative to the UploadURL of the Client.
+// Relative URLs should always be specified without a preceding slash.
+func (c *Client) NewUploadRequest(urlStr string, reader io.Reader, size int64, mediaType string) (*http.Request, error) {
+       if !strings.HasSuffix(c.UploadURL.Path, "/") {
+               return nil, fmt.Errorf("UploadURL must have a trailing slash, but %q does not", c.UploadURL)
+       }
+       u, err := c.UploadURL.Parse(urlStr)
+       if err != nil {
+               return nil, err
+       }
+
+       req, err := http.NewRequest("POST", u.String(), reader)
+       if err != nil {
+               return nil, err
+       }
+       req.ContentLength = size
+
+       if mediaType == "" {
+               mediaType = defaultMediaType
+       }
+       req.Header.Set("Content-Type", mediaType)
+       req.Header.Set("Accept", mediaTypeV3)
+       req.Header.Set("User-Agent", c.UserAgent)
+       return req, nil
+}
+
+// Response is a GitHub API response. This wraps the standard http.Response
+// returned from GitHub and provides convenient access to things like
+// pagination links.
+type Response struct {
+       *http.Response
+
+       // These fields provide the page values for paginating through a set of
+       // results. Any or all of these may be set to the zero value for
+       // responses that are not part of a paginated set, or for which there
+       // are no additional pages.
+       //
+       // These fields support what is called "offset pagination" and should
+       // be used with the ListOptions struct.
+       NextPage  int
+       PrevPage  int
+       FirstPage int
+       LastPage  int
+
+       // Additionally, some APIs support "cursor pagination" instead of offset.
+       // This means that a token points directly to the next record which
+       // can lead to O(1) performance compared to O(n) performance provided
+       // by offset pagination.
+       //
+       // For APIs that support cursor pagination (such as
+       // TeamsService.ListIDPGroupsInOrganization), the following field
+       // will be populated to point to the next page.
+       //
+       // To use this token, set ListCursorOptions.Page to this value before
+       // calling the endpoint again.
+       NextPageToken string
+
+       // Explicitly specify the Rate type so Rate's String() receiver doesn't
+       // propagate to Response.
+       Rate Rate
+}
+
+// newResponse creates a new Response for the provided http.Response.
+// r must not be nil.
+func newResponse(r *http.Response) *Response {
+       response := &Response{Response: r}
+       response.populatePageValues()
+       response.Rate = parseRate(r)
+       return response
+}
+
+// populatePageValues parses the HTTP Link response headers and populates the
+// various pagination link values in the Response.
+func (r *Response) populatePageValues() {
+       if links, ok := r.Response.Header["Link"]; ok && len(links) > 0 {
+               for _, link := range strings.Split(links[0], ",") {
+                       segments := strings.Split(strings.TrimSpace(link), ";")
+
+                       // link must at least have href and rel
+                       if len(segments) < 2 {
+                               continue
+                       }
+
+                       // ensure href is properly formatted
+                       if !strings.HasPrefix(segments[0], "<") || !strings.HasSuffix(segments[0], ">") {
+                               continue
+                       }
+
+                       // try to pull out page parameter
+                       url, err := url.Parse(segments[0][1 : len(segments[0])-1])
+                       if err != nil {
+                               continue
+                       }
+                       page := url.Query().Get("page")
+                       if page == "" {
+                               continue
+                       }
+
+                       for _, segment := range segments[1:] {
+                               switch strings.TrimSpace(segment) {
+                               case `rel="next"`:
+                                       if r.NextPage, err = strconv.Atoi(page); err != nil {
+                                               r.NextPageToken = page
+                                       }
+                               case `rel="prev"`:
+                                       r.PrevPage, _ = strconv.Atoi(page)
+                               case `rel="first"`:
+                                       r.FirstPage, _ = strconv.Atoi(page)
+                               case `rel="last"`:
+                                       r.LastPage, _ = strconv.Atoi(page)
+                               }
+
+                       }
+               }
+       }
+}
+
+// parseRate parses the rate related headers.
+func parseRate(r *http.Response) Rate {
+       var rate Rate
+       if limit := r.Header.Get(headerRateLimit); limit != "" {
+               rate.Limit, _ = strconv.Atoi(limit)
+       }
+       if remaining := r.Header.Get(headerRateRemaining); remaining != "" {
+               rate.Remaining, _ = strconv.Atoi(remaining)
+       }
+       if reset := r.Header.Get(headerRateReset); reset != "" {
+               if v, _ := strconv.ParseInt(reset, 10, 64); v != 0 {
+                       rate.Reset = Timestamp{time.Unix(v, 0)}
+               }
+       }
+       return rate
+}
+
+type requestContext uint8
+
+const (
+       bypassRateLimitCheck requestContext = iota
+)
+
+// BareDo sends an API request and lets you handle the api response. If an error
+// or API Error occurs, the error will contain more information. Otherwise you
+// are supposed to read and close the response's Body. If rate limit is exceeded
+// and reset time is in the future, BareDo returns *RateLimitError immediately
+// without making a network API call.
+//
+// The provided ctx must be non-nil, if it is nil an error is returned. If it is
+// canceled or times out, ctx.Err() will be returned.
+func (c *Client) BareDo(ctx context.Context, req *http.Request) (*Response, error) {
+       if ctx == nil {
+               return nil, errNonNilContext
+       }
+       req = withContext(ctx, req)
+
+       rateLimitCategory := category(req.URL.Path)
+
+       if bypass := ctx.Value(bypassRateLimitCheck); bypass == nil {
+               // If we've hit rate limit, don't make further requests before Reset time.
+               if err := c.checkRateLimitBeforeDo(req, rateLimitCategory); err != nil {
+                       return &Response{
+                               Response: err.Response,
+                               Rate:     err.Rate,
+                       }, err
+               }
+       }
+
+       resp, err := c.client.Do(req)
+       if err != nil {
+               // If we got an error, and the context has been canceled,
+               // the context's error is probably more useful.
+               select {
+               case <-ctx.Done():
+                       return nil, ctx.Err()
+               default:
+               }
+
+               // If the error type is *url.Error, sanitize its URL before returning.
+               if e, ok := err.(*url.Error); ok {
+                       if url, err := url.Parse(e.URL); err == nil {
+                               e.URL = sanitizeURL(url).String()
+                               return nil, e
+                       }
+               }
+
+               return nil, err
+       }
+
+       response := newResponse(resp)
+
+       c.rateMu.Lock()
+       c.rateLimits[rateLimitCategory] = response.Rate
+       c.rateMu.Unlock()
+
+       err = CheckResponse(resp)
+       if err != nil {
+               defer resp.Body.Close()
+               // Special case for AcceptedErrors. If an AcceptedError
+               // has been encountered, the response's payload will be
+               // added to the AcceptedError and returned.
+               //
+               // Issue #1022
+               aerr, ok := err.(*AcceptedError)
+               if ok {
+                       b, readErr := ioutil.ReadAll(resp.Body)
+                       if readErr != nil {
+                               return response, readErr
+                       }
+
+                       aerr.Raw = b
+                       err = aerr
+               }
+       }
+       return response, err
+}
+
+// Do sends an API request and returns the API response. The API response is
+// JSON decoded and stored in the value pointed to by v, or returned as an
+// error if an API error has occurred. If v implements the io.Writer interface,
+// the raw response body will be written to v, without attempting to first
+// decode it. If v is nil, and no error hapens, the response is returned as is.
+// If rate limit is exceeded and reset time is in the future, Do returns
+// *RateLimitError immediately without making a network API call.
+//
+// The provided ctx must be non-nil, if it is nil an error is returned. If it
+// is canceled or times out, ctx.Err() will be returned.
+func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*Response, error) {
+       resp, err := c.BareDo(ctx, req)
+       if err != nil {
+               return resp, err
+       }
+       defer resp.Body.Close()
+
+       switch v := v.(type) {
+       case nil:
+       case io.Writer:
+               _, err = io.Copy(v, resp.Body)
+       default:
+               decErr := json.NewDecoder(resp.Body).Decode(v)
+               if decErr == io.EOF {
+                       decErr = nil // ignore EOF errors caused by empty response body
+               }
+               if decErr != nil {
+                       err = decErr
+               }
+       }
+       return resp, err
+}
+
+// checkRateLimitBeforeDo does not make any network calls, but uses existing knowledge from
+// current client state in order to quickly check if *RateLimitError can be immediately returned
+// from Client.Do, and if so, returns it so that Client.Do can skip making a network API call unnecessarily.
+// Otherwise it returns nil, and Client.Do should proceed normally.
+func (c *Client) checkRateLimitBeforeDo(req *http.Request, rateLimitCategory rateLimitCategory) *RateLimitError {
+       c.rateMu.Lock()
+       rate := c.rateLimits[rateLimitCategory]
+       c.rateMu.Unlock()
+       if !rate.Reset.Time.IsZero() && rate.Remaining == 0 && time.Now().Before(rate.Reset.Time) {
+               // Create a fake response.
+               resp := &http.Response{
+                       Status:     http.StatusText(http.StatusForbidden),
+                       StatusCode: http.StatusForbidden,
+                       Request:    req,
+                       Header:     make(http.Header),
+                       Body:       ioutil.NopCloser(strings.NewReader("")),
+               }
+               return &RateLimitError{
+                       Rate:     rate,
+                       Response: resp,
+                       Message:  fmt.Sprintf("API rate limit of %v still exceeded until %v, not making remote request.", rate.Limit, rate.Reset.Time),
+               }
+       }
+
+       return nil
+}
+
+// compareHttpResponse returns whether two http.Response objects are equal or not.
+// Currently, only StatusCode is checked. This function is used when implementing the
+// Is(error) bool interface for the custom error types in this package.
+func compareHttpResponse(r1, r2 *http.Response) bool {
+       if r1 == nil && r2 == nil {
+               return true
+       }
+
+       if r1 != nil && r2 != nil {
+               return r1.StatusCode == r2.StatusCode
+       }
+       return false
+}
+
+/*
+An ErrorResponse reports one or more errors caused by an API request.
+
+GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/#client-errors
+*/
+type ErrorResponse struct {
+       Response *http.Response // HTTP response that caused this error
+       Message  string         `json:"message"` // error message
+       Errors   []Error        `json:"errors"`  // more detail on individual errors
+       // Block is only populated on certain types of errors such as code 451.
+       Block *ErrorBlock `json:"block,omitempty"`
+       // Most errors will also include a documentation_url field pointing
+       // to some content that might help you resolve the error, see
+       // https://docs.github.com/en/free-pro-team@latest/rest/reference/#client-errors
+       DocumentationURL string `json:"documentation_url,omitempty"`
+}
+
+// ErrorBlock contains a further explanation for the reason of an error.
+// See https://developer.github.com/changes/2016-03-17-the-451-status-code-is-now-supported/
+// for more information.
+type ErrorBlock struct {
+       Reason    string     `json:"reason,omitempty"`
+       CreatedAt *Timestamp `json:"created_at,omitempty"`
+}
+
+func (r *ErrorResponse) Error() string {
+       return fmt.Sprintf("%v %v: %d %v %+v",
+               r.Response.Request.Method, sanitizeURL(r.Response.Request.URL),
+               r.Response.StatusCode, r.Message, r.Errors)
+}
+
+// Is returns whether the provided error equals this error.
+func (r *ErrorResponse) Is(target error) bool {
+       v, ok := target.(*ErrorResponse)
+       if !ok {
+               return false
+       }
+
+       if r.Message != v.Message || (r.DocumentationURL != v.DocumentationURL) ||
+               !compareHttpResponse(r.Response, v.Response) {
+               return false
+       }
+
+       // Compare Errors.
+       if len(r.Errors) != len(v.Errors) {
+               return false
+       }
+       for idx := range r.Errors {
+               if r.Errors[idx] != v.Errors[idx] {
+                       return false
+               }
+       }
+
+       // Compare Block.
+       if (r.Block != nil && v.Block == nil) || (r.Block == nil && v.Block != nil) {
+               return false
+       }
+       if r.Block != nil && v.Block != nil {
+               if r.Block.Reason != v.Block.Reason {
+                       return false
+               }
+               if (r.Block.CreatedAt != nil && v.Block.CreatedAt == nil) || (r.Block.CreatedAt ==
+                       nil && v.Block.CreatedAt != nil) {
+                       return false
+               }
+               if r.Block.CreatedAt != nil && v.Block.CreatedAt != nil {
+                       if *(r.Block.CreatedAt) != *(v.Block.CreatedAt) {
+                               return false
+                       }
+               }
+       }
+
+       return true
+}
+
+// TwoFactorAuthError occurs when using HTTP Basic Authentication for a user
+// that has two-factor authentication enabled. The request can be reattempted
+// by providing a one-time password in the request.
+type TwoFactorAuthError ErrorResponse
+
+func (r *TwoFactorAuthError) Error() string { return (*ErrorResponse)(r).Error() }
+
+// RateLimitError occurs when GitHub returns 403 Forbidden response with a rate limit
+// remaining value of 0.
+type RateLimitError struct {
+       Rate     Rate           // Rate specifies last known rate limit for the client
+       Response *http.Response // HTTP response that caused this error
+       Message  string         `json:"message"` // error message
+}
+
+func (r *RateLimitError) Error() string {
+       return fmt.Sprintf("%v %v: %d %v %v",
+               r.Response.Request.Method, sanitizeURL(r.Response.Request.URL),
+               r.Response.StatusCode, r.Message, formatRateReset(time.Until(r.Rate.Reset.Time)))
+}
+
+// Is returns whether the provided error equals this error.
+func (r *RateLimitError) Is(target error) bool {
+       v, ok := target.(*RateLimitError)
+       if !ok {
+               return false
+       }
+
+       return r.Rate == v.Rate &&
+               r.Message == v.Message &&
+               compareHttpResponse(r.Response, v.Response)
+}
+
+// AcceptedError occurs when GitHub returns 202 Accepted response with an
+// empty body, which means a job was scheduled on the GitHub side to process
+// the information needed and cache it.
+// Technically, 202 Accepted is not a real error, it's just used to
+// indicate that results are not ready yet, but should be available soon.
+// The request can be repeated after some time.
+type AcceptedError struct {
+       // Raw contains the response body.
+       Raw []byte
+}
+
+func (*AcceptedError) Error() string {
+       return "job scheduled on GitHub side; try again later"
+}
+
+// Is returns whether the provided error equals this error.
+func (ae *AcceptedError) Is(target error) bool {
+       v, ok := target.(*AcceptedError)
+       if !ok {
+               return false
+       }
+       return bytes.Compare(ae.Raw, v.Raw) == 0
+}
+
+// AbuseRateLimitError occurs when GitHub returns 403 Forbidden response with the
+// "documentation_url" field value equal to "https://docs.github.com/en/free-pro-team@latest/rest/reference/#abuse-rate-limits".
+type AbuseRateLimitError struct {
+       Response *http.Response // HTTP response that caused this error
+       Message  string         `json:"message"` // error message
+
+       // RetryAfter is provided with some abuse rate limit errors. If present,
+       // it is the amount of time that the client should wait before retrying.
+       // Otherwise, the client should try again later (after an unspecified amount of time).
+       RetryAfter *time.Duration
+}
+
+func (r *AbuseRateLimitError) Error() string {
+       return fmt.Sprintf("%v %v: %d %v",
+               r.Response.Request.Method, sanitizeURL(r.Response.Request.URL),
+               r.Response.StatusCode, r.Message)
+}
+
+// Is returns whether the provided error equals this error.
+func (r *AbuseRateLimitError) Is(target error) bool {
+       v, ok := target.(*AbuseRateLimitError)
+       if !ok {
+               return false
+       }
+
+       return r.Message == v.Message &&
+               r.RetryAfter == v.RetryAfter &&
+               compareHttpResponse(r.Response, v.Response)
+}
+
+// sanitizeURL redacts the client_secret parameter from the URL which may be
+// exposed to the user.
+func sanitizeURL(uri *url.URL) *url.URL {
+       if uri == nil {
+               return nil
+       }
+       params := uri.Query()
+       if len(params.Get("client_secret")) > 0 {
+               params.Set("client_secret", "REDACTED")
+               uri.RawQuery = params.Encode()
+       }
+       return uri
+}
+
+/*
+An Error reports more details on an individual error in an ErrorResponse.
+These are the possible validation error codes:
+
+    missing:
+        resource does not exist
+    missing_field:
+        a required field on a resource has not been set
+    invalid:
+        the formatting of a field is invalid
+    already_exists:
+        another resource has the same valid as this field
+    custom:
+        some resources return this (e.g. github.User.CreateKey()), additional
+        information is set in the Message field of the Error
+
+GitHub error responses structure are often undocumented and inconsistent.
+Sometimes error is just a simple string (Issue #540).
+In such cases, Message represents an error message as a workaround.
+
+GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/#client-errors
+*/
+type Error struct {
+       Resource string `json:"resource"` // resource on which the error occurred
+       Field    string `json:"field"`    // field on which the error occurred
+       Code     string `json:"code"`     // validation error code
+       Message  string `json:"message"`  // Message describing the error. Errors with Code == "custom" will always have this set.
+}
+
+func (e *Error) Error() string {
+       return fmt.Sprintf("%v error caused by %v field on %v resource",
+               e.Code, e.Field, e.Resource)
+}
+
+func (e *Error) UnmarshalJSON(data []byte) error {
+       type aliasError Error // avoid infinite recursion by using type alias.
+       if err := json.Unmarshal(data, (*aliasError)(e)); err != nil {
+               return json.Unmarshal(data, &e.Message) // data can be json string.
+       }
+       return nil
+}
+
+// CheckResponse checks the API response for errors, and returns them if
+// present. A response is considered an error if it has a status code outside
+// the 200 range or equal to 202 Accepted.
+// API error responses are expected to have response
+// body, and a JSON response body that maps to ErrorResponse.
+//
+// The error type will be *RateLimitError for rate limit exceeded errors,
+// *AcceptedError for 202 Accepted status codes,
+// and *TwoFactorAuthError for two-factor authentication errors.
+func CheckResponse(r *http.Response) error {
+       if r.StatusCode == http.StatusAccepted {
+               return &AcceptedError{}
+       }
+       if c := r.StatusCode; 200 <= c && c <= 299 {
+               return nil
+       }
+       errorResponse := &ErrorResponse{Response: r}
+       data, err := ioutil.ReadAll(r.Body)
+       if err == nil && data != nil {
+               json.Unmarshal(data, errorResponse)
+       }
+       // Re-populate error response body because GitHub error responses are often
+       // undocumented and inconsistent.
+       // Issue #1136, #540.
+       r.Body = ioutil.NopCloser(bytes.NewBuffer(data))
+       switch {
+       case r.StatusCode == http.StatusUnauthorized && strings.HasPrefix(r.Header.Get(headerOTP), "required"):
+               return (*TwoFactorAuthError)(errorResponse)
+       case r.StatusCode == http.StatusForbidden && r.Header.Get(headerRateRemaining) == "0":
+               return &RateLimitError{
+                       Rate:     parseRate(r),
+                       Response: errorResponse.Response,
+                       Message:  errorResponse.Message,
+               }
+       case r.StatusCode == http.StatusForbidden && strings.HasSuffix(errorResponse.DocumentationURL, "#abuse-rate-limits"):
+               abuseRateLimitError := &AbuseRateLimitError{
+                       Response: errorResponse.Response,
+                       Message:  errorResponse.Message,
+               }
+               if v := r.Header["Retry-After"]; len(v) > 0 {
+                       // According to GitHub support, the "Retry-After" header value will be
+                       // an integer which represents the number of seconds that one should
+                       // wait before resuming making requests.
+                       retryAfterSeconds, _ := strconv.ParseInt(v[0], 10, 64) // Error handling is noop.
+                       retryAfter := time.Duration(retryAfterSeconds) * time.Second
+                       abuseRateLimitError.RetryAfter = &retryAfter
+               }
+               return abuseRateLimitError
+       default:
+               return errorResponse
+       }
+}
+
+// parseBoolResponse determines the boolean result from a GitHub API response.
+// Several GitHub API methods return boolean responses indicated by the HTTP
+// status code in the response (true indicated by a 204, false indicated by a
+// 404). This helper function will determine that result and hide the 404
+// error if present. Any other error will be returned through as-is.
+func parseBoolResponse(err error) (bool, error) {
+       if err == nil {
+               return true, nil
+       }
+
+       if err, ok := err.(*ErrorResponse); ok && err.Response.StatusCode == http.StatusNotFound {
+               // Simply false. In this one case, we do not pass the error through.
+               return false, nil
+       }
+
+       // some other real error occurred
+       return false, err
+}
+
+// Rate represents the rate limit for the current client.
+type Rate struct {
+       // The number of requests per hour the client is currently limited to.
+       Limit int `json:"limit"`
+
+       // The number of remaining requests the client can make this hour.
+       Remaining int `json:"remaining"`
+
+       // The time at which the current rate limit will reset.
+       Reset Timestamp `json:"reset"`
+}
+
+func (r Rate) String() string {
+       return Stringify(r)
+}
+
+// RateLimits represents the rate limits for the current client.
+type RateLimits struct {
+       // The rate limit for non-search API requests. Unauthenticated
+       // requests are limited to 60 per hour. Authenticated requests are
+       // limited to 5,000 per hour.
+       //
+       // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/#rate-limiting
+       Core *Rate `json:"core"`
+
+       // The rate limit for search API requests. Unauthenticated requests
+       // are limited to 10 requests per minutes. Authenticated requests are
+       // limited to 30 per minute.
+       //
+       // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#rate-limit
+       Search *Rate `json:"search"`
+}
+
+func (r RateLimits) String() string {
+       return Stringify(r)
+}
+
+type rateLimitCategory uint8
+
+const (
+       coreCategory rateLimitCategory = iota
+       searchCategory
+
+       categories // An array of this length will be able to contain all rate limit categories.
+)
+
+// category returns the rate limit category of the endpoint, determined by Request.URL.Path.
+func category(path string) rateLimitCategory {
+       switch {
+       default:
+               return coreCategory
+       case strings.HasPrefix(path, "/search/"):
+               return searchCategory
+       }
+}
+
+// RateLimits returns the rate limits for the current client.
+func (c *Client) RateLimits(ctx context.Context) (*RateLimits, *Response, error) {
+       req, err := c.NewRequest("GET", "rate_limit", nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       response := new(struct {
+               Resources *RateLimits `json:"resources"`
+       })
+
+       // This resource is not subject to rate limits.
+       ctx = context.WithValue(ctx, bypassRateLimitCheck, true)
+       resp, err := c.Do(ctx, req, response)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       if response.Resources != nil {
+               c.rateMu.Lock()
+               if response.Resources.Core != nil {
+                       c.rateLimits[coreCategory] = *response.Resources.Core
+               }
+               if response.Resources.Search != nil {
+                       c.rateLimits[searchCategory] = *response.Resources.Search
+               }
+               c.rateMu.Unlock()
+       }
+
+       return response.Resources, resp, nil
+}
+
+func setCredentialsAsHeaders(req *http.Request, id, secret string) *http.Request {
+       // To set extra headers, we must make a copy of the Request so
+       // that we don't modify the Request we were given. This is required by the
+       // specification of http.RoundTripper.
+       //
+       // Since we are going to modify only req.Header here, we only need a deep copy
+       // of req.Header.
+       convertedRequest := new(http.Request)
+       *convertedRequest = *req
+       convertedRequest.Header = make(http.Header, len(req.Header))
+
+       for k, s := range req.Header {
+               convertedRequest.Header[k] = append([]string(nil), s...)
+       }
+       convertedRequest.SetBasicAuth(id, secret)
+       return convertedRequest
+}
+
+/*
+UnauthenticatedRateLimitedTransport allows you to make unauthenticated calls
+that need to use a higher rate limit associated with your OAuth application.
+
+       t := &github.UnauthenticatedRateLimitedTransport{
+               ClientID:     "your app's client ID",
+               ClientSecret: "your app's client secret",
+       }
+       client := github.NewClient(t.Client())
+
+This will add the client id and secret as a base64-encoded string in the format
+ClientID:ClientSecret and apply it as an "Authorization": "Basic" header.
+
+See https://docs.github.com/en/free-pro-team@latest/rest/reference/#unauthenticated-rate-limited-requests for
+more information.
+*/
+type UnauthenticatedRateLimitedTransport struct {
+       // ClientID is the GitHub OAuth client ID of the current application, which
+       // can be found by selecting its entry in the list at
+       // https://github.com/settings/applications.
+       ClientID string
+
+       // ClientSecret is the GitHub OAuth client secret of the current
+       // application.
+       ClientSecret string
+
+       // Transport is the underlying HTTP transport to use when making requests.
+       // It will default to http.DefaultTransport if nil.
+       Transport http.RoundTripper
+}
+
+// RoundTrip implements the RoundTripper interface.
+func (t *UnauthenticatedRateLimitedTransport) RoundTrip(req *http.Request) (*http.Response, error) {
+       if t.ClientID == "" {
+               return nil, errors.New("t.ClientID is empty")
+       }
+       if t.ClientSecret == "" {
+               return nil, errors.New("t.ClientSecret is empty")
+       }
+
+       req2 := setCredentialsAsHeaders(req, t.ClientID, t.ClientSecret)
+       // Make the HTTP request.
+       return t.transport().RoundTrip(req2)
+}
+
+// Client returns an *http.Client that makes requests which are subject to the
+// rate limit of your OAuth application.
+func (t *UnauthenticatedRateLimitedTransport) Client() *http.Client {
+       return &http.Client{Transport: t}
+}
+
+func (t *UnauthenticatedRateLimitedTransport) transport() http.RoundTripper {
+       if t.Transport != nil {
+               return t.Transport
+       }
+       return http.DefaultTransport
+}
+
+// BasicAuthTransport is an http.RoundTripper that authenticates all requests
+// using HTTP Basic Authentication with the provided username and password. It
+// additionally supports users who have two-factor authentication enabled on
+// their GitHub account.
+type BasicAuthTransport struct {
+       Username string // GitHub username
+       Password string // GitHub password
+       OTP      string // one-time password for users with two-factor auth enabled
+
+       // Transport is the underlying HTTP transport to use when making requests.
+       // It will default to http.DefaultTransport if nil.
+       Transport http.RoundTripper
+}
+
+// RoundTrip implements the RoundTripper interface.
+func (t *BasicAuthTransport) RoundTrip(req *http.Request) (*http.Response, error) {
+       req2 := setCredentialsAsHeaders(req, t.Username, t.Password)
+       if t.OTP != "" {
+               req2.Header.Set(headerOTP, t.OTP)
+       }
+       return t.transport().RoundTrip(req2)
+}
+
+// Client returns an *http.Client that makes requests that are authenticated
+// using HTTP Basic Authentication.
+func (t *BasicAuthTransport) Client() *http.Client {
+       return &http.Client{Transport: t}
+}
+
+func (t *BasicAuthTransport) transport() http.RoundTripper {
+       if t.Transport != nil {
+               return t.Transport
+       }
+       return http.DefaultTransport
+}
+
+// formatRateReset formats d to look like "[rate reset in 2s]" or
+// "[rate reset in 87m02s]" for the positive durations. And like "[rate limit was reset 87m02s ago]"
+// for the negative cases.
+func formatRateReset(d time.Duration) string {
+       isNegative := d < 0
+       if isNegative {
+               d *= -1
+       }
+       secondsTotal := int(0.5 + d.Seconds())
+       minutes := secondsTotal / 60
+       seconds := secondsTotal - minutes*60
+
+       var timeString string
+       if minutes > 0 {
+               timeString = fmt.Sprintf("%dm%02ds", minutes, seconds)
+       } else {
+               timeString = fmt.Sprintf("%ds", seconds)
+       }
+
+       if isNegative {
+               return fmt.Sprintf("[rate limit was reset %v ago]", timeString)
+       }
+       return fmt.Sprintf("[rate reset in %v]", timeString)
+}
+
+// Bool is a helper routine that allocates a new bool value
+// to store v and returns a pointer to it.
+func Bool(v bool) *bool { return &v }
+
+// Int is a helper routine that allocates a new int value
+// to store v and returns a pointer to it.
+func Int(v int) *int { return &v }
+
+// Int64 is a helper routine that allocates a new int64 value
+// to store v and returns a pointer to it.
+func Int64(v int64) *int64 { return &v }
+
+// String is a helper routine that allocates a new string value
+// to store v and returns a pointer to it.
+func String(v string) *string { return &v }
diff --git a/vendor/github.com/google/go-github/v37/github/gitignore.go b/vendor/github.com/google/go-github/v37/github/gitignore.go
new file mode 100644 (file)
index 0000000..2f9d0bc
--- /dev/null
@@ -0,0 +1,64 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// GitignoresService provides access to the gitignore related functions in the
+// GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gitignore/
+type GitignoresService service
+
+// Gitignore represents a .gitignore file as returned by the GitHub API.
+type Gitignore struct {
+       Name   *string `json:"name,omitempty"`
+       Source *string `json:"source,omitempty"`
+}
+
+func (g Gitignore) String() string {
+       return Stringify(g)
+}
+
+// List all available Gitignore templates.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gitignore/#listing-available-templates
+func (s *GitignoresService) List(ctx context.Context) ([]string, *Response, error) {
+       req, err := s.client.NewRequest("GET", "gitignore/templates", nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var availableTemplates []string
+       resp, err := s.client.Do(ctx, req, &availableTemplates)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return availableTemplates, resp, nil
+}
+
+// Get a Gitignore by name.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/gitignore/#get-a-gitignore-template
+func (s *GitignoresService) Get(ctx context.Context, name string) (*Gitignore, *Response, error) {
+       u := fmt.Sprintf("gitignore/templates/%v", name)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       gitignore := new(Gitignore)
+       resp, err := s.client.Do(ctx, req, gitignore)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return gitignore, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/interactions.go b/vendor/github.com/google/go-github/v37/github/interactions.go
new file mode 100644 (file)
index 0000000..3b00d3c
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2018 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+// InteractionsService handles communication with the repository and organization related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/interactions/
+type InteractionsService service
+
+// InteractionRestriction represents the interaction restrictions for repository and organization.
+type InteractionRestriction struct {
+       // Specifies the group of GitHub users who can
+       // comment, open issues, or create pull requests for the given repository.
+       // Possible values are: "existing_users", "contributors_only" and "collaborators_only".
+       Limit *string `json:"limit,omitempty"`
+
+       // Origin specifies the type of the resource to interact with.
+       // Possible values are: "repository" and "organization".
+       Origin *string `json:"origin,omitempty"`
+
+       // ExpiresAt specifies the time after which the interaction restrictions expire.
+       // The default expiry time is 24 hours from the time restriction is created.
+       ExpiresAt *Timestamp `json:"expires_at,omitempty"`
+}
diff --git a/vendor/github.com/google/go-github/v37/github/interactions_orgs.go b/vendor/github.com/google/go-github/v37/github/interactions_orgs.go
new file mode 100644 (file)
index 0000000..d22a9e7
--- /dev/null
@@ -0,0 +1,80 @@
+// Copyright 2019 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// GetRestrictionsForOrg fetches the interaction restrictions for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/interactions/#get-interaction-restrictions-for-an-organization
+func (s *InteractionsService) GetRestrictionsForOrg(ctx context.Context, organization string) (*InteractionRestriction, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/interaction-limits", organization)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
+
+       organizationInteractions := new(InteractionRestriction)
+
+       resp, err := s.client.Do(ctx, req, organizationInteractions)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return organizationInteractions, resp, nil
+}
+
+// UpdateRestrictionsForOrg adds or updates the interaction restrictions for an organization.
+//
+// limit specifies the group of GitHub users who can comment, open issues, or create pull requests
+// in public repositories for the given organization.
+// Possible values are: "existing_users", "contributors_only", "collaborators_only".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/interactions/#set-interaction-restrictions-for-an-organization
+func (s *InteractionsService) UpdateRestrictionsForOrg(ctx context.Context, organization, limit string) (*InteractionRestriction, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/interaction-limits", organization)
+
+       interaction := &InteractionRestriction{Limit: String(limit)}
+
+       req, err := s.client.NewRequest("PUT", u, interaction)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
+
+       organizationInteractions := new(InteractionRestriction)
+
+       resp, err := s.client.Do(ctx, req, organizationInteractions)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return organizationInteractions, resp, nil
+}
+
+// RemoveRestrictionsFromOrg removes the interaction restrictions for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/interactions/#remove-interaction-restrictions-for-an-organization
+func (s *InteractionsService) RemoveRestrictionsFromOrg(ctx context.Context, organization string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/interaction-limits", organization)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/interactions_repos.go b/vendor/github.com/google/go-github/v37/github/interactions_repos.go
new file mode 100644 (file)
index 0000000..13fffd6
--- /dev/null
@@ -0,0 +1,80 @@
+// Copyright 2018 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// GetRestrictionsForRepo fetches the interaction restrictions for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/interactions/#get-interaction-restrictions-for-a-repository
+func (s *InteractionsService) GetRestrictionsForRepo(ctx context.Context, owner, repo string) (*InteractionRestriction, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/interaction-limits", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
+
+       repositoryInteractions := new(InteractionRestriction)
+
+       resp, err := s.client.Do(ctx, req, repositoryInteractions)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repositoryInteractions, resp, nil
+}
+
+// UpdateRestrictionsForRepo adds or updates the interaction restrictions for a repository.
+//
+// limit specifies the group of GitHub users who can comment, open issues, or create pull requests
+// for the given repository.
+// Possible values are: "existing_users", "contributors_only", "collaborators_only".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/interactions/#set-interaction-restrictions-for-a-repository
+func (s *InteractionsService) UpdateRestrictionsForRepo(ctx context.Context, owner, repo, limit string) (*InteractionRestriction, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/interaction-limits", owner, repo)
+
+       interaction := &InteractionRestriction{Limit: String(limit)}
+
+       req, err := s.client.NewRequest("PUT", u, interaction)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
+
+       repositoryInteractions := new(InteractionRestriction)
+
+       resp, err := s.client.Do(ctx, req, repositoryInteractions)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repositoryInteractions, resp, nil
+}
+
+// RemoveRestrictionsFromRepo removes the interaction restrictions for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/interactions/#remove-interaction-restrictions-for-a-repository
+func (s *InteractionsService) RemoveRestrictionsFromRepo(ctx context.Context, owner, repo string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/interaction-limits", owner, repo)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeInteractionRestrictionsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/issue_import.go b/vendor/github.com/google/go-github/v37/github/issue_import.go
new file mode 100644 (file)
index 0000000..a981040
--- /dev/null
@@ -0,0 +1,152 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "bytes"
+       "context"
+       "encoding/json"
+       "fmt"
+       "time"
+)
+
+// IssueImportService handles communication with the issue import related
+// methods of the Issue Import GitHub API.
+type IssueImportService service
+
+// IssueImportRequest represents a request to create an issue.
+//
+// https://gist.github.com/jonmagic/5282384165e0f86ef105#supported-issue-and-comment-fields
+type IssueImportRequest struct {
+       IssueImport IssueImport `json:"issue"`
+       Comments    []*Comment  `json:"comments,omitempty"`
+}
+
+// IssueImport represents body of issue to import.
+type IssueImport struct {
+       Title     string     `json:"title"`
+       Body      string     `json:"body"`
+       CreatedAt *time.Time `json:"created_at,omitempty"`
+       ClosedAt  *time.Time `json:"closed_at,omitempty"`
+       UpdatedAt *time.Time `json:"updated_at,omitempty"`
+       Assignee  *string    `json:"assignee,omitempty"`
+       Milestone *int       `json:"milestone,omitempty"`
+       Closed    *bool      `json:"closed,omitempty"`
+       Labels    []string   `json:"labels,omitempty"`
+}
+
+// Comment represents comments of issue to import.
+type Comment struct {
+       CreatedAt *time.Time `json:"created_at,omitempty"`
+       Body      string     `json:"body"`
+}
+
+// IssueImportResponse represents the response of an issue import create request.
+//
+// https://gist.github.com/jonmagic/5282384165e0f86ef105#import-issue-response
+type IssueImportResponse struct {
+       ID               *int                `json:"id,omitempty"`
+       Status           *string             `json:"status,omitempty"`
+       URL              *string             `json:"url,omitempty"`
+       ImportIssuesURL  *string             `json:"import_issues_url,omitempty"`
+       RepositoryURL    *string             `json:"repository_url,omitempty"`
+       CreatedAt        *time.Time          `json:"created_at,omitempty"`
+       UpdatedAt        *time.Time          `json:"updated_at,omitempty"`
+       Message          *string             `json:"message,omitempty"`
+       DocumentationURL *string             `json:"documentation_url,omitempty"`
+       Errors           []*IssueImportError `json:"errors,omitempty"`
+}
+
+// IssueImportError represents errors of an issue import create request.
+type IssueImportError struct {
+       Location *string `json:"location,omitempty"`
+       Resource *string `json:"resource,omitempty"`
+       Field    *string `json:"field,omitempty"`
+       Value    *string `json:"value,omitempty"`
+       Code     *string `json:"code,omitempty"`
+}
+
+// Create a new imported issue on the specified repository.
+//
+// https://gist.github.com/jonmagic/5282384165e0f86ef105#start-an-issue-import
+func (s *IssueImportService) Create(ctx context.Context, owner, repo string, issue *IssueImportRequest) (*IssueImportResponse, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import/issues", owner, repo)
+       req, err := s.client.NewRequest("POST", u, issue)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeIssueImportAPI)
+
+       i := new(IssueImportResponse)
+       resp, err := s.client.Do(ctx, req, i)
+       if err != nil {
+               aerr, ok := err.(*AcceptedError)
+               if ok {
+                       decErr := json.Unmarshal(aerr.Raw, i)
+                       if decErr != nil {
+                               err = decErr
+                       }
+
+                       return i, resp, nil
+               }
+
+               return nil, resp, err
+       }
+
+       return i, resp, nil
+}
+
+// CheckStatus checks the status of an imported issue.
+//
+// https://gist.github.com/jonmagic/5282384165e0f86ef105#import-status-request
+func (s *IssueImportService) CheckStatus(ctx context.Context, owner, repo string, issueID int64) (*IssueImportResponse, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import/issues/%v", owner, repo, issueID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeIssueImportAPI)
+
+       i := new(IssueImportResponse)
+       resp, err := s.client.Do(ctx, req, i)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return i, resp, nil
+}
+
+// CheckStatusSince checks the status of multiple imported issues since a given date.
+//
+// https://gist.github.com/jonmagic/5282384165e0f86ef105#check-status-of-multiple-issues
+func (s *IssueImportService) CheckStatusSince(ctx context.Context, owner, repo string, since time.Time) ([]*IssueImportResponse, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import/issues?since=%v", owner, repo, since.Format("2006-01-02"))
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeIssueImportAPI)
+
+       var b bytes.Buffer
+       resp, err := s.client.Do(ctx, req, &b)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       var i []*IssueImportResponse
+       err = json.Unmarshal(b.Bytes(), &i)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return i, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/issues.go b/vendor/github.com/google/go-github/v37/github/issues.go
new file mode 100644 (file)
index 0000000..46aff29
--- /dev/null
@@ -0,0 +1,335 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// IssuesService handles communication with the issue related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/
+type IssuesService service
+
+// Issue represents a GitHub issue on a repository.
+//
+// Note: As far as the GitHub API is concerned, every pull request is an issue,
+// but not every issue is a pull request. Some endpoints, events, and webhooks
+// may also return pull requests via this struct. If PullRequestLinks is nil,
+// this is an issue, and if PullRequestLinks is not nil, this is a pull request.
+// The IsPullRequest helper method can be used to check that.
+type Issue struct {
+       ID                *int64            `json:"id,omitempty"`
+       Number            *int              `json:"number,omitempty"`
+       State             *string           `json:"state,omitempty"`
+       Locked            *bool             `json:"locked,omitempty"`
+       Title             *string           `json:"title,omitempty"`
+       Body              *string           `json:"body,omitempty"`
+       AuthorAssociation *string           `json:"author_association,omitempty"`
+       User              *User             `json:"user,omitempty"`
+       Labels            []*Label          `json:"labels,omitempty"`
+       Assignee          *User             `json:"assignee,omitempty"`
+       Comments          *int              `json:"comments,omitempty"`
+       ClosedAt          *time.Time        `json:"closed_at,omitempty"`
+       CreatedAt         *time.Time        `json:"created_at,omitempty"`
+       UpdatedAt         *time.Time        `json:"updated_at,omitempty"`
+       ClosedBy          *User             `json:"closed_by,omitempty"`
+       URL               *string           `json:"url,omitempty"`
+       HTMLURL           *string           `json:"html_url,omitempty"`
+       CommentsURL       *string           `json:"comments_url,omitempty"`
+       EventsURL         *string           `json:"events_url,omitempty"`
+       LabelsURL         *string           `json:"labels_url,omitempty"`
+       RepositoryURL     *string           `json:"repository_url,omitempty"`
+       Milestone         *Milestone        `json:"milestone,omitempty"`
+       PullRequestLinks  *PullRequestLinks `json:"pull_request,omitempty"`
+       Repository        *Repository       `json:"repository,omitempty"`
+       Reactions         *Reactions        `json:"reactions,omitempty"`
+       Assignees         []*User           `json:"assignees,omitempty"`
+       NodeID            *string           `json:"node_id,omitempty"`
+
+       // TextMatches is only populated from search results that request text matches
+       // See: search.go and https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#text-match-metadata
+       TextMatches []*TextMatch `json:"text_matches,omitempty"`
+
+       // ActiveLockReason is populated only when LockReason is provided while locking the issue.
+       // Possible values are: "off-topic", "too heated", "resolved", and "spam".
+       ActiveLockReason *string `json:"active_lock_reason,omitempty"`
+}
+
+func (i Issue) String() string {
+       return Stringify(i)
+}
+
+// IsPullRequest reports whether the issue is also a pull request. It uses the
+// method recommended by GitHub's API documentation, which is to check whether
+// PullRequestLinks is non-nil.
+func (i Issue) IsPullRequest() bool {
+       return i.PullRequestLinks != nil
+}
+
+// IssueRequest represents a request to create/edit an issue.
+// It is separate from Issue above because otherwise Labels
+// and Assignee fail to serialize to the correct JSON.
+type IssueRequest struct {
+       Title     *string   `json:"title,omitempty"`
+       Body      *string   `json:"body,omitempty"`
+       Labels    *[]string `json:"labels,omitempty"`
+       Assignee  *string   `json:"assignee,omitempty"`
+       State     *string   `json:"state,omitempty"`
+       Milestone *int      `json:"milestone,omitempty"`
+       Assignees *[]string `json:"assignees,omitempty"`
+}
+
+// IssueListOptions specifies the optional parameters to the IssuesService.List
+// and IssuesService.ListByOrg methods.
+type IssueListOptions struct {
+       // Filter specifies which issues to list. Possible values are: assigned,
+       // created, mentioned, subscribed, all. Default is "assigned".
+       Filter string `url:"filter,omitempty"`
+
+       // State filters issues based on their state. Possible values are: open,
+       // closed, all. Default is "open".
+       State string `url:"state,omitempty"`
+
+       // Labels filters issues based on their label.
+       Labels []string `url:"labels,comma,omitempty"`
+
+       // Sort specifies how to sort issues. Possible values are: created, updated,
+       // and comments. Default value is "created".
+       Sort string `url:"sort,omitempty"`
+
+       // Direction in which to sort issues. Possible values are: asc, desc.
+       // Default is "desc".
+       Direction string `url:"direction,omitempty"`
+
+       // Since filters issues by time.
+       Since time.Time `url:"since,omitempty"`
+
+       ListOptions
+}
+
+// PullRequestLinks object is added to the Issue object when it's an issue included
+// in the IssueCommentEvent webhook payload, if the webhook is fired by a comment on a PR.
+type PullRequestLinks struct {
+       URL      *string `json:"url,omitempty"`
+       HTMLURL  *string `json:"html_url,omitempty"`
+       DiffURL  *string `json:"diff_url,omitempty"`
+       PatchURL *string `json:"patch_url,omitempty"`
+}
+
+// List the issues for the authenticated user. If all is true, list issues
+// across all the user's visible repositories including owned, member, and
+// organization repositories; if false, list only owned and member
+// repositories.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-user-account-issues-assigned-to-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-issues-assigned-to-the-authenticated-user
+func (s *IssuesService) List(ctx context.Context, all bool, opts *IssueListOptions) ([]*Issue, *Response, error) {
+       var u string
+       if all {
+               u = "issues"
+       } else {
+               u = "user/issues"
+       }
+       return s.listIssues(ctx, u, opts)
+}
+
+// ListByOrg fetches the issues in the specified organization for the
+// authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-organization-issues-assigned-to-the-authenticated-user
+func (s *IssuesService) ListByOrg(ctx context.Context, org string, opts *IssueListOptions) ([]*Issue, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/issues", org)
+       return s.listIssues(ctx, u, opts)
+}
+
+func (s *IssuesService) listIssues(ctx context.Context, u string, opts *IssueListOptions) ([]*Issue, *Response, error) {
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var issues []*Issue
+       resp, err := s.client.Do(ctx, req, &issues)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return issues, resp, nil
+}
+
+// IssueListByRepoOptions specifies the optional parameters to the
+// IssuesService.ListByRepo method.
+type IssueListByRepoOptions struct {
+       // Milestone limits issues for the specified milestone. Possible values are
+       // a milestone number, "none" for issues with no milestone, "*" for issues
+       // with any milestone.
+       Milestone string `url:"milestone,omitempty"`
+
+       // State filters issues based on their state. Possible values are: open,
+       // closed, all. Default is "open".
+       State string `url:"state,omitempty"`
+
+       // Assignee filters issues based on their assignee. Possible values are a
+       // user name, "none" for issues that are not assigned, "*" for issues with
+       // any assigned user.
+       Assignee string `url:"assignee,omitempty"`
+
+       // Creator filters issues based on their creator.
+       Creator string `url:"creator,omitempty"`
+
+       // Mentioned filters issues to those mentioned a specific user.
+       Mentioned string `url:"mentioned,omitempty"`
+
+       // Labels filters issues based on their label.
+       Labels []string `url:"labels,omitempty,comma"`
+
+       // Sort specifies how to sort issues. Possible values are: created, updated,
+       // and comments. Default value is "created".
+       Sort string `url:"sort,omitempty"`
+
+       // Direction in which to sort issues. Possible values are: asc, desc.
+       // Default is "desc".
+       Direction string `url:"direction,omitempty"`
+
+       // Since filters issues by time.
+       Since time.Time `url:"since,omitempty"`
+
+       ListOptions
+}
+
+// ListByRepo lists the issues for the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-repository-issues
+func (s *IssuesService) ListByRepo(ctx context.Context, owner string, repo string, opts *IssueListByRepoOptions) ([]*Issue, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var issues []*Issue
+       resp, err := s.client.Do(ctx, req, &issues)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return issues, resp, nil
+}
+
+// Get a single issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#get-an-issue
+func (s *IssuesService) Get(ctx context.Context, owner string, repo string, number int) (*Issue, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%d", owner, repo, number)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       issue := new(Issue)
+       resp, err := s.client.Do(ctx, req, issue)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return issue, resp, nil
+}
+
+// Create a new issue on the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#create-an-issue
+func (s *IssuesService) Create(ctx context.Context, owner string, repo string, issue *IssueRequest) (*Issue, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues", owner, repo)
+       req, err := s.client.NewRequest("POST", u, issue)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       i := new(Issue)
+       resp, err := s.client.Do(ctx, req, i)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return i, resp, nil
+}
+
+// Edit an issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#update-an-issue
+func (s *IssuesService) Edit(ctx context.Context, owner string, repo string, number int, issue *IssueRequest) (*Issue, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%d", owner, repo, number)
+       req, err := s.client.NewRequest("PATCH", u, issue)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       i := new(Issue)
+       resp, err := s.client.Do(ctx, req, i)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return i, resp, nil
+}
+
+// LockIssueOptions specifies the optional parameters to the
+// IssuesService.Lock method.
+type LockIssueOptions struct {
+       // LockReason specifies the reason to lock this issue.
+       // Providing a lock reason can help make it clearer to contributors why an issue
+       // was locked. Possible values are: "off-topic", "too heated", "resolved", and "spam".
+       LockReason string `json:"lock_reason,omitempty"`
+}
+
+// Lock an issue's conversation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#lock-an-issue
+func (s *IssuesService) Lock(ctx context.Context, owner string, repo string, number int, opts *LockIssueOptions) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%d/lock", owner, repo, number)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// Unlock an issue's conversation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#unlock-an-issue
+func (s *IssuesService) Unlock(ctx context.Context, owner string, repo string, number int) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%d/lock", owner, repo, number)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/issues_assignees.go b/vendor/github.com/google/go-github/v37/github/issues_assignees.go
new file mode 100644 (file)
index 0000000..9f15aea
--- /dev/null
@@ -0,0 +1,85 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ListAssignees fetches all available assignees (owners and collaborators) to
+// which issues may be assigned.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-assignees
+func (s *IssuesService) ListAssignees(ctx context.Context, owner, repo string, opts *ListOptions) ([]*User, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/assignees", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       var assignees []*User
+       resp, err := s.client.Do(ctx, req, &assignees)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return assignees, resp, nil
+}
+
+// IsAssignee checks if a user is an assignee for the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#check-if-a-user-can-be-assigned
+func (s *IssuesService) IsAssignee(ctx context.Context, owner, repo, user string) (bool, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/assignees/%v", owner, repo, user)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+       resp, err := s.client.Do(ctx, req, nil)
+       assignee, err := parseBoolResponse(err)
+       return assignee, resp, err
+}
+
+// AddAssignees adds the provided GitHub users as assignees to the issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#add-assignees-to-an-issue
+func (s *IssuesService) AddAssignees(ctx context.Context, owner, repo string, number int, assignees []string) (*Issue, *Response, error) {
+       users := &struct {
+               Assignees []string `json:"assignees,omitempty"`
+       }{Assignees: assignees}
+       u := fmt.Sprintf("repos/%v/%v/issues/%v/assignees", owner, repo, number)
+       req, err := s.client.NewRequest("POST", u, users)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       issue := &Issue{}
+       resp, err := s.client.Do(ctx, req, issue)
+       return issue, resp, err
+}
+
+// RemoveAssignees removes the provided GitHub users as assignees from the issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#remove-assignees-from-an-issue
+func (s *IssuesService) RemoveAssignees(ctx context.Context, owner, repo string, number int, assignees []string) (*Issue, *Response, error) {
+       users := &struct {
+               Assignees []string `json:"assignees,omitempty"`
+       }{Assignees: assignees}
+       u := fmt.Sprintf("repos/%v/%v/issues/%v/assignees", owner, repo, number)
+       req, err := s.client.NewRequest("DELETE", u, users)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       issue := &Issue{}
+       resp, err := s.client.Do(ctx, req, issue)
+       return issue, resp, err
+}
diff --git a/vendor/github.com/google/go-github/v37/github/issues_comments.go b/vendor/github.com/google/go-github/v37/github/issues_comments.go
new file mode 100644 (file)
index 0000000..6dd6d13
--- /dev/null
@@ -0,0 +1,154 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// IssueComment represents a comment left on an issue.
+type IssueComment struct {
+       ID        *int64     `json:"id,omitempty"`
+       NodeID    *string    `json:"node_id,omitempty"`
+       Body      *string    `json:"body,omitempty"`
+       User      *User      `json:"user,omitempty"`
+       Reactions *Reactions `json:"reactions,omitempty"`
+       CreatedAt *time.Time `json:"created_at,omitempty"`
+       UpdatedAt *time.Time `json:"updated_at,omitempty"`
+       // AuthorAssociation is the comment author's relationship to the issue's repository.
+       // Possible values are "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIMER", "FIRST_TIME_CONTRIBUTOR", "MEMBER", "OWNER", or "NONE".
+       AuthorAssociation *string `json:"author_association,omitempty"`
+       URL               *string `json:"url,omitempty"`
+       HTMLURL           *string `json:"html_url,omitempty"`
+       IssueURL          *string `json:"issue_url,omitempty"`
+}
+
+func (i IssueComment) String() string {
+       return Stringify(i)
+}
+
+// IssueListCommentsOptions specifies the optional parameters to the
+// IssuesService.ListComments method.
+type IssueListCommentsOptions struct {
+       // Sort specifies how to sort comments. Possible values are: created, updated.
+       Sort *string `url:"sort,omitempty"`
+
+       // Direction in which to sort comments. Possible values are: asc, desc.
+       Direction *string `url:"direction,omitempty"`
+
+       // Since filters comments by time.
+       Since *time.Time `url:"since,omitempty"`
+
+       ListOptions
+}
+
+// ListComments lists all comments on the specified issue. Specifying an issue
+// number of 0 will return all comments on all issues for the repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-issue-comments
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-issue-comments-for-a-repository
+func (s *IssuesService) ListComments(ctx context.Context, owner string, repo string, number int, opts *IssueListCommentsOptions) ([]*IssueComment, *Response, error) {
+       var u string
+       if number == 0 {
+               u = fmt.Sprintf("repos/%v/%v/issues/comments", owner, repo)
+       } else {
+               u = fmt.Sprintf("repos/%v/%v/issues/%d/comments", owner, repo, number)
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var comments []*IssueComment
+       resp, err := s.client.Do(ctx, req, &comments)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comments, resp, nil
+}
+
+// GetComment fetches the specified issue comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#get-an-issue-comment
+func (s *IssuesService) GetComment(ctx context.Context, owner string, repo string, commentID int64) (*IssueComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       comment := new(IssueComment)
+       resp, err := s.client.Do(ctx, req, comment)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comment, resp, nil
+}
+
+// CreateComment creates a new comment on the specified issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#create-an-issue-comment
+func (s *IssuesService) CreateComment(ctx context.Context, owner string, repo string, number int, comment *IssueComment) (*IssueComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%d/comments", owner, repo, number)
+       req, err := s.client.NewRequest("POST", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+       c := new(IssueComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// EditComment updates an issue comment.
+// A non-nil comment.Body must be provided. Other comment fields should be left nil.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#update-an-issue-comment
+func (s *IssuesService) EditComment(ctx context.Context, owner string, repo string, commentID int64, comment *IssueComment) (*IssueComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID)
+       req, err := s.client.NewRequest("PATCH", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+       c := new(IssueComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// DeleteComment deletes an issue comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#delete-an-issue-comment
+func (s *IssuesService) DeleteComment(ctx context.Context, owner string, repo string, commentID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/issues_events.go b/vendor/github.com/google/go-github/v37/github/issues_events.go
new file mode 100644 (file)
index 0000000..384779c
--- /dev/null
@@ -0,0 +1,179 @@
+// Copyright 2014 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// IssueEvent represents an event that occurred around an Issue or Pull Request.
+type IssueEvent struct {
+       ID  *int64  `json:"id,omitempty"`
+       URL *string `json:"url,omitempty"`
+
+       // The User that generated this event.
+       Actor *User `json:"actor,omitempty"`
+
+       // Event identifies the actual type of Event that occurred. Possible
+       // values are:
+       //
+       //     closed
+       //       The Actor closed the issue.
+       //       If the issue was closed by commit message, CommitID holds the SHA1 hash of the commit.
+       //
+       //     merged
+       //       The Actor merged into master a branch containing a commit mentioning the issue.
+       //       CommitID holds the SHA1 of the merge commit.
+       //
+       //     referenced
+       //       The Actor committed to master a commit mentioning the issue in its commit message.
+       //       CommitID holds the SHA1 of the commit.
+       //
+       //     reopened, unlocked
+       //       The Actor did that to the issue.
+       //
+       //     locked
+       //       The Actor locked the issue.
+       //       LockReason holds the reason of locking the issue (if provided while locking).
+       //
+       //     renamed
+       //       The Actor changed the issue title from Rename.From to Rename.To.
+       //
+       //     mentioned
+       //       Someone unspecified @mentioned the Actor [sic] in an issue comment body.
+       //
+       //     assigned, unassigned
+       //       The Assigner assigned the issue to or removed the assignment from the Assignee.
+       //
+       //     labeled, unlabeled
+       //       The Actor added or removed the Label from the issue.
+       //
+       //     milestoned, demilestoned
+       //       The Actor added or removed the issue from the Milestone.
+       //
+       //     subscribed, unsubscribed
+       //       The Actor subscribed to or unsubscribed from notifications for an issue.
+       //
+       //     head_ref_deleted, head_ref_restored
+       //       The pull request’s branch was deleted or restored.
+       //
+       //    review_dismissed
+       //       The review was dismissed and `DismissedReview` will be populated below.
+       //
+       //    review_requested, review_request_removed
+       //       The Actor requested or removed the request for a review.
+       //       RequestedReviewer and ReviewRequester will be populated below.
+       //
+       Event *string `json:"event,omitempty"`
+
+       CreatedAt *time.Time `json:"created_at,omitempty"`
+       Issue     *Issue     `json:"issue,omitempty"`
+
+       // Only present on certain events; see above.
+       Assignee          *User            `json:"assignee,omitempty"`
+       Assigner          *User            `json:"assigner,omitempty"`
+       CommitID          *string          `json:"commit_id,omitempty"`
+       Milestone         *Milestone       `json:"milestone,omitempty"`
+       Label             *Label           `json:"label,omitempty"`
+       Rename            *Rename          `json:"rename,omitempty"`
+       LockReason        *string          `json:"lock_reason,omitempty"`
+       ProjectCard       *ProjectCard     `json:"project_card,omitempty"`
+       DismissedReview   *DismissedReview `json:"dismissed_review,omitempty"`
+       RequestedReviewer *User            `json:"requested_reviewer,omitempty"`
+       ReviewRequester   *User            `json:"review_requester,omitempty"`
+}
+
+// DismissedReview represents details for 'dismissed_review' events.
+type DismissedReview struct {
+       // State represents the state of the dismissed review.
+       // Possible values are: "commented", "approved", and "changes_requested".
+       State             *string `json:"state,omitempty"`
+       ReviewID          *int64  `json:"review_id,omitempty"`
+       DismissalMessage  *string `json:"dismissal_message,omitempty"`
+       DismissalCommitID *string `json:"dismissal_commit_id,omitempty"`
+}
+
+// ListIssueEvents lists events for the specified issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-issue-events
+func (s *IssuesService) ListIssueEvents(ctx context.Context, owner, repo string, number int, opts *ListOptions) ([]*IssueEvent, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%v/events", owner, repo, number)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req.Header.Set("Accept", mediaTypeProjectCardDetailsPreview)
+
+       var events []*IssueEvent
+       resp, err := s.client.Do(ctx, req, &events)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return events, resp, nil
+}
+
+// ListRepositoryEvents lists events for the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-issue-events-for-a-repository
+func (s *IssuesService) ListRepositoryEvents(ctx context.Context, owner, repo string, opts *ListOptions) ([]*IssueEvent, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/events", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var events []*IssueEvent
+       resp, err := s.client.Do(ctx, req, &events)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return events, resp, nil
+}
+
+// GetEvent returns the specified issue event.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#get-an-issue-event
+func (s *IssuesService) GetEvent(ctx context.Context, owner, repo string, id int64) (*IssueEvent, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/events/%v", owner, repo, id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       event := new(IssueEvent)
+       resp, err := s.client.Do(ctx, req, event)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return event, resp, nil
+}
+
+// Rename contains details for 'renamed' events.
+type Rename struct {
+       From *string `json:"from,omitempty"`
+       To   *string `json:"to,omitempty"`
+}
+
+func (r Rename) String() string {
+       return Stringify(r)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/issues_labels.go b/vendor/github.com/google/go-github/v37/github/issues_labels.go
new file mode 100644 (file)
index 0000000..40f069a
--- /dev/null
@@ -0,0 +1,231 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// Label represents a GitHub label on an Issue
+type Label struct {
+       ID          *int64  `json:"id,omitempty"`
+       URL         *string `json:"url,omitempty"`
+       Name        *string `json:"name,omitempty"`
+       Color       *string `json:"color,omitempty"`
+       Description *string `json:"description,omitempty"`
+       Default     *bool   `json:"default,omitempty"`
+       NodeID      *string `json:"node_id,omitempty"`
+}
+
+func (l Label) String() string {
+       return Stringify(l)
+}
+
+// ListLabels lists all labels for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-labels-for-a-repository
+func (s *IssuesService) ListLabels(ctx context.Context, owner string, repo string, opts *ListOptions) ([]*Label, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/labels", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var labels []*Label
+       resp, err := s.client.Do(ctx, req, &labels)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return labels, resp, nil
+}
+
+// GetLabel gets a single label.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#get-a-label
+func (s *IssuesService) GetLabel(ctx context.Context, owner string, repo string, name string) (*Label, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       label := new(Label)
+       resp, err := s.client.Do(ctx, req, label)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return label, resp, nil
+}
+
+// CreateLabel creates a new label on the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#create-a-label
+func (s *IssuesService) CreateLabel(ctx context.Context, owner string, repo string, label *Label) (*Label, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/labels", owner, repo)
+       req, err := s.client.NewRequest("POST", u, label)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       l := new(Label)
+       resp, err := s.client.Do(ctx, req, l)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return l, resp, nil
+}
+
+// EditLabel edits a label.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#update-a-label
+func (s *IssuesService) EditLabel(ctx context.Context, owner string, repo string, name string, label *Label) (*Label, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name)
+       req, err := s.client.NewRequest("PATCH", u, label)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       l := new(Label)
+       resp, err := s.client.Do(ctx, req, l)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return l, resp, nil
+}
+
+// DeleteLabel deletes a label.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#delete-a-label
+func (s *IssuesService) DeleteLabel(ctx context.Context, owner string, repo string, name string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListLabelsByIssue lists all labels for an issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-labels-for-an-issue
+func (s *IssuesService) ListLabelsByIssue(ctx context.Context, owner string, repo string, number int, opts *ListOptions) ([]*Label, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var labels []*Label
+       resp, err := s.client.Do(ctx, req, &labels)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return labels, resp, nil
+}
+
+// AddLabelsToIssue adds labels to an issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#add-labels-to-an-issue
+func (s *IssuesService) AddLabelsToIssue(ctx context.Context, owner string, repo string, number int, labels []string) ([]*Label, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number)
+       req, err := s.client.NewRequest("POST", u, labels)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var l []*Label
+       resp, err := s.client.Do(ctx, req, &l)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return l, resp, nil
+}
+
+// RemoveLabelForIssue removes a label for an issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#remove-a-label-from-an-issue
+func (s *IssuesService) RemoveLabelForIssue(ctx context.Context, owner string, repo string, number int, label string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%d/labels/%v", owner, repo, number, label)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ReplaceLabelsForIssue replaces all labels for an issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#set-labels-for-an-issue
+func (s *IssuesService) ReplaceLabelsForIssue(ctx context.Context, owner string, repo string, number int, labels []string) ([]*Label, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number)
+       req, err := s.client.NewRequest("PUT", u, labels)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var l []*Label
+       resp, err := s.client.Do(ctx, req, &l)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return l, resp, nil
+}
+
+// RemoveLabelsForIssue removes all labels for an issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#remove-all-labels-from-an-issue
+func (s *IssuesService) RemoveLabelsForIssue(ctx context.Context, owner string, repo string, number int) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListLabelsForMilestone lists labels for every issue in a milestone.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-labels-for-issues-in-a-milestone
+func (s *IssuesService) ListLabelsForMilestone(ctx context.Context, owner string, repo string, number int, opts *ListOptions) ([]*Label, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/milestones/%d/labels", owner, repo, number)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var labels []*Label
+       resp, err := s.client.Do(ctx, req, &labels)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return labels, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/issues_milestones.go b/vendor/github.com/google/go-github/v37/github/issues_milestones.go
new file mode 100644 (file)
index 0000000..f9b1f19
--- /dev/null
@@ -0,0 +1,148 @@
+// Copyright 2014 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// Milestone represents a GitHub repository milestone.
+type Milestone struct {
+       URL          *string    `json:"url,omitempty"`
+       HTMLURL      *string    `json:"html_url,omitempty"`
+       LabelsURL    *string    `json:"labels_url,omitempty"`
+       ID           *int64     `json:"id,omitempty"`
+       Number       *int       `json:"number,omitempty"`
+       State        *string    `json:"state,omitempty"`
+       Title        *string    `json:"title,omitempty"`
+       Description  *string    `json:"description,omitempty"`
+       Creator      *User      `json:"creator,omitempty"`
+       OpenIssues   *int       `json:"open_issues,omitempty"`
+       ClosedIssues *int       `json:"closed_issues,omitempty"`
+       CreatedAt    *time.Time `json:"created_at,omitempty"`
+       UpdatedAt    *time.Time `json:"updated_at,omitempty"`
+       ClosedAt     *time.Time `json:"closed_at,omitempty"`
+       DueOn        *time.Time `json:"due_on,omitempty"`
+       NodeID       *string    `json:"node_id,omitempty"`
+}
+
+func (m Milestone) String() string {
+       return Stringify(m)
+}
+
+// MilestoneListOptions specifies the optional parameters to the
+// IssuesService.ListMilestones method.
+type MilestoneListOptions struct {
+       // State filters milestones based on their state. Possible values are:
+       // open, closed, all. Default is "open".
+       State string `url:"state,omitempty"`
+
+       // Sort specifies how to sort milestones. Possible values are: due_on, completeness.
+       // Default value is "due_on".
+       Sort string `url:"sort,omitempty"`
+
+       // Direction in which to sort milestones. Possible values are: asc, desc.
+       // Default is "asc".
+       Direction string `url:"direction,omitempty"`
+
+       ListOptions
+}
+
+// ListMilestones lists all milestones for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-milestones
+func (s *IssuesService) ListMilestones(ctx context.Context, owner string, repo string, opts *MilestoneListOptions) ([]*Milestone, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/milestones", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var milestones []*Milestone
+       resp, err := s.client.Do(ctx, req, &milestones)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return milestones, resp, nil
+}
+
+// GetMilestone gets a single milestone.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#get-a-milestone
+func (s *IssuesService) GetMilestone(ctx context.Context, owner string, repo string, number int) (*Milestone, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       milestone := new(Milestone)
+       resp, err := s.client.Do(ctx, req, milestone)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return milestone, resp, nil
+}
+
+// CreateMilestone creates a new milestone on the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#create-a-milestone
+func (s *IssuesService) CreateMilestone(ctx context.Context, owner string, repo string, milestone *Milestone) (*Milestone, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/milestones", owner, repo)
+       req, err := s.client.NewRequest("POST", u, milestone)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       m := new(Milestone)
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// EditMilestone edits a milestone.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#update-a-milestone
+func (s *IssuesService) EditMilestone(ctx context.Context, owner string, repo string, number int, milestone *Milestone) (*Milestone, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number)
+       req, err := s.client.NewRequest("PATCH", u, milestone)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       m := new(Milestone)
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// DeleteMilestone deletes a milestone.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#delete-a-milestone
+func (s *IssuesService) DeleteMilestone(ctx context.Context, owner string, repo string, number int) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/issues_timeline.go b/vendor/github.com/google/go-github/v37/github/issues_timeline.go
new file mode 100644 (file)
index 0000000..1fd13b1
--- /dev/null
@@ -0,0 +1,161 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "strings"
+       "time"
+)
+
+// Timeline represents an event that occurred around an Issue or Pull Request.
+//
+// It is similar to an IssueEvent but may contain more information.
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/timeline/
+type Timeline struct {
+       ID        *int64  `json:"id,omitempty"`
+       URL       *string `json:"url,omitempty"`
+       CommitURL *string `json:"commit_url,omitempty"`
+
+       // The User object that generated the event.
+       Actor *User `json:"actor,omitempty"`
+
+       // Event identifies the actual type of Event that occurred. Possible values
+       // are:
+       //
+       //     assigned
+       //       The issue was assigned to the assignee.
+       //
+       //     closed
+       //       The issue was closed by the actor. When the commit_id is present, it
+       //       identifies the commit that closed the issue using "closes / fixes #NN"
+       //       syntax.
+       //
+       //     commented
+       //       A comment was added to the issue.
+       //
+       //     committed
+       //       A commit was added to the pull request's 'HEAD' branch. Only provided
+       //       for pull requests.
+       //
+       //     cross-referenced
+       //       The issue was referenced from another issue. The 'source' attribute
+       //       contains the 'id', 'actor', and 'url' of the reference's source.
+       //
+       //     demilestoned
+       //       The issue was removed from a milestone.
+       //
+       //     head_ref_deleted
+       //       The pull request's branch was deleted.
+       //
+       //     head_ref_restored
+       //       The pull request's branch was restored.
+       //
+       //     labeled
+       //       A label was added to the issue.
+       //
+       //     locked
+       //       The issue was locked by the actor.
+       //
+       //     mentioned
+       //       The actor was @mentioned in an issue body.
+       //
+       //     merged
+       //       The issue was merged by the actor. The 'commit_id' attribute is the
+       //       SHA1 of the HEAD commit that was merged.
+       //
+       //     milestoned
+       //       The issue was added to a milestone.
+       //
+       //     referenced
+       //       The issue was referenced from a commit message. The 'commit_id'
+       //       attribute is the commit SHA1 of where that happened.
+       //
+       //     renamed
+       //       The issue title was changed.
+       //
+       //     reopened
+       //       The issue was reopened by the actor.
+       //
+       //     reviewed
+       //       The pull request was reviewed.
+       //
+       //     subscribed
+       //       The actor subscribed to receive notifications for an issue.
+       //
+       //     unassigned
+       //       The assignee was unassigned from the issue.
+       //
+       //     unlabeled
+       //       A label was removed from the issue.
+       //
+       //     unlocked
+       //       The issue was unlocked by the actor.
+       //
+       //     unsubscribed
+       //       The actor unsubscribed to stop receiving notifications for an issue.
+       //
+       Event *string `json:"event,omitempty"`
+
+       // The string SHA of a commit that referenced this Issue or Pull Request.
+       CommitID *string `json:"commit_id,omitempty"`
+       // The timestamp indicating when the event occurred.
+       CreatedAt *time.Time `json:"created_at,omitempty"`
+       // The Label object including `name` and `color` attributes. Only provided for
+       // 'labeled' and 'unlabeled' events.
+       Label *Label `json:"label,omitempty"`
+       // The User object which was assigned to (or unassigned from) this Issue or
+       // Pull Request. Only provided for 'assigned' and 'unassigned' events.
+       Assignee *User `json:"assignee,omitempty"`
+       // The Milestone object including a 'title' attribute.
+       // Only provided for 'milestoned' and 'demilestoned' events.
+       Milestone *Milestone `json:"milestone,omitempty"`
+       // The 'id', 'actor', and 'url' for the source of a reference from another issue.
+       // Only provided for 'cross-referenced' events.
+       Source *Source `json:"source,omitempty"`
+       // An object containing rename details including 'from' and 'to' attributes.
+       // Only provided for 'renamed' events.
+       Rename      *Rename      `json:"rename,omitempty"`
+       ProjectCard *ProjectCard `json:"project_card,omitempty"`
+       // The state of a submitted review. Can be one of: 'commented',
+       // 'changes_requested' or 'approved'.
+       // Only provided for 'reviewed' events.
+       State *string `json:"state,omitempty"`
+}
+
+// Source represents a reference's source.
+type Source struct {
+       ID    *int64  `json:"id,omitempty"`
+       URL   *string `json:"url,omitempty"`
+       Actor *User   `json:"actor,omitempty"`
+       Type  *string `json:"type,omitempty"`
+       Issue *Issue  `json:"issue,omitempty"`
+}
+
+// ListIssueTimeline lists events for the specified issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/issues/#list-timeline-events-for-an-issue
+func (s *IssuesService) ListIssueTimeline(ctx context.Context, owner, repo string, number int, opts *ListOptions) ([]*Timeline, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%v/timeline", owner, repo, number)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeTimelinePreview, mediaTypeProjectCardDetailsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       var events []*Timeline
+       resp, err := s.client.Do(ctx, req, &events)
+       return events, resp, err
+}
diff --git a/vendor/github.com/google/go-github/v37/github/licenses.go b/vendor/github.com/google/go-github/v37/github/licenses.go
new file mode 100644 (file)
index 0000000..85e3626
--- /dev/null
@@ -0,0 +1,97 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// LicensesService handles communication with the license related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/licenses/
+type LicensesService service
+
+// RepositoryLicense represents the license for a repository.
+type RepositoryLicense struct {
+       Name *string `json:"name,omitempty"`
+       Path *string `json:"path,omitempty"`
+
+       SHA         *string  `json:"sha,omitempty"`
+       Size        *int     `json:"size,omitempty"`
+       URL         *string  `json:"url,omitempty"`
+       HTMLURL     *string  `json:"html_url,omitempty"`
+       GitURL      *string  `json:"git_url,omitempty"`
+       DownloadURL *string  `json:"download_url,omitempty"`
+       Type        *string  `json:"type,omitempty"`
+       Content     *string  `json:"content,omitempty"`
+       Encoding    *string  `json:"encoding,omitempty"`
+       License     *License `json:"license,omitempty"`
+}
+
+func (l RepositoryLicense) String() string {
+       return Stringify(l)
+}
+
+// License represents an open source license.
+type License struct {
+       Key  *string `json:"key,omitempty"`
+       Name *string `json:"name,omitempty"`
+       URL  *string `json:"url,omitempty"`
+
+       SPDXID         *string   `json:"spdx_id,omitempty"`
+       HTMLURL        *string   `json:"html_url,omitempty"`
+       Featured       *bool     `json:"featured,omitempty"`
+       Description    *string   `json:"description,omitempty"`
+       Implementation *string   `json:"implementation,omitempty"`
+       Permissions    *[]string `json:"permissions,omitempty"`
+       Conditions     *[]string `json:"conditions,omitempty"`
+       Limitations    *[]string `json:"limitations,omitempty"`
+       Body           *string   `json:"body,omitempty"`
+}
+
+func (l License) String() string {
+       return Stringify(l)
+}
+
+// List popular open source licenses.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/licenses/#list-all-licenses
+func (s *LicensesService) List(ctx context.Context) ([]*License, *Response, error) {
+       req, err := s.client.NewRequest("GET", "licenses", nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var licenses []*License
+       resp, err := s.client.Do(ctx, req, &licenses)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return licenses, resp, nil
+}
+
+// Get extended metadata for one license.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/licenses/#get-a-license
+func (s *LicensesService) Get(ctx context.Context, licenseName string) (*License, *Response, error) {
+       u := fmt.Sprintf("licenses/%s", licenseName)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       license := new(License)
+       resp, err := s.client.Do(ctx, req, license)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return license, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/messages.go b/vendor/github.com/google/go-github/v37/github/messages.go
new file mode 100644 (file)
index 0000000..06ea9e4
--- /dev/null
@@ -0,0 +1,279 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This file provides functions for validating payloads from GitHub Webhooks.
+// GitHub API docs: https://developer.github.com/webhooks/securing/#validating-payloads-from-github
+
+package github
+
+import (
+       "crypto/hmac"
+       "crypto/sha1"
+       "crypto/sha256"
+       "crypto/sha512"
+       "encoding/hex"
+       "encoding/json"
+       "errors"
+       "fmt"
+       "hash"
+       "io/ioutil"
+       "mime"
+       "net/http"
+       "net/url"
+       "strings"
+)
+
+const (
+       // sha1Prefix is the prefix used by GitHub before the HMAC hexdigest.
+       sha1Prefix = "sha1"
+       // sha256Prefix and sha512Prefix are provided for future compatibility.
+       sha256Prefix = "sha256"
+       sha512Prefix = "sha512"
+       // sha1SignatureHeader is the GitHub header key used to pass the HMAC-SHA1 hexdigest.
+       sha1SignatureHeader = "X-Hub-Signature"
+       // sha256SignatureHeader is the GitHub header key used to pass the HMAC-SHA256 hexdigest.
+       sha256SignatureHeader = "X-Hub-Signature-256"
+       // eventTypeHeader is the GitHub header key used to pass the event type.
+       eventTypeHeader = "X-Github-Event"
+       // deliveryIDHeader is the GitHub header key used to pass the unique ID for the webhook event.
+       deliveryIDHeader = "X-Github-Delivery"
+)
+
+var (
+       // eventTypeMapping maps webhooks types to their corresponding go-github struct types.
+       eventTypeMapping = map[string]string{
+               "check_run":                      "CheckRunEvent",
+               "check_suite":                    "CheckSuiteEvent",
+               "commit_comment":                 "CommitCommentEvent",
+               "content_reference":              "ContentReferenceEvent",
+               "create":                         "CreateEvent",
+               "delete":                         "DeleteEvent",
+               "deploy_key":                     "DeployKeyEvent",
+               "deployment":                     "DeploymentEvent",
+               "deployment_status":              "DeploymentStatusEvent",
+               "fork":                           "ForkEvent",
+               "github_app_authorization":       "GitHubAppAuthorizationEvent",
+               "gollum":                         "GollumEvent",
+               "installation":                   "InstallationEvent",
+               "installation_repositories":      "InstallationRepositoriesEvent",
+               "issue_comment":                  "IssueCommentEvent",
+               "issues":                         "IssuesEvent",
+               "label":                          "LabelEvent",
+               "marketplace_purchase":           "MarketplacePurchaseEvent",
+               "member":                         "MemberEvent",
+               "membership":                     "MembershipEvent",
+               "meta":                           "MetaEvent",
+               "milestone":                      "MilestoneEvent",
+               "organization":                   "OrganizationEvent",
+               "org_block":                      "OrgBlockEvent",
+               "package":                        "PackageEvent",
+               "page_build":                     "PageBuildEvent",
+               "ping":                           "PingEvent",
+               "project":                        "ProjectEvent",
+               "project_card":                   "ProjectCardEvent",
+               "project_column":                 "ProjectColumnEvent",
+               "public":                         "PublicEvent",
+               "pull_request":                   "PullRequestEvent",
+               "pull_request_review":            "PullRequestReviewEvent",
+               "pull_request_review_comment":    "PullRequestReviewCommentEvent",
+               "pull_request_target":            "PullRequestTargetEvent",
+               "push":                           "PushEvent",
+               "repository":                     "RepositoryEvent",
+               "repository_dispatch":            "RepositoryDispatchEvent",
+               "repository_vulnerability_alert": "RepositoryVulnerabilityAlertEvent",
+               "release":                        "ReleaseEvent",
+               "star":                           "StarEvent",
+               "status":                         "StatusEvent",
+               "team":                           "TeamEvent",
+               "team_add":                       "TeamAddEvent",
+               "user":                           "UserEvent",
+               "watch":                          "WatchEvent",
+               "workflow_dispatch":              "WorkflowDispatchEvent",
+               "workflow_run":                   "WorkflowRunEvent",
+       }
+)
+
+// genMAC generates the HMAC signature for a message provided the secret key
+// and hashFunc.
+func genMAC(message, key []byte, hashFunc func() hash.Hash) []byte {
+       mac := hmac.New(hashFunc, key)
+       mac.Write(message)
+       return mac.Sum(nil)
+}
+
+// checkMAC reports whether messageMAC is a valid HMAC tag for message.
+func checkMAC(message, messageMAC, key []byte, hashFunc func() hash.Hash) bool {
+       expectedMAC := genMAC(message, key, hashFunc)
+       return hmac.Equal(messageMAC, expectedMAC)
+}
+
+// messageMAC returns the hex-decoded HMAC tag from the signature and its
+// corresponding hash function.
+func messageMAC(signature string) ([]byte, func() hash.Hash, error) {
+       if signature == "" {
+               return nil, nil, errors.New("missing signature")
+       }
+       sigParts := strings.SplitN(signature, "=", 2)
+       if len(sigParts) != 2 {
+               return nil, nil, fmt.Errorf("error parsing signature %q", signature)
+       }
+
+       var hashFunc func() hash.Hash
+       switch sigParts[0] {
+       case sha1Prefix:
+               hashFunc = sha1.New
+       case sha256Prefix:
+               hashFunc = sha256.New
+       case sha512Prefix:
+               hashFunc = sha512.New
+       default:
+               return nil, nil, fmt.Errorf("unknown hash type prefix: %q", sigParts[0])
+       }
+
+       buf, err := hex.DecodeString(sigParts[1])
+       if err != nil {
+               return nil, nil, fmt.Errorf("error decoding signature %q: %v", signature, err)
+       }
+       return buf, hashFunc, nil
+}
+
+// ValidatePayload validates an incoming GitHub Webhook event request
+// and returns the (JSON) payload.
+// The Content-Type header of the payload can be "application/json" or "application/x-www-form-urlencoded".
+// If the Content-Type is neither then an error is returned.
+// secretToken is the GitHub Webhook secret token.
+// If your webhook does not contain a secret token, you can pass nil or an empty slice.
+// This is intended for local development purposes only and all webhooks should ideally set up a secret token.
+//
+// Example usage:
+//
+//     func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+//       payload, err := github.ValidatePayload(r, s.webhookSecretKey)
+//       if err != nil { ... }
+//       // Process payload...
+//     }
+//
+func ValidatePayload(r *http.Request, secretToken []byte) (payload []byte, err error) {
+       var body []byte // Raw body that GitHub uses to calculate the signature.
+
+       ct := r.Header.Get("Content-Type")
+
+       mediatype, _, err := mime.ParseMediaType(ct)
+       if err != nil {
+               mediatype = ""
+       }
+
+       switch mediatype {
+       case "application/json":
+               var err error
+               if body, err = ioutil.ReadAll(r.Body); err != nil {
+                       return nil, err
+               }
+
+               // If the content type is application/json,
+               // the JSON payload is just the original body.
+               payload = body
+
+       case "application/x-www-form-urlencoded":
+               // payloadFormParam is the name of the form parameter that the JSON payload
+               // will be in if a webhook has its content type set to application/x-www-form-urlencoded.
+               const payloadFormParam = "payload"
+
+               var err error
+               if body, err = ioutil.ReadAll(r.Body); err != nil {
+                       return nil, err
+               }
+
+               // If the content type is application/x-www-form-urlencoded,
+               // the JSON payload will be under the "payload" form param.
+               form, err := url.ParseQuery(string(body))
+               if err != nil {
+                       return nil, err
+               }
+               payload = []byte(form.Get(payloadFormParam))
+
+       default:
+               return nil, fmt.Errorf("Webhook request has unsupported Content-Type %q", ct)
+       }
+
+       // Only validate the signature if a secret token exists. This is intended for
+       // local development only and all webhooks should ideally set up a secret token.
+       if len(secretToken) > 0 {
+               sig := r.Header.Get(sha256SignatureHeader)
+               if sig == "" {
+                       sig = r.Header.Get(sha1SignatureHeader)
+               }
+               if err := ValidateSignature(sig, body, secretToken); err != nil {
+                       return nil, err
+               }
+       }
+
+       return payload, nil
+}
+
+// ValidateSignature validates the signature for the given payload.
+// signature is the GitHub hash signature delivered in the X-Hub-Signature header.
+// payload is the JSON payload sent by GitHub Webhooks.
+// secretToken is the GitHub Webhook secret token.
+//
+// GitHub API docs: https://developer.github.com/webhooks/securing/#validating-payloads-from-github
+func ValidateSignature(signature string, payload, secretToken []byte) error {
+       messageMAC, hashFunc, err := messageMAC(signature)
+       if err != nil {
+               return err
+       }
+       if !checkMAC(payload, messageMAC, secretToken, hashFunc) {
+               return errors.New("payload signature check failed")
+       }
+       return nil
+}
+
+// WebHookType returns the event type of webhook request r.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/hooks/#webhook-headers
+func WebHookType(r *http.Request) string {
+       return r.Header.Get(eventTypeHeader)
+}
+
+// DeliveryID returns the unique delivery ID of webhook request r.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/hooks/#webhook-headers
+func DeliveryID(r *http.Request) string {
+       return r.Header.Get(deliveryIDHeader)
+}
+
+// ParseWebHook parses the event payload. For recognized event types, a
+// value of the corresponding struct type will be returned (as returned
+// by Event.ParsePayload()). An error will be returned for unrecognized event
+// types.
+//
+// Example usage:
+//
+//     func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+//       payload, err := github.ValidatePayload(r, s.webhookSecretKey)
+//       if err != nil { ... }
+//       event, err := github.ParseWebHook(github.WebHookType(r), payload)
+//       if err != nil { ... }
+//       switch event := event.(type) {
+//       case *github.CommitCommentEvent:
+//           processCommitCommentEvent(event)
+//       case *github.CreateEvent:
+//           processCreateEvent(event)
+//       ...
+//       }
+//     }
+//
+func ParseWebHook(messageType string, payload []byte) (interface{}, error) {
+       eventType, ok := eventTypeMapping[messageType]
+       if !ok {
+               return nil, fmt.Errorf("unknown X-Github-Event in message: %v", messageType)
+       }
+
+       event := Event{
+               Type:       &eventType,
+               RawPayload: (*json.RawMessage)(&payload),
+       }
+       return event.ParsePayload()
+}
diff --git a/vendor/github.com/google/go-github/v37/github/migrations.go b/vendor/github.com/google/go-github/v37/github/migrations.go
new file mode 100644 (file)
index 0000000..7694021
--- /dev/null
@@ -0,0 +1,228 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "errors"
+       "fmt"
+       "net/http"
+       "strings"
+)
+
+// MigrationService provides access to the migration related functions
+// in the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migration/
+type MigrationService service
+
+// Migration represents a GitHub migration (archival).
+type Migration struct {
+       ID   *int64  `json:"id,omitempty"`
+       GUID *string `json:"guid,omitempty"`
+       // State is the current state of a migration.
+       // Possible values are:
+       //     "pending" which means the migration hasn't started yet,
+       //     "exporting" which means the migration is in progress,
+       //     "exported" which means the migration finished successfully, or
+       //     "failed" which means the migration failed.
+       State *string `json:"state,omitempty"`
+       // LockRepositories indicates whether repositories are locked (to prevent
+       // manipulation) while migrating data.
+       LockRepositories *bool `json:"lock_repositories,omitempty"`
+       // ExcludeAttachments indicates whether attachments should be excluded from
+       // the migration (to reduce migration archive file size).
+       ExcludeAttachments *bool         `json:"exclude_attachments,omitempty"`
+       URL                *string       `json:"url,omitempty"`
+       CreatedAt          *string       `json:"created_at,omitempty"`
+       UpdatedAt          *string       `json:"updated_at,omitempty"`
+       Repositories       []*Repository `json:"repositories,omitempty"`
+}
+
+func (m Migration) String() string {
+       return Stringify(m)
+}
+
+// MigrationOptions specifies the optional parameters to Migration methods.
+type MigrationOptions struct {
+       // LockRepositories indicates whether repositories should be locked (to prevent
+       // manipulation) while migrating data.
+       LockRepositories bool
+
+       // ExcludeAttachments indicates whether attachments should be excluded from
+       // the migration (to reduce migration archive file size).
+       ExcludeAttachments bool
+}
+
+// startMigration represents the body of a StartMigration request.
+type startMigration struct {
+       // Repositories is a slice of repository names to migrate.
+       Repositories []string `json:"repositories,omitempty"`
+
+       // LockRepositories indicates whether repositories should be locked (to prevent
+       // manipulation) while migrating data.
+       LockRepositories *bool `json:"lock_repositories,omitempty"`
+
+       // ExcludeAttachments indicates whether attachments should be excluded from
+       // the migration (to reduce migration archive file size).
+       ExcludeAttachments *bool `json:"exclude_attachments,omitempty"`
+}
+
+// StartMigration starts the generation of a migration archive.
+// repos is a slice of repository names to migrate.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#start-an-organization-migration
+func (s *MigrationService) StartMigration(ctx context.Context, org string, repos []string, opts *MigrationOptions) (*Migration, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/migrations", org)
+
+       body := &startMigration{Repositories: repos}
+       if opts != nil {
+               body.LockRepositories = Bool(opts.LockRepositories)
+               body.ExcludeAttachments = Bool(opts.ExcludeAttachments)
+       }
+
+       req, err := s.client.NewRequest("POST", u, body)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       m := &Migration{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// ListMigrations lists the most recent migrations.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#list-organization-migrations
+func (s *MigrationService) ListMigrations(ctx context.Context, org string, opts *ListOptions) ([]*Migration, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/migrations", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       var m []*Migration
+       resp, err := s.client.Do(ctx, req, &m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// MigrationStatus gets the status of a specific migration archive.
+// id is the migration ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#get-an-organization-migration-status
+func (s *MigrationService) MigrationStatus(ctx context.Context, org string, id int64) (*Migration, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/migrations/%v", org, id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       m := &Migration{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// MigrationArchiveURL fetches a migration archive URL.
+// id is the migration ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#download-an-organization-migration-archive
+func (s *MigrationService) MigrationArchiveURL(ctx context.Context, org string, id int64) (url string, err error) {
+       u := fmt.Sprintf("orgs/%v/migrations/%v/archive", org, id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return "", err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       s.client.clientMu.Lock()
+       defer s.client.clientMu.Unlock()
+
+       // Disable the redirect mechanism because AWS fails if the GitHub auth token is provided.
+       var loc string
+       saveRedirect := s.client.client.CheckRedirect
+       s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
+               loc = req.URL.String()
+               return errors.New("disable redirect")
+       }
+       defer func() { s.client.client.CheckRedirect = saveRedirect }()
+
+       _, err = s.client.Do(ctx, req, nil) // expect error from disable redirect
+       if err == nil {
+               return "", errors.New("expected redirect, none provided")
+       }
+       if !strings.Contains(err.Error(), "disable redirect") {
+               return "", err
+       }
+       return loc, nil
+}
+
+// DeleteMigration deletes a previous migration archive.
+// id is the migration ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#delete-an-organization-migration-archive
+func (s *MigrationService) DeleteMigration(ctx context.Context, org string, id int64) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/migrations/%v/archive", org, id)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// UnlockRepo unlocks a repository that was locked for migration.
+// id is the migration ID.
+// You should unlock each migrated repository and delete them when the migration
+// is complete and you no longer need the source data.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#unlock-an-organization-repository
+func (s *MigrationService) UnlockRepo(ctx context.Context, org string, id int64, repo string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/migrations/%v/repos/%v/lock", org, id, repo)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/migrations_source_import.go b/vendor/github.com/google/go-github/v37/github/migrations_source_import.go
new file mode 100644 (file)
index 0000000..e34b3ac
--- /dev/null
@@ -0,0 +1,305 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// Import represents a repository import request.
+type Import struct {
+       // The URL of the originating repository.
+       VCSURL *string `json:"vcs_url,omitempty"`
+       // The originating VCS type. Can be one of 'subversion', 'git',
+       // 'mercurial', or 'tfvc'. Without this parameter, the import job will
+       // take additional time to detect the VCS type before beginning the
+       // import. This detection step will be reflected in the response.
+       VCS *string `json:"vcs,omitempty"`
+       // VCSUsername and VCSPassword are only used for StartImport calls that
+       // are importing a password-protected repository.
+       VCSUsername *string `json:"vcs_username,omitempty"`
+       VCSPassword *string `json:"vcs_password,omitempty"`
+       // For a tfvc import, the name of the project that is being imported.
+       TFVCProject *string `json:"tfvc_project,omitempty"`
+
+       // LFS related fields that may be preset in the Import Progress response
+
+       // Describes whether the import has been opted in or out of using Git
+       // LFS. The value can be 'opt_in', 'opt_out', or 'undecided' if no
+       // action has been taken.
+       UseLFS *string `json:"use_lfs,omitempty"`
+       // Describes whether files larger than 100MB were found during the
+       // importing step.
+       HasLargeFiles *bool `json:"has_large_files,omitempty"`
+       // The total size in gigabytes of files larger than 100MB found in the
+       // originating repository.
+       LargeFilesSize *int `json:"large_files_size,omitempty"`
+       // The total number of files larger than 100MB found in the originating
+       // repository. To see a list of these files, call LargeFiles.
+       LargeFilesCount *int `json:"large_files_count,omitempty"`
+
+       // Identifies the current status of an import. An import that does not
+       // have errors will progress through these steps:
+       //
+       //     detecting - the "detection" step of the import is in progress
+       //         because the request did not include a VCS parameter. The
+       //         import is identifying the type of source control present at
+       //         the URL.
+       //     importing - the "raw" step of the import is in progress. This is
+       //         where commit data is fetched from the original repository.
+       //         The import progress response will include CommitCount (the
+       //         total number of raw commits that will be imported) and
+       //         Percent (0 - 100, the current progress through the import).
+       //     mapping - the "rewrite" step of the import is in progress. This
+       //         is where SVN branches are converted to Git branches, and
+       //         where author updates are applied. The import progress
+       //         response does not include progress information.
+       //     pushing - the "push" step of the import is in progress. This is
+       //         where the importer updates the repository on GitHub. The
+       //         import progress response will include PushPercent, which is
+       //         the percent value reported by git push when it is "Writing
+       //         objects".
+       //     complete - the import is complete, and the repository is ready
+       //         on GitHub.
+       //
+       // If there are problems, you will see one of these in the status field:
+       //
+       //     auth_failed - the import requires authentication in order to
+       //         connect to the original repository. Make an UpdateImport
+       //         request, and include VCSUsername and VCSPassword.
+       //     error - the import encountered an error. The import progress
+       //         response will include the FailedStep and an error message.
+       //         Contact GitHub support for more information.
+       //     detection_needs_auth - the importer requires authentication for
+       //         the originating repository to continue detection. Make an
+       //         UpdatImport request, and include VCSUsername and
+       //         VCSPassword.
+       //     detection_found_nothing - the importer didn't recognize any
+       //         source control at the URL.
+       //     detection_found_multiple - the importer found several projects
+       //         or repositories at the provided URL. When this is the case,
+       //         the Import Progress response will also include a
+       //         ProjectChoices field with the possible project choices as
+       //         values. Make an UpdateImport request, and include VCS and
+       //         (if applicable) TFVCProject.
+       Status        *string `json:"status,omitempty"`
+       CommitCount   *int    `json:"commit_count,omitempty"`
+       StatusText    *string `json:"status_text,omitempty"`
+       AuthorsCount  *int    `json:"authors_count,omitempty"`
+       Percent       *int    `json:"percent,omitempty"`
+       PushPercent   *int    `json:"push_percent,omitempty"`
+       URL           *string `json:"url,omitempty"`
+       HTMLURL       *string `json:"html_url,omitempty"`
+       AuthorsURL    *string `json:"authors_url,omitempty"`
+       RepositoryURL *string `json:"repository_url,omitempty"`
+       Message       *string `json:"message,omitempty"`
+       FailedStep    *string `json:"failed_step,omitempty"`
+
+       // Human readable display name, provided when the Import appears as
+       // part of ProjectChoices.
+       HumanName *string `json:"human_name,omitempty"`
+
+       // When the importer finds several projects or repositories at the
+       // provided URLs, this will identify the available choices. Call
+       // UpdateImport with the selected Import value.
+       ProjectChoices []*Import `json:"project_choices,omitempty"`
+}
+
+func (i Import) String() string {
+       return Stringify(i)
+}
+
+// SourceImportAuthor identifies an author imported from a source repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migration/source_imports/#get-commit-authors
+type SourceImportAuthor struct {
+       ID         *int64  `json:"id,omitempty"`
+       RemoteID   *string `json:"remote_id,omitempty"`
+       RemoteName *string `json:"remote_name,omitempty"`
+       Email      *string `json:"email,omitempty"`
+       Name       *string `json:"name,omitempty"`
+       URL        *string `json:"url,omitempty"`
+       ImportURL  *string `json:"import_url,omitempty"`
+}
+
+func (a SourceImportAuthor) String() string {
+       return Stringify(a)
+}
+
+// LargeFile identifies a file larger than 100MB found during a repository import.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migration/source_imports/#get-large-files
+type LargeFile struct {
+       RefName *string `json:"ref_name,omitempty"`
+       Path    *string `json:"path,omitempty"`
+       OID     *string `json:"oid,omitempty"`
+       Size    *int    `json:"size,omitempty"`
+}
+
+func (f LargeFile) String() string {
+       return Stringify(f)
+}
+
+// StartImport initiates a repository import.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#start-an-import
+func (s *MigrationService) StartImport(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import", owner, repo)
+       req, err := s.client.NewRequest("PUT", u, in)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       out := new(Import)
+       resp, err := s.client.Do(ctx, req, out)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return out, resp, nil
+}
+
+// ImportProgress queries for the status and progress of an ongoing repository import.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#get-an-import-status
+func (s *MigrationService) ImportProgress(ctx context.Context, owner, repo string) (*Import, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       out := new(Import)
+       resp, err := s.client.Do(ctx, req, out)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return out, resp, nil
+}
+
+// UpdateImport initiates a repository import.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#update-an-import
+func (s *MigrationService) UpdateImport(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import", owner, repo)
+       req, err := s.client.NewRequest("PATCH", u, in)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       out := new(Import)
+       resp, err := s.client.Do(ctx, req, out)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return out, resp, nil
+}
+
+// CommitAuthors gets the authors mapped from the original repository.
+//
+// Each type of source control system represents authors in a different way.
+// For example, a Git commit author has a display name and an email address,
+// but a Subversion commit author just has a username. The GitHub Importer will
+// make the author information valid, but the author might not be correct. For
+// example, it will change the bare Subversion username "hubot" into something
+// like "hubot <hubot@12341234-abab-fefe-8787-fedcba987654>".
+//
+// This method and MapCommitAuthor allow you to provide correct Git author
+// information.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#get-commit-authors
+func (s *MigrationService) CommitAuthors(ctx context.Context, owner, repo string) ([]*SourceImportAuthor, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import/authors", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var authors []*SourceImportAuthor
+       resp, err := s.client.Do(ctx, req, &authors)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return authors, resp, nil
+}
+
+// MapCommitAuthor updates an author's identity for the import. Your
+// application can continue updating authors any time before you push new
+// commits to the repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#map-a-commit-author
+func (s *MigrationService) MapCommitAuthor(ctx context.Context, owner, repo string, id int64, author *SourceImportAuthor) (*SourceImportAuthor, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import/authors/%v", owner, repo, id)
+       req, err := s.client.NewRequest("PATCH", u, author)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       out := new(SourceImportAuthor)
+       resp, err := s.client.Do(ctx, req, out)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return out, resp, nil
+}
+
+// SetLFSPreference sets whether imported repositories should use Git LFS for
+// files larger than 100MB. Only the UseLFS field on the provided Import is
+// used.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#update-git-lfs-preference
+func (s *MigrationService) SetLFSPreference(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import/lfs", owner, repo)
+       req, err := s.client.NewRequest("PATCH", u, in)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       out := new(Import)
+       resp, err := s.client.Do(ctx, req, out)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return out, resp, nil
+}
+
+// LargeFiles lists files larger than 100MB found during the import.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#get-large-files
+func (s *MigrationService) LargeFiles(ctx context.Context, owner, repo string) ([]*LargeFile, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import/large_files", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var files []*LargeFile
+       resp, err := s.client.Do(ctx, req, &files)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return files, resp, nil
+}
+
+// CancelImport stops an import for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#cancel-an-import
+func (s *MigrationService) CancelImport(ctx context.Context, owner, repo string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/import", owner, repo)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/migrations_user.go b/vendor/github.com/google/go-github/v37/github/migrations_user.go
new file mode 100644 (file)
index 0000000..5e8aaec
--- /dev/null
@@ -0,0 +1,214 @@
+// Copyright 2018 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "errors"
+       "fmt"
+       "net/http"
+)
+
+// UserMigration represents a GitHub migration (archival).
+type UserMigration struct {
+       ID   *int64  `json:"id,omitempty"`
+       GUID *string `json:"guid,omitempty"`
+       // State is the current state of a migration.
+       // Possible values are:
+       //     "pending" which means the migration hasn't started yet,
+       //     "exporting" which means the migration is in progress,
+       //     "exported" which means the migration finished successfully, or
+       //     "failed" which means the migration failed.
+       State *string `json:"state,omitempty"`
+       // LockRepositories indicates whether repositories are locked (to prevent
+       // manipulation) while migrating data.
+       LockRepositories *bool `json:"lock_repositories,omitempty"`
+       // ExcludeAttachments indicates whether attachments should be excluded from
+       // the migration (to reduce migration archive file size).
+       ExcludeAttachments *bool         `json:"exclude_attachments,omitempty"`
+       URL                *string       `json:"url,omitempty"`
+       CreatedAt          *string       `json:"created_at,omitempty"`
+       UpdatedAt          *string       `json:"updated_at,omitempty"`
+       Repositories       []*Repository `json:"repositories,omitempty"`
+}
+
+func (m UserMigration) String() string {
+       return Stringify(m)
+}
+
+// UserMigrationOptions specifies the optional parameters to Migration methods.
+type UserMigrationOptions struct {
+       // LockRepositories indicates whether repositories should be locked (to prevent
+       // manipulation) while migrating data.
+       LockRepositories bool
+
+       // ExcludeAttachments indicates whether attachments should be excluded from
+       // the migration (to reduce migration archive file size).
+       ExcludeAttachments bool
+}
+
+// startUserMigration represents the body of a StartMigration request.
+type startUserMigration struct {
+       // Repositories is a slice of repository names to migrate.
+       Repositories []string `json:"repositories,omitempty"`
+
+       // LockRepositories indicates whether repositories should be locked (to prevent
+       // manipulation) while migrating data.
+       LockRepositories *bool `json:"lock_repositories,omitempty"`
+
+       // ExcludeAttachments indicates whether attachments should be excluded from
+       // the migration (to reduce migration archive file size).
+       ExcludeAttachments *bool `json:"exclude_attachments,omitempty"`
+}
+
+// StartUserMigration starts the generation of a migration archive.
+// repos is a slice of repository names to migrate.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#start-a-user-migration
+func (s *MigrationService) StartUserMigration(ctx context.Context, repos []string, opts *UserMigrationOptions) (*UserMigration, *Response, error) {
+       u := "user/migrations"
+
+       body := &startUserMigration{Repositories: repos}
+       if opts != nil {
+               body.LockRepositories = Bool(opts.LockRepositories)
+               body.ExcludeAttachments = Bool(opts.ExcludeAttachments)
+       }
+
+       req, err := s.client.NewRequest("POST", u, body)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       m := &UserMigration{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// ListUserMigrations lists the most recent migrations.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#list-user-migrations
+func (s *MigrationService) ListUserMigrations(ctx context.Context) ([]*UserMigration, *Response, error) {
+       u := "user/migrations"
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       var m []*UserMigration
+       resp, err := s.client.Do(ctx, req, &m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// UserMigrationStatus gets the status of a specific migration archive.
+// id is the migration ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#get-a-user-migration-status
+func (s *MigrationService) UserMigrationStatus(ctx context.Context, id int64) (*UserMigration, *Response, error) {
+       u := fmt.Sprintf("user/migrations/%v", id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       m := &UserMigration{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// UserMigrationArchiveURL gets the URL for a specific migration archive.
+// id is the migration ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#download-a-user-migration-archive
+func (s *MigrationService) UserMigrationArchiveURL(ctx context.Context, id int64) (string, error) {
+       url := fmt.Sprintf("user/migrations/%v/archive", id)
+
+       req, err := s.client.NewRequest("GET", url, nil)
+       if err != nil {
+               return "", err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       m := &UserMigration{}
+
+       var loc string
+       originalRedirect := s.client.client.CheckRedirect
+       s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
+               loc = req.URL.String()
+               return http.ErrUseLastResponse
+       }
+       defer func() {
+               s.client.client.CheckRedirect = originalRedirect
+       }()
+       resp, err := s.client.Do(ctx, req, m)
+       if err == nil {
+               return "", errors.New("expected redirect, none provided")
+       }
+       loc = resp.Header.Get("Location")
+       return loc, nil
+}
+
+// DeleteUserMigration will delete a previous migration archive.
+// id is the migration ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#delete-a-user-migration-archive
+func (s *MigrationService) DeleteUserMigration(ctx context.Context, id int64) (*Response, error) {
+       url := fmt.Sprintf("user/migrations/%v/archive", id)
+
+       req, err := s.client.NewRequest("DELETE", url, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// UnlockUserRepo will unlock a repo that was locked for migration.
+// id is migration ID.
+// You should unlock each migrated repository and delete them when the migration
+// is complete and you no longer need the source data.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/migrations/#unlock-a-user-repository
+func (s *MigrationService) UnlockUserRepo(ctx context.Context, id int64, repo string) (*Response, error) {
+       url := fmt.Sprintf("user/migrations/%v/repos/%v/lock", id, repo)
+
+       req, err := s.client.NewRequest("DELETE", url, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMigrationsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/misc.go b/vendor/github.com/google/go-github/v37/github/misc.go
new file mode 100644 (file)
index 0000000..1fa6c4e
--- /dev/null
@@ -0,0 +1,265 @@
+// Copyright 2014 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "bytes"
+       "context"
+       "fmt"
+       "net/url"
+)
+
+// MarkdownOptions specifies optional parameters to the Markdown method.
+type MarkdownOptions struct {
+       // Mode identifies the rendering mode. Possible values are:
+       //   markdown - render a document as plain Markdown, just like
+       //   README files are rendered.
+       //
+       //   gfm - to render a document as user-content, e.g. like user
+       //   comments or issues are rendered. In GFM mode, hard line breaks are
+       //   always taken into account, and issue and user mentions are linked
+       //   accordingly.
+       //
+       // Default is "markdown".
+       Mode string
+
+       // Context identifies the repository context. Only taken into account
+       // when rendering as "gfm".
+       Context string
+}
+
+type markdownRequest struct {
+       Text    *string `json:"text,omitempty"`
+       Mode    *string `json:"mode,omitempty"`
+       Context *string `json:"context,omitempty"`
+}
+
+// Markdown renders an arbitrary Markdown document.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/markdown/
+func (c *Client) Markdown(ctx context.Context, text string, opts *MarkdownOptions) (string, *Response, error) {
+       request := &markdownRequest{Text: String(text)}
+       if opts != nil {
+               if opts.Mode != "" {
+                       request.Mode = String(opts.Mode)
+               }
+               if opts.Context != "" {
+                       request.Context = String(opts.Context)
+               }
+       }
+
+       req, err := c.NewRequest("POST", "markdown", request)
+       if err != nil {
+               return "", nil, err
+       }
+
+       buf := new(bytes.Buffer)
+       resp, err := c.Do(ctx, req, buf)
+       if err != nil {
+               return "", resp, err
+       }
+
+       return buf.String(), resp, nil
+}
+
+// ListEmojis returns the emojis available to use on GitHub.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/emojis/
+func (c *Client) ListEmojis(ctx context.Context) (map[string]string, *Response, error) {
+       req, err := c.NewRequest("GET", "emojis", nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var emoji map[string]string
+       resp, err := c.Do(ctx, req, &emoji)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return emoji, resp, nil
+}
+
+// CodeOfConduct represents a code of conduct.
+type CodeOfConduct struct {
+       Name *string `json:"name,omitempty"`
+       Key  *string `json:"key,omitempty"`
+       URL  *string `json:"url,omitempty"`
+       Body *string `json:"body,omitempty"`
+}
+
+func (c *CodeOfConduct) String() string {
+       return Stringify(c)
+}
+
+// ListCodesOfConduct returns all codes of conduct.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/codes_of_conduct/#list-all-codes-of-conduct
+func (c *Client) ListCodesOfConduct(ctx context.Context) ([]*CodeOfConduct, *Response, error) {
+       req, err := c.NewRequest("GET", "codes_of_conduct", nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeCodesOfConductPreview)
+
+       var cs []*CodeOfConduct
+       resp, err := c.Do(ctx, req, &cs)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return cs, resp, nil
+}
+
+// GetCodeOfConduct returns an individual code of conduct.
+//
+// https://docs.github.com/en/free-pro-team@latest/rest/reference/codes_of_conduct/#get-an-individual-code-of-conduct
+func (c *Client) GetCodeOfConduct(ctx context.Context, key string) (*CodeOfConduct, *Response, error) {
+       u := fmt.Sprintf("codes_of_conduct/%s", key)
+       req, err := c.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeCodesOfConductPreview)
+
+       coc := new(CodeOfConduct)
+       resp, err := c.Do(ctx, req, coc)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return coc, resp, nil
+}
+
+// APIMeta represents metadata about the GitHub API.
+type APIMeta struct {
+       // An Array of IP addresses in CIDR format specifying the addresses
+       // that incoming service hooks will originate from on GitHub.com.
+       Hooks []string `json:"hooks,omitempty"`
+
+       // An Array of IP addresses in CIDR format specifying the Git servers
+       // for GitHub.com.
+       Git []string `json:"git,omitempty"`
+
+       // Whether authentication with username and password is supported.
+       // (GitHub Enterprise instances using CAS or OAuth for authentication
+       // will return false. Features like Basic Authentication with a
+       // username and password, sudo mode, and two-factor authentication are
+       // not supported on these servers.)
+       VerifiablePasswordAuthentication *bool `json:"verifiable_password_authentication,omitempty"`
+
+       // An array of IP addresses in CIDR format specifying the addresses
+       // which serve GitHub Pages websites.
+       Pages []string `json:"pages,omitempty"`
+
+       // An Array of IP addresses specifying the addresses that source imports
+       // will originate from on GitHub.com.
+       Importer []string `json:"importer,omitempty"`
+
+       // An array of IP addresses in CIDR format specifying the IP addresses
+       // GitHub Actions will originate from.
+       Actions []string `json:"actions,omitempty"`
+
+       // An array of IP addresses in CIDR format specifying the IP addresses
+       // Dependabot will originate from.
+       Dependabot []string `json:"dependabot,omitempty"`
+}
+
+// APIMeta returns information about GitHub.com, the service. Or, if you access
+// this endpoint on your organization’s GitHub Enterprise installation, this
+// endpoint provides information about that installation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/meta#get-github-meta-information
+func (c *Client) APIMeta(ctx context.Context) (*APIMeta, *Response, error) {
+       req, err := c.NewRequest("GET", "meta", nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       meta := new(APIMeta)
+       resp, err := c.Do(ctx, req, meta)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return meta, resp, nil
+}
+
+// Octocat returns an ASCII art octocat with the specified message in a speech
+// bubble. If message is empty, a random zen phrase is used.
+func (c *Client) Octocat(ctx context.Context, message string) (string, *Response, error) {
+       u := "octocat"
+       if message != "" {
+               u = fmt.Sprintf("%s?s=%s", u, url.QueryEscape(message))
+       }
+
+       req, err := c.NewRequest("GET", u, nil)
+       if err != nil {
+               return "", nil, err
+       }
+
+       buf := new(bytes.Buffer)
+       resp, err := c.Do(ctx, req, buf)
+       if err != nil {
+               return "", resp, err
+       }
+
+       return buf.String(), resp, nil
+}
+
+// Zen returns a random line from The Zen of GitHub.
+//
+// see also: http://warpspire.com/posts/taste/
+func (c *Client) Zen(ctx context.Context) (string, *Response, error) {
+       req, err := c.NewRequest("GET", "zen", nil)
+       if err != nil {
+               return "", nil, err
+       }
+
+       buf := new(bytes.Buffer)
+       resp, err := c.Do(ctx, req, buf)
+       if err != nil {
+               return "", resp, err
+       }
+
+       return buf.String(), resp, nil
+}
+
+// ServiceHook represents a hook that has configuration settings, a list of
+// available events, and default events.
+type ServiceHook struct {
+       Name            *string    `json:"name,omitempty"`
+       Events          []string   `json:"events,omitempty"`
+       SupportedEvents []string   `json:"supported_events,omitempty"`
+       Schema          [][]string `json:"schema,omitempty"`
+}
+
+func (s *ServiceHook) String() string {
+       return Stringify(s)
+}
+
+// ListServiceHooks lists all of the available service hooks.
+//
+// GitHub API docs: https://developer.github.com/webhooks/#services
+func (c *Client) ListServiceHooks(ctx context.Context) ([]*ServiceHook, *Response, error) {
+       u := "hooks"
+       req, err := c.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var hooks []*ServiceHook
+       resp, err := c.Do(ctx, req, &hooks)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return hooks, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/orgs.go b/vendor/github.com/google/go-github/v37/github/orgs.go
new file mode 100644 (file)
index 0000000..62f6ed2
--- /dev/null
@@ -0,0 +1,272 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// OrganizationsService provides access to the organization related functions
+// in the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/
+type OrganizationsService service
+
+// Organization represents a GitHub organization account.
+type Organization struct {
+       Login                       *string    `json:"login,omitempty"`
+       ID                          *int64     `json:"id,omitempty"`
+       NodeID                      *string    `json:"node_id,omitempty"`
+       AvatarURL                   *string    `json:"avatar_url,omitempty"`
+       HTMLURL                     *string    `json:"html_url,omitempty"`
+       Name                        *string    `json:"name,omitempty"`
+       Company                     *string    `json:"company,omitempty"`
+       Blog                        *string    `json:"blog,omitempty"`
+       Location                    *string    `json:"location,omitempty"`
+       Email                       *string    `json:"email,omitempty"`
+       TwitterUsername             *string    `json:"twitter_username,omitempty"`
+       Description                 *string    `json:"description,omitempty"`
+       PublicRepos                 *int       `json:"public_repos,omitempty"`
+       PublicGists                 *int       `json:"public_gists,omitempty"`
+       Followers                   *int       `json:"followers,omitempty"`
+       Following                   *int       `json:"following,omitempty"`
+       CreatedAt                   *time.Time `json:"created_at,omitempty"`
+       UpdatedAt                   *time.Time `json:"updated_at,omitempty"`
+       TotalPrivateRepos           *int       `json:"total_private_repos,omitempty"`
+       OwnedPrivateRepos           *int       `json:"owned_private_repos,omitempty"`
+       PrivateGists                *int       `json:"private_gists,omitempty"`
+       DiskUsage                   *int       `json:"disk_usage,omitempty"`
+       Collaborators               *int       `json:"collaborators,omitempty"`
+       BillingEmail                *string    `json:"billing_email,omitempty"`
+       Type                        *string    `json:"type,omitempty"`
+       Plan                        *Plan      `json:"plan,omitempty"`
+       TwoFactorRequirementEnabled *bool      `json:"two_factor_requirement_enabled,omitempty"`
+       IsVerified                  *bool      `json:"is_verified,omitempty"`
+       HasOrganizationProjects     *bool      `json:"has_organization_projects,omitempty"`
+       HasRepositoryProjects       *bool      `json:"has_repository_projects,omitempty"`
+
+       // DefaultRepoPermission can be one of: "read", "write", "admin", or "none". (Default: "read").
+       // It is only used in OrganizationsService.Edit.
+       DefaultRepoPermission *string `json:"default_repository_permission,omitempty"`
+       // DefaultRepoSettings can be one of: "read", "write", "admin", or "none". (Default: "read").
+       // It is only used in OrganizationsService.Get.
+       DefaultRepoSettings *string `json:"default_repository_settings,omitempty"`
+
+       // MembersCanCreateRepos default value is true and is only used in Organizations.Edit.
+       MembersCanCreateRepos *bool `json:"members_can_create_repositories,omitempty"`
+
+       // https://developer.github.com/changes/2019-12-03-internal-visibility-changes/#rest-v3-api
+       MembersCanCreatePublicRepos   *bool `json:"members_can_create_public_repositories,omitempty"`
+       MembersCanCreatePrivateRepos  *bool `json:"members_can_create_private_repositories,omitempty"`
+       MembersCanCreateInternalRepos *bool `json:"members_can_create_internal_repositories,omitempty"`
+
+       // MembersAllowedRepositoryCreationType denotes if organization members can create repositories
+       // and the type of repositories they can create. Possible values are: "all", "private", or "none".
+       //
+       // Deprecated: Use MembersCanCreatePublicRepos, MembersCanCreatePrivateRepos, MembersCanCreateInternalRepos
+       // instead. The new fields overrides the existing MembersAllowedRepositoryCreationType during 'edit'
+       // operation and does not consider 'internal' repositories during 'get' operation
+       MembersAllowedRepositoryCreationType *string `json:"members_allowed_repository_creation_type,omitempty"`
+
+       // MembersCanCreatePages toggles whether organization members can create GitHub Pages sites.
+       MembersCanCreatePages *bool `json:"members_can_create_pages,omitempty"`
+       // MembersCanCreatePublicPages toggles whether organization members can create public GitHub Pages sites.
+       MembersCanCreatePublicPages *bool `json:"members_can_create_public_pages,omitempty"`
+       // MembersCanCreatePrivatePages toggles whether organization members can create private GitHub Pages sites.
+       MembersCanCreatePrivatePages *bool `json:"members_can_create_private_pages,omitempty"`
+
+       // API URLs
+       URL              *string `json:"url,omitempty"`
+       EventsURL        *string `json:"events_url,omitempty"`
+       HooksURL         *string `json:"hooks_url,omitempty"`
+       IssuesURL        *string `json:"issues_url,omitempty"`
+       MembersURL       *string `json:"members_url,omitempty"`
+       PublicMembersURL *string `json:"public_members_url,omitempty"`
+       ReposURL         *string `json:"repos_url,omitempty"`
+}
+
+// OrganizationInstallations represents GitHub app installations for an organization.
+type OrganizationInstallations struct {
+       TotalCount    *int            `json:"total_count,omitempty"`
+       Installations []*Installation `json:"installations,omitempty"`
+}
+
+func (o Organization) String() string {
+       return Stringify(o)
+}
+
+// Plan represents the payment plan for an account. See plans at https://github.com/plans.
+type Plan struct {
+       Name          *string `json:"name,omitempty"`
+       Space         *int    `json:"space,omitempty"`
+       Collaborators *int    `json:"collaborators,omitempty"`
+       PrivateRepos  *int    `json:"private_repos,omitempty"`
+       FilledSeats   *int    `json:"filled_seats,omitempty"`
+       Seats         *int    `json:"seats,omitempty"`
+}
+
+func (p Plan) String() string {
+       return Stringify(p)
+}
+
+// OrganizationsListOptions specifies the optional parameters to the
+// OrganizationsService.ListAll method.
+type OrganizationsListOptions struct {
+       // Since filters Organizations by ID.
+       Since int64 `url:"since,omitempty"`
+
+       // Note: Pagination is powered exclusively by the Since parameter,
+       // ListOptions.Page has no effect.
+       // ListOptions.PerPage controls an undocumented GitHub API parameter.
+       ListOptions
+}
+
+// ListAll lists all organizations, in the order that they were created on GitHub.
+//
+// Note: Pagination is powered exclusively by the since parameter. To continue
+// listing the next set of organizations, use the ID of the last-returned organization
+// as the opts.Since parameter for the next call.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-organizations
+func (s *OrganizationsService) ListAll(ctx context.Context, opts *OrganizationsListOptions) ([]*Organization, *Response, error) {
+       u, err := addOptions("organizations", opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       orgs := []*Organization{}
+       resp, err := s.client.Do(ctx, req, &orgs)
+       if err != nil {
+               return nil, resp, err
+       }
+       return orgs, resp, nil
+}
+
+// List the organizations for a user. Passing the empty string will list
+// organizations for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-organizations-for-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-organizations-for-a-user
+func (s *OrganizationsService) List(ctx context.Context, user string, opts *ListOptions) ([]*Organization, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v/orgs", user)
+       } else {
+               u = "user/orgs"
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var orgs []*Organization
+       resp, err := s.client.Do(ctx, req, &orgs)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return orgs, resp, nil
+}
+
+// Get fetches an organization by name.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#get-an-organization
+func (s *OrganizationsService) Get(ctx context.Context, org string) (*Organization, *Response, error) {
+       u := fmt.Sprintf("orgs/%v", org)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMemberAllowedRepoCreationTypePreview)
+
+       organization := new(Organization)
+       resp, err := s.client.Do(ctx, req, organization)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return organization, resp, nil
+}
+
+// GetByID fetches an organization.
+//
+// Note: GetByID uses the undocumented GitHub API endpoint /organizations/:id.
+func (s *OrganizationsService) GetByID(ctx context.Context, id int64) (*Organization, *Response, error) {
+       u := fmt.Sprintf("organizations/%d", id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       organization := new(Organization)
+       resp, err := s.client.Do(ctx, req, organization)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return organization, resp, nil
+}
+
+// Edit an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#update-an-organization
+func (s *OrganizationsService) Edit(ctx context.Context, name string, org *Organization) (*Organization, *Response, error) {
+       u := fmt.Sprintf("orgs/%v", name)
+       req, err := s.client.NewRequest("PATCH", u, org)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeMemberAllowedRepoCreationTypePreview)
+
+       o := new(Organization)
+       resp, err := s.client.Do(ctx, req, o)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return o, resp, nil
+}
+
+// ListInstallations lists installations for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-app-installations-for-an-organization
+func (s *OrganizationsService) ListInstallations(ctx context.Context, org string, opts *ListOptions) (*OrganizationInstallations, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/installations", org)
+
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       result := new(OrganizationInstallations)
+       resp, err := s.client.Do(ctx, req, result)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return result, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/orgs_actions_allowed.go b/vendor/github.com/google/go-github/v37/github/orgs_actions_allowed.go
new file mode 100644 (file)
index 0000000..9032d03
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2021 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ActionsAllowed represents selected actions that are allowed in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-allowed-actions-for-an-organization
+type ActionsAllowed struct {
+       GithubOwnedAllowed *bool    `json:"github_owned_allowed,omitempty"`
+       VerifiedAllowed    *bool    `json:"verified_allowed,omitempty"`
+       PatternsAllowed    []string `json:"patterns_allowed,omitempty"`
+}
+
+func (a ActionsAllowed) String() string {
+       return Stringify(a)
+}
+
+// GetActionsAllowed gets the actions that are allowed in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-allowed-actions-for-an-organization
+func (s *OrganizationsService) GetActionsAllowed(ctx context.Context, org string) (*ActionsAllowed, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/permissions/selected-actions", org)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       actionsAllowed := new(ActionsAllowed)
+       resp, err := s.client.Do(ctx, req, actionsAllowed)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return actionsAllowed, resp, nil
+}
+
+// EditActionsAllowed sets the actions that are allowed in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-allowed-actions-for-an-organization
+func (s *OrganizationsService) EditActionsAllowed(ctx context.Context, org string, actionsAllowed ActionsAllowed) (*ActionsAllowed, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/permissions/selected-actions", org)
+       req, err := s.client.NewRequest("PUT", u, actionsAllowed)
+       if err != nil {
+               return nil, nil, err
+       }
+       p := new(ActionsAllowed)
+       resp, err := s.client.Do(ctx, req, p)
+       return p, resp, err
+}
diff --git a/vendor/github.com/google/go-github/v37/github/orgs_actions_permissions.go b/vendor/github.com/google/go-github/v37/github/orgs_actions_permissions.go
new file mode 100644 (file)
index 0000000..b8a10b2
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2021 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ActionsPermissions represents a policy for repositories and allowed actions in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#permissions
+type ActionsPermissions struct {
+       EnabledRepositories *string `json:"enabled_repositories,omitempty"`
+       AllowedActions      *string `json:"allowed_actions,omitempty"`
+       SelectedActionsURL  *string `json:"selected_actions_url,omitempty"`
+}
+
+func (a ActionsPermissions) String() string {
+       return Stringify(a)
+}
+
+// GetActionsPermissions gets the GitHub Actions permissions policy for repositories and allowed actions in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-github-actions-permissions-for-an-organization
+func (s *OrganizationsService) GetActionsPermissions(ctx context.Context, org string) (*ActionsPermissions, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/permissions", org)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       permissions := new(ActionsPermissions)
+       resp, err := s.client.Do(ctx, req, permissions)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return permissions, resp, nil
+}
+
+// EditActionsPermissions sets the permissions policy for repositories and allowed actions in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-github-actions-permissions-for-an-organization
+func (s *OrganizationsService) EditActionsPermissions(ctx context.Context, org string, actionsPermissions ActionsPermissions) (*ActionsPermissions, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/actions/permissions", org)
+       req, err := s.client.NewRequest("PUT", u, actionsPermissions)
+       if err != nil {
+               return nil, nil, err
+       }
+       p := new(ActionsPermissions)
+       resp, err := s.client.Do(ctx, req, p)
+       return p, resp, err
+}
diff --git a/vendor/github.com/google/go-github/v37/github/orgs_audit_log.go b/vendor/github.com/google/go-github/v37/github/orgs_audit_log.go
new file mode 100644 (file)
index 0000000..81f0eda
--- /dev/null
@@ -0,0 +1,113 @@
+// Copyright 2021 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// GetAuditLogOptions sets up optional parameters to query audit-log endpoint.
+type GetAuditLogOptions struct {
+       Phrase  *string `json:"phrase,omitempty"`  // A search phrase. (Optional.)
+       Include *string `json:"include,omitempty"` // Event type includes. Can be one of "web", "git", "all". Default: "web". (Optional.)
+       Order   *string `json:"order,omitempty"`   // The order of audit log events. Can be one of "asc" or "desc". Default: "desc". (Optional.)
+
+       ListCursorOptions
+}
+
+// HookConfig describes metadata about a webhook configuration.
+type HookConfig struct {
+       ContentType *string `json:"content_type,omitempty"`
+       InsecureSSL *string `json:"insecure_ssl,omitempty"`
+       URL         *string `json:"url,omitempty"`
+}
+
+// AuditEntry describes the fields that may be represented by various audit-log "action" entries.
+// For a list of actions see - https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#audit-log-actions
+type AuditEntry struct {
+       Action                *string     `json:"action,omitempty"` // The name of the action that was performed, for example `user.login` or `repo.create`.
+       Active                *bool       `json:"active,omitempty"`
+       ActiveWas             *bool       `json:"active_was,omitempty"`
+       Actor                 *string     `json:"actor,omitempty"` // The actor who performed the action.
+       BlockedUser           *string     `json:"blocked_user,omitempty"`
+       Business              *string     `json:"business,omitempty"`
+       CancelledAt           *Timestamp  `json:"cancelled_at,omitempty"`
+       CompletedAt           *Timestamp  `json:"completed_at,omitempty"`
+       Conclusion            *string     `json:"conclusion,omitempty"`
+       Config                *HookConfig `json:"config,omitempty"`
+       ConfigWas             *HookConfig `json:"config_was,omitempty"`
+       ContentType           *string     `json:"content_type,omitempty"`
+       CreatedAt             *Timestamp  `json:"created_at,omitempty"`
+       DeployKeyFingerprint  *string     `json:"deploy_key_fingerprint,omitempty"`
+       DocumentID            *string     `json:"_document_id,omitempty"`
+       Emoji                 *string     `json:"emoji,omitempty"`
+       EnvironmentName       *string     `json:"environment_name,omitempty"`
+       Event                 *string     `json:"event,omitempty"`
+       Events                []string    `json:"events,omitempty"`
+       EventsWere            []string    `json:"events_were,omitempty"`
+       Explanation           *string     `json:"explanation,omitempty"`
+       Fingerprint           *string     `json:"fingerprint,omitempty"`
+       HeadBranch            *string     `json:"head_branch,omitempty"`
+       HeadSHA               *string     `json:"head_sha,omitempty"`
+       HookID                *int64      `json:"hook_id,omitempty"`
+       IsHostedRunner        *bool       `json:"is_hosted_runner,omitempty"`
+       JobName               *string     `json:"job_name,omitempty"`
+       LimitedAvailability   *bool       `json:"limited_availability,omitempty"`
+       Message               *string     `json:"message,omitempty"`
+       Name                  *string     `json:"name,omitempty"`
+       OldUser               *string     `json:"old_user,omitempty"`
+       OpenSSHPublicKey      *string     `json:"openssh_public_key,omitempty"`
+       Org                   *string     `json:"org,omitempty"`
+       PreviousVisibility    *string     `json:"previous_visibility,omitempty"`
+       ReadOnly              *string     `json:"read_only,omitempty"`
+       Repo                  *string     `json:"repo,omitempty"`
+       Repository            *string     `json:"repository,omitempty"`
+       RepositoryPublic      *bool       `json:"repository_public,omitempty"`
+       RunnerGroupID         *string     `json:"runner_group_id,omitempty"`
+       RunnerGroupName       *string     `json:"runner_group_name,omitempty"`
+       RunnerID              *string     `json:"runner_id,omitempty"`
+       RunnerLabels          []string    `json:"runner_labels,omitempty"`
+       RunnerName            *string     `json:"runner_name,omitempty"`
+       SecretsPassed         []string    `json:"secrets_passed,omitempty"`
+       SourceVersion         *string     `json:"source_version,omitempty"`
+       StartedAt             *Timestamp  `json:"started_at,omitempty"`
+       TargetLogin           *string     `json:"target_login,omitempty"`
+       TargetVersion         *string     `json:"target_version,omitempty"`
+       Team                  *string     `json:"team,omitempty"`
+       Timestamp             *Timestamp  `json:"@timestamp,omitempty"`              // The time the audit log event occurred, given as a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time).
+       TransportProtocolName *string     `json:"transport_protocol_name,omitempty"` // A human readable name for the protocol (for example, HTTP or SSH) used to transfer Git data.
+       TransportProtocol     *int        `json:"transport_protocol,omitempty"`      // The type of protocol (for example, HTTP=1 or SSH=2) used to transfer Git data.
+       TriggerID             *int64      `json:"trigger_id,omitempty"`
+       User                  *string     `json:"user,omitempty"`       // The user that was affected by the action performed (if available).
+       Visibility            *string     `json:"visibility,omitempty"` // The repository visibility, for example `public` or `private`.
+       WorkflowID            *int64      `json:"workflow_id,omitempty"`
+       WorkflowRunID         *int64      `json:"workflow_run_id,omitempty"`
+}
+
+// GetAuditLog gets the audit-log entries for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/orgs#get-the-audit-log-for-an-organization
+func (s *OrganizationsService) GetAuditLog(ctx context.Context, org string, opts *GetAuditLogOptions) ([]*AuditEntry, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/audit-log", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var auditEntries []*AuditEntry
+       resp, err := s.client.Do(ctx, req, &auditEntries)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return auditEntries, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/orgs_hooks.go b/vendor/github.com/google/go-github/v37/github/orgs_hooks.go
new file mode 100644 (file)
index 0000000..dc90656
--- /dev/null
@@ -0,0 +1,118 @@
+// Copyright 2015 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ListHooks lists all Hooks for the specified organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-organization-webhooks
+func (s *OrganizationsService) ListHooks(ctx context.Context, org string, opts *ListOptions) ([]*Hook, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/hooks", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var hooks []*Hook
+       resp, err := s.client.Do(ctx, req, &hooks)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return hooks, resp, nil
+}
+
+// GetHook returns a single specified Hook.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#get-an-organization-webhook
+func (s *OrganizationsService) GetHook(ctx context.Context, org string, id int64) (*Hook, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/hooks/%d", org, id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       hook := new(Hook)
+       resp, err := s.client.Do(ctx, req, hook)
+       return hook, resp, err
+}
+
+// CreateHook creates a Hook for the specified org.
+// Config is a required field.
+//
+// Note that only a subset of the hook fields are used and hook must
+// not be nil.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#create-an-organization-webhook
+func (s *OrganizationsService) CreateHook(ctx context.Context, org string, hook *Hook) (*Hook, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/hooks", org)
+
+       hookReq := &createHookRequest{
+               Name:   "web",
+               Events: hook.Events,
+               Active: hook.Active,
+               Config: hook.Config,
+       }
+
+       req, err := s.client.NewRequest("POST", u, hookReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       h := new(Hook)
+       resp, err := s.client.Do(ctx, req, h)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return h, resp, nil
+}
+
+// EditHook updates a specified Hook.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#update-an-organization-webhook
+func (s *OrganizationsService) EditHook(ctx context.Context, org string, id int64, hook *Hook) (*Hook, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/hooks/%d", org, id)
+       req, err := s.client.NewRequest("PATCH", u, hook)
+       if err != nil {
+               return nil, nil, err
+       }
+       h := new(Hook)
+       resp, err := s.client.Do(ctx, req, h)
+       return h, resp, err
+}
+
+// PingHook triggers a 'ping' event to be sent to the Hook.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#ping-an-organization-webhook
+func (s *OrganizationsService) PingHook(ctx context.Context, org string, id int64) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/hooks/%d/pings", org, id)
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeleteHook deletes a specified Hook.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#delete-an-organization-webhook
+func (s *OrganizationsService) DeleteHook(ctx context.Context, org string, id int64) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/hooks/%d", org, id)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/orgs_members.go b/vendor/github.com/google/go-github/v37/github/orgs_members.go
new file mode 100644 (file)
index 0000000..f3a2f17
--- /dev/null
@@ -0,0 +1,388 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// Membership represents the status of a user's membership in an organization or team.
+type Membership struct {
+       URL *string `json:"url,omitempty"`
+
+       // State is the user's status within the organization or team.
+       // Possible values are: "active", "pending"
+       State *string `json:"state,omitempty"`
+
+       // Role identifies the user's role within the organization or team.
+       // Possible values for organization membership:
+       //     member - non-owner organization member
+       //     admin - organization owner
+       //
+       // Possible values for team membership are:
+       //     member - a normal member of the team
+       //     maintainer - a team maintainer. Able to add/remove other team
+       //                  members, promote other team members to team
+       //                  maintainer, and edit the team’s name and description
+       Role *string `json:"role,omitempty"`
+
+       // For organization membership, the API URL of the organization.
+       OrganizationURL *string `json:"organization_url,omitempty"`
+
+       // For organization membership, the organization the membership is for.
+       Organization *Organization `json:"organization,omitempty"`
+
+       // For organization membership, the user the membership is for.
+       User *User `json:"user,omitempty"`
+}
+
+func (m Membership) String() string {
+       return Stringify(m)
+}
+
+// ListMembersOptions specifies optional parameters to the
+// OrganizationsService.ListMembers method.
+type ListMembersOptions struct {
+       // If true (or if the authenticated user is not an owner of the
+       // organization), list only publicly visible members.
+       PublicOnly bool `url:"-"`
+
+       // Filter members returned in the list. Possible values are:
+       // 2fa_disabled, all. Default is "all".
+       Filter string `url:"filter,omitempty"`
+
+       // Role filters members returned by their role in the organization.
+       // Possible values are:
+       //     all - all members of the organization, regardless of role
+       //     admin - organization owners
+       //     member - non-owner organization members
+       //
+       // Default is "all".
+       Role string `url:"role,omitempty"`
+
+       ListOptions
+}
+
+// ListMembers lists the members for an organization. If the authenticated
+// user is an owner of the organization, this will return both concealed and
+// public members, otherwise it will only return public members.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-organization-members
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-public-organization-members
+func (s *OrganizationsService) ListMembers(ctx context.Context, org string, opts *ListMembersOptions) ([]*User, *Response, error) {
+       var u string
+       if opts != nil && opts.PublicOnly {
+               u = fmt.Sprintf("orgs/%v/public_members", org)
+       } else {
+               u = fmt.Sprintf("orgs/%v/members", org)
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var members []*User
+       resp, err := s.client.Do(ctx, req, &members)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return members, resp, nil
+}
+
+// IsMember checks if a user is a member of an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#check-organization-membership-for-a-user
+func (s *OrganizationsService) IsMember(ctx context.Context, org, user string) (bool, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/members/%v", org, user)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+
+       resp, err := s.client.Do(ctx, req, nil)
+       member, err := parseBoolResponse(err)
+       return member, resp, err
+}
+
+// IsPublicMember checks if a user is a public member of an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#check-public-organization-membership-for-a-user
+func (s *OrganizationsService) IsPublicMember(ctx context.Context, org, user string) (bool, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/public_members/%v", org, user)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+
+       resp, err := s.client.Do(ctx, req, nil)
+       member, err := parseBoolResponse(err)
+       return member, resp, err
+}
+
+// RemoveMember removes a user from all teams of an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#remove-an-organization-member
+func (s *OrganizationsService) RemoveMember(ctx context.Context, org, user string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/members/%v", org, user)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// PublicizeMembership publicizes a user's membership in an organization. (A
+// user cannot publicize the membership for another user.)
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#set-public-organization-membership-for-the-authenticated-user
+func (s *OrganizationsService) PublicizeMembership(ctx context.Context, org, user string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/public_members/%v", org, user)
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ConcealMembership conceals a user's membership in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#remove-public-organization-membership-for-the-authenticated-user
+func (s *OrganizationsService) ConcealMembership(ctx context.Context, org, user string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/public_members/%v", org, user)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListOrgMembershipsOptions specifies optional parameters to the
+// OrganizationsService.ListOrgMemberships method.
+type ListOrgMembershipsOptions struct {
+       // Filter memberships to include only those with the specified state.
+       // Possible values are: "active", "pending".
+       State string `url:"state,omitempty"`
+
+       ListOptions
+}
+
+// ListOrgMemberships lists the organization memberships for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-organization-memberships-for-the-authenticated-user
+func (s *OrganizationsService) ListOrgMemberships(ctx context.Context, opts *ListOrgMembershipsOptions) ([]*Membership, *Response, error) {
+       u := "user/memberships/orgs"
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var memberships []*Membership
+       resp, err := s.client.Do(ctx, req, &memberships)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return memberships, resp, nil
+}
+
+// GetOrgMembership gets the membership for a user in a specified organization.
+// Passing an empty string for user will get the membership for the
+// authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#get-an-organization-membership-for-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#get-organization-membership-for-a-user
+func (s *OrganizationsService) GetOrgMembership(ctx context.Context, user, org string) (*Membership, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("orgs/%v/memberships/%v", org, user)
+       } else {
+               u = fmt.Sprintf("user/memberships/orgs/%v", org)
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       membership := new(Membership)
+       resp, err := s.client.Do(ctx, req, membership)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return membership, resp, nil
+}
+
+// EditOrgMembership edits the membership for user in specified organization.
+// Passing an empty string for user will edit the membership for the
+// authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#update-an-organization-membership-for-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#set-organization-membership-for-a-user
+func (s *OrganizationsService) EditOrgMembership(ctx context.Context, user, org string, membership *Membership) (*Membership, *Response, error) {
+       var u, method string
+       if user != "" {
+               u = fmt.Sprintf("orgs/%v/memberships/%v", org, user)
+               method = "PUT"
+       } else {
+               u = fmt.Sprintf("user/memberships/orgs/%v", org)
+               method = "PATCH"
+       }
+
+       req, err := s.client.NewRequest(method, u, membership)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       m := new(Membership)
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// RemoveOrgMembership removes user from the specified organization. If the
+// user has been invited to the organization, this will cancel their invitation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#remove-organization-membership-for-a-user
+func (s *OrganizationsService) RemoveOrgMembership(ctx context.Context, user, org string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/memberships/%v", org, user)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListPendingOrgInvitations returns a list of pending invitations.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-pending-organization-invitations
+func (s *OrganizationsService) ListPendingOrgInvitations(ctx context.Context, org string, opts *ListOptions) ([]*Invitation, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/invitations", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var pendingInvitations []*Invitation
+       resp, err := s.client.Do(ctx, req, &pendingInvitations)
+       if err != nil {
+               return nil, resp, err
+       }
+       return pendingInvitations, resp, nil
+}
+
+// CreateOrgInvitationOptions specifies the parameters to the OrganizationService.Invite
+// method.
+type CreateOrgInvitationOptions struct {
+       // GitHub user ID for the person you are inviting. Not required if you provide Email.
+       InviteeID *int64 `json:"invitee_id,omitempty"`
+       // Email address of the person you are inviting, which can be an existing GitHub user.
+       // Not required if you provide InviteeID
+       Email *string `json:"email,omitempty"`
+       // Specify role for new member. Can be one of:
+       // * admin - Organization owners with full administrative rights to the
+       //       organization and complete access to all repositories and teams.
+       // * direct_member - Non-owner organization members with ability to see
+       //   other members and join teams by invitation.
+       // * billing_manager - Non-owner organization members with ability to
+       //   manage the billing settings of your organization.
+       // Default is "direct_member".
+       Role   *string `json:"role"`
+       TeamID []int64 `json:"team_ids"`
+}
+
+// CreateOrgInvitation invites people to an organization by using their GitHub user ID or their email address.
+// In order to create invitations in an organization,
+// the authenticated user must be an organization owner.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#create-an-organization-invitation
+func (s *OrganizationsService) CreateOrgInvitation(ctx context.Context, org string, opts *CreateOrgInvitationOptions) (*Invitation, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/invitations", org)
+
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var invitation *Invitation
+       resp, err := s.client.Do(ctx, req, &invitation)
+       if err != nil {
+               return nil, resp, err
+       }
+       return invitation, resp, nil
+}
+
+// ListOrgInvitationTeams lists all teams associated with an invitation. In order to see invitations in an organization,
+// the authenticated user must be an organization owner.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-organization-invitation-teams
+func (s *OrganizationsService) ListOrgInvitationTeams(ctx context.Context, org, invitationID string, opts *ListOptions) ([]*Team, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/invitations/%v/teams", org, invitationID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var orgInvitationTeams []*Team
+       resp, err := s.client.Do(ctx, req, &orgInvitationTeams)
+       if err != nil {
+               return nil, resp, err
+       }
+       return orgInvitationTeams, resp, nil
+}
+
+// ListFailedOrgInvitations returns a list of failed inviatations.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/orgs#list-failed-organization-invitations
+func (s *OrganizationsService) ListFailedOrgInvitations(ctx context.Context, org string, opts *ListOptions) ([]*Invitation, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/failed_invitations", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var failedInvitations []*Invitation
+       resp, err := s.client.Do(ctx, req, &failedInvitations)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return failedInvitations, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/orgs_outside_collaborators.go b/vendor/github.com/google/go-github/v37/github/orgs_outside_collaborators.go
new file mode 100644 (file)
index 0000000..d9ffd25
--- /dev/null
@@ -0,0 +1,81 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ListOutsideCollaboratorsOptions specifies optional parameters to the
+// OrganizationsService.ListOutsideCollaborators method.
+type ListOutsideCollaboratorsOptions struct {
+       // Filter outside collaborators returned in the list. Possible values are:
+       // 2fa_disabled, all.  Default is "all".
+       Filter string `url:"filter,omitempty"`
+
+       ListOptions
+}
+
+// ListOutsideCollaborators lists outside collaborators of organization's repositories.
+// This will only work if the authenticated
+// user is an owner of the organization.
+//
+// Warning: The API may change without advance notice during the preview period.
+// Preview features are not supported for production use.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-outside-collaborators-for-an-organization
+func (s *OrganizationsService) ListOutsideCollaborators(ctx context.Context, org string, opts *ListOutsideCollaboratorsOptions) ([]*User, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/outside_collaborators", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var members []*User
+       resp, err := s.client.Do(ctx, req, &members)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return members, resp, nil
+}
+
+// RemoveOutsideCollaborator removes a user from the list of outside collaborators;
+// consequently, removing them from all the organization's repositories.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#remove-outside-collaborator-from-an-organization
+func (s *OrganizationsService) RemoveOutsideCollaborator(ctx context.Context, org string, user string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/outside_collaborators/%v", org, user)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ConvertMemberToOutsideCollaborator reduces the permission level of a member of the
+// organization to that of an outside collaborator. Therefore, they will only
+// have access to the repositories that their current team membership allows.
+// Responses for converting a non-member or the last owner to an outside collaborator
+// are listed in GitHub API docs.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#convert-an-organization-member-to-outside-collaborator
+func (s *OrganizationsService) ConvertMemberToOutsideCollaborator(ctx context.Context, org string, user string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/outside_collaborators/%v", org, user)
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/orgs_projects.go b/vendor/github.com/google/go-github/v37/github/orgs_projects.go
new file mode 100644 (file)
index 0000000..b0c60ec
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ListProjects lists the projects for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#list-organization-projects
+func (s *OrganizationsService) ListProjects(ctx context.Context, org string, opts *ProjectListOptions) ([]*Project, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/projects", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       var projects []*Project
+       resp, err := s.client.Do(ctx, req, &projects)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return projects, resp, nil
+}
+
+// CreateProject creates a GitHub Project for the specified organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#create-an-organization-project
+func (s *OrganizationsService) CreateProject(ctx context.Context, org string, opts *ProjectOptions) (*Project, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/projects", org)
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       project := &Project{}
+       resp, err := s.client.Do(ctx, req, project)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return project, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/orgs_users_blocking.go b/vendor/github.com/google/go-github/v37/github/orgs_users_blocking.go
new file mode 100644 (file)
index 0000000..2773344
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ListBlockedUsers lists all the users blocked by an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#list-users-blocked-by-an-organization
+func (s *OrganizationsService) ListBlockedUsers(ctx context.Context, org string, opts *ListOptions) ([]*User, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/blocks", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
+
+       var blockedUsers []*User
+       resp, err := s.client.Do(ctx, req, &blockedUsers)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return blockedUsers, resp, nil
+}
+
+// IsBlocked reports whether specified user is blocked from an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#check-if-a-user-is-blocked-by-an-organization
+func (s *OrganizationsService) IsBlocked(ctx context.Context, org string, user string) (bool, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/blocks/%v", org, user)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
+
+       resp, err := s.client.Do(ctx, req, nil)
+       isBlocked, err := parseBoolResponse(err)
+       return isBlocked, resp, err
+}
+
+// BlockUser blocks specified user from an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#block-a-user-from-an-organization
+func (s *OrganizationsService) BlockUser(ctx context.Context, org string, user string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/blocks/%v", org, user)
+
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// UnblockUser unblocks specified user from an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/orgs/#unblock-a-user-from-an-organization
+func (s *OrganizationsService) UnblockUser(ctx context.Context, org string, user string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/blocks/%v", org, user)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/packages.go b/vendor/github.com/google/go-github/v37/github/packages.go
new file mode 100644 (file)
index 0000000..446e4fa
--- /dev/null
@@ -0,0 +1,101 @@
+// Copyright 2020 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+// Package represents a GitHub package.
+type Package struct {
+       ID             *int64           `json:"id,omitempty"`
+       Name           *string          `json:"name,omitempty"`
+       PackageType    *string          `json:"package_type,omitempty"`
+       HTMLURL        *string          `json:"html_url,omitempty"`
+       CreatedAt      *Timestamp       `json:"created_at,omitempty"`
+       UpdatedAt      *Timestamp       `json:"updated_at,omitempty"`
+       Owner          *User            `json:"owner,omitempty"`
+       PackageVersion *PackageVersion  `json:"package_version,omitempty"`
+       Registry       *PackageRegistry `json:"registry,omitempty"`
+}
+
+func (p Package) String() string {
+       return Stringify(p)
+}
+
+// PackageVersion represents a GitHub package version.
+type PackageVersion struct {
+       ID                  *int64          `json:"id,omitempty"`
+       Version             *string         `json:"version,omitempty"`
+       Summary             *string         `json:"summary,omitempty"`
+       Body                *string         `json:"body,omitempty"`
+       BodyHTML            *string         `json:"body_html,omitempty"`
+       Release             *PackageRelease `json:"release,omitempty"`
+       Manifest            *string         `json:"manifest,omitempty"`
+       HTMLURL             *string         `json:"html_url,omitempty"`
+       TagName             *string         `json:"tag_name,omitempty"`
+       TargetCommitish     *string         `json:"target_commitish,omitempty"`
+       TargetOID           *string         `json:"target_oid,omitempty"`
+       Draft               *bool           `json:"draft,omitempty"`
+       Prerelease          *bool           `json:"prerelease,omitempty"`
+       CreatedAt           *Timestamp      `json:"created_at,omitempty"`
+       UpdatedAt           *Timestamp      `json:"updated_at,omitempty"`
+       PackageFiles        []*PackageFile  `json:"package_files,omitempty"`
+       Author              *User           `json:"author,omitempty"`
+       InstallationCommand *string         `json:"installation_command,omitempty"`
+}
+
+func (pv PackageVersion) String() string {
+       return Stringify(pv)
+}
+
+// PackageRelease represents a GitHub package version release.
+type PackageRelease struct {
+       URL             *string    `json:"url,omitempty"`
+       HTMLURL         *string    `json:"html_url,omitempty"`
+       ID              *int64     `json:"id,omitempty"`
+       TagName         *string    `json:"tag_name,omitempty"`
+       TargetCommitish *string    `json:"target_commitish,omitempty"`
+       Name            *string    `json:"name,omitempty"`
+       Draft           *bool      `json:"draft,omitempty"`
+       Author          *User      `json:"author,omitempty"`
+       Prerelease      *bool      `json:"prerelease,omitempty"`
+       CreatedAt       *Timestamp `json:"created_at,omitempty"`
+       PublishedAt     *Timestamp `json:"published_at,omitempty"`
+}
+
+func (r PackageRelease) String() string {
+       return Stringify(r)
+}
+
+// PackageFile represents a GitHub package version release file.
+type PackageFile struct {
+       DownloadURL *string    `json:"download_url,omitempty"`
+       ID          *int64     `json:"id,omitempty"`
+       Name        *string    `json:"name,omitempty"`
+       SHA256      *string    `json:"sha256,omitempty"`
+       SHA1        *string    `json:"sha1,omitempty"`
+       MD5         *string    `json:"md5,omitempty"`
+       ContentType *string    `json:"content_type,omitempty"`
+       State       *string    `json:"state,omitempty"`
+       Author      *User      `json:"author,omitempty"`
+       Size        *int64     `json:"size,omitempty"`
+       CreatedAt   *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt   *Timestamp `json:"updated_at,omitempty"`
+}
+
+func (pf PackageFile) String() string {
+       return Stringify(pf)
+}
+
+// PackageRegistry represents a GitHub package registry.
+type PackageRegistry struct {
+       AboutURL *string `json:"about_url,omitempty"`
+       Name     *string `json:"name,omitempty"`
+       Type     *string `json:"type,omitempty"`
+       URL      *string `json:"url,omitempty"`
+       Vendor   *string `json:"vendor,omitempty"`
+}
+
+func (r PackageRegistry) String() string {
+       return Stringify(r)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/projects.go b/vendor/github.com/google/go-github/v37/github/projects.go
new file mode 100644 (file)
index 0000000..12c00bc
--- /dev/null
@@ -0,0 +1,594 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ProjectsService provides access to the projects functions in the
+// GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/
+type ProjectsService service
+
+// Project represents a GitHub Project.
+type Project struct {
+       ID         *int64     `json:"id,omitempty"`
+       URL        *string    `json:"url,omitempty"`
+       HTMLURL    *string    `json:"html_url,omitempty"`
+       ColumnsURL *string    `json:"columns_url,omitempty"`
+       OwnerURL   *string    `json:"owner_url,omitempty"`
+       Name       *string    `json:"name,omitempty"`
+       Body       *string    `json:"body,omitempty"`
+       Number     *int       `json:"number,omitempty"`
+       State      *string    `json:"state,omitempty"`
+       CreatedAt  *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt  *Timestamp `json:"updated_at,omitempty"`
+       NodeID     *string    `json:"node_id,omitempty"`
+
+       // The User object that generated the project.
+       Creator *User `json:"creator,omitempty"`
+}
+
+func (p Project) String() string {
+       return Stringify(p)
+}
+
+// GetProject gets a GitHub Project for a repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#get-a-project
+func (s *ProjectsService) GetProject(ctx context.Context, id int64) (*Project, *Response, error) {
+       u := fmt.Sprintf("projects/%v", id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       project := &Project{}
+       resp, err := s.client.Do(ctx, req, project)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return project, resp, nil
+}
+
+// ProjectOptions specifies the parameters to the
+// RepositoriesService.CreateProject and
+// ProjectsService.UpdateProject methods.
+type ProjectOptions struct {
+       // The name of the project. (Required for creation; optional for update.)
+       Name *string `json:"name,omitempty"`
+       // The body of the project. (Optional.)
+       Body *string `json:"body,omitempty"`
+
+       // The following field(s) are only applicable for update.
+       // They should be left with zero values for creation.
+
+       // State of the project. Either "open" or "closed". (Optional.)
+       State *string `json:"state,omitempty"`
+       // The permission level that all members of the project's organization
+       // will have on this project.
+       // Setting the organization permission is only available
+       // for organization projects. (Optional.)
+       OrganizationPermission *string `json:"organization_permission,omitempty"`
+       // Sets visibility of the project within the organization.
+       // Setting visibility is only available
+       // for organization projects.(Optional.)
+       Public *bool `json:"public,omitempty"`
+}
+
+// UpdateProject updates a repository project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#update-a-project
+func (s *ProjectsService) UpdateProject(ctx context.Context, id int64, opts *ProjectOptions) (*Project, *Response, error) {
+       u := fmt.Sprintf("projects/%v", id)
+       req, err := s.client.NewRequest("PATCH", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       project := &Project{}
+       resp, err := s.client.Do(ctx, req, project)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return project, resp, nil
+}
+
+// DeleteProject deletes a GitHub Project from a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#delete-a-project
+func (s *ProjectsService) DeleteProject(ctx context.Context, id int64) (*Response, error) {
+       u := fmt.Sprintf("projects/%v", id)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ProjectColumn represents a column of a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/projects/
+type ProjectColumn struct {
+       ID         *int64     `json:"id,omitempty"`
+       Name       *string    `json:"name,omitempty"`
+       URL        *string    `json:"url,omitempty"`
+       ProjectURL *string    `json:"project_url,omitempty"`
+       CardsURL   *string    `json:"cards_url,omitempty"`
+       CreatedAt  *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt  *Timestamp `json:"updated_at,omitempty"`
+       NodeID     *string    `json:"node_id,omitempty"`
+}
+
+// ListProjectColumns lists the columns of a GitHub Project for a repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#list-project-columns
+func (s *ProjectsService) ListProjectColumns(ctx context.Context, projectID int64, opts *ListOptions) ([]*ProjectColumn, *Response, error) {
+       u := fmt.Sprintf("projects/%v/columns", projectID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       columns := []*ProjectColumn{}
+       resp, err := s.client.Do(ctx, req, &columns)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return columns, resp, nil
+}
+
+// GetProjectColumn gets a column of a GitHub Project for a repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#get-a-project-column
+func (s *ProjectsService) GetProjectColumn(ctx context.Context, id int64) (*ProjectColumn, *Response, error) {
+       u := fmt.Sprintf("projects/columns/%v", id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       column := &ProjectColumn{}
+       resp, err := s.client.Do(ctx, req, column)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return column, resp, nil
+}
+
+// ProjectColumnOptions specifies the parameters to the
+// ProjectsService.CreateProjectColumn and
+// ProjectsService.UpdateProjectColumn methods.
+type ProjectColumnOptions struct {
+       // The name of the project column. (Required for creation and update.)
+       Name string `json:"name"`
+}
+
+// CreateProjectColumn creates a column for the specified (by number) project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#create-a-project-column
+func (s *ProjectsService) CreateProjectColumn(ctx context.Context, projectID int64, opts *ProjectColumnOptions) (*ProjectColumn, *Response, error) {
+       u := fmt.Sprintf("projects/%v/columns", projectID)
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       column := &ProjectColumn{}
+       resp, err := s.client.Do(ctx, req, column)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return column, resp, nil
+}
+
+// UpdateProjectColumn updates a column of a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#update-an-existing-project-column
+func (s *ProjectsService) UpdateProjectColumn(ctx context.Context, columnID int64, opts *ProjectColumnOptions) (*ProjectColumn, *Response, error) {
+       u := fmt.Sprintf("projects/columns/%v", columnID)
+       req, err := s.client.NewRequest("PATCH", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       column := &ProjectColumn{}
+       resp, err := s.client.Do(ctx, req, column)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return column, resp, nil
+}
+
+// DeleteProjectColumn deletes a column from a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#delete-a-project-column
+func (s *ProjectsService) DeleteProjectColumn(ctx context.Context, columnID int64) (*Response, error) {
+       u := fmt.Sprintf("projects/columns/%v", columnID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ProjectColumnMoveOptions specifies the parameters to the
+// ProjectsService.MoveProjectColumn method.
+type ProjectColumnMoveOptions struct {
+       // Position can be one of "first", "last", or "after:<column-id>", where
+       // <column-id> is the ID of a column in the same project. (Required.)
+       Position string `json:"position"`
+}
+
+// MoveProjectColumn moves a column within a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#move-a-project-column
+func (s *ProjectsService) MoveProjectColumn(ctx context.Context, columnID int64, opts *ProjectColumnMoveOptions) (*Response, error) {
+       u := fmt.Sprintf("projects/columns/%v/moves", columnID)
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ProjectCard represents a card in a column of a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/cards/#get-a-project-card
+type ProjectCard struct {
+       URL        *string    `json:"url,omitempty"`
+       ColumnURL  *string    `json:"column_url,omitempty"`
+       ContentURL *string    `json:"content_url,omitempty"`
+       ID         *int64     `json:"id,omitempty"`
+       Note       *string    `json:"note,omitempty"`
+       Creator    *User      `json:"creator,omitempty"`
+       CreatedAt  *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt  *Timestamp `json:"updated_at,omitempty"`
+       NodeID     *string    `json:"node_id,omitempty"`
+       Archived   *bool      `json:"archived,omitempty"`
+
+       // The following fields are only populated by Webhook events.
+       ColumnID *int64 `json:"column_id,omitempty"`
+
+       // The following fields are only populated by Events API.
+       ProjectID          *int64  `json:"project_id,omitempty"`
+       ProjectURL         *string `json:"project_url,omitempty"`
+       ColumnName         *string `json:"column_name,omitempty"`
+       PreviousColumnName *string `json:"previous_column_name,omitempty"` // Populated in "moved_columns_in_project" event deliveries.
+}
+
+// ProjectCardListOptions specifies the optional parameters to the
+// ProjectsService.ListProjectCards method.
+type ProjectCardListOptions struct {
+       // ArchivedState is used to list all, archived, or not_archived project cards.
+       // Defaults to not_archived when you omit this parameter.
+       ArchivedState *string `url:"archived_state,omitempty"`
+
+       ListOptions
+}
+
+// ListProjectCards lists the cards in a column of a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#list-project-cards
+func (s *ProjectsService) ListProjectCards(ctx context.Context, columnID int64, opts *ProjectCardListOptions) ([]*ProjectCard, *Response, error) {
+       u := fmt.Sprintf("projects/columns/%v/cards", columnID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       cards := []*ProjectCard{}
+       resp, err := s.client.Do(ctx, req, &cards)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return cards, resp, nil
+}
+
+// GetProjectCard gets a card in a column of a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#get-a-project-card
+func (s *ProjectsService) GetProjectCard(ctx context.Context, cardID int64) (*ProjectCard, *Response, error) {
+       u := fmt.Sprintf("projects/columns/cards/%v", cardID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       card := &ProjectCard{}
+       resp, err := s.client.Do(ctx, req, card)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return card, resp, nil
+}
+
+// ProjectCardOptions specifies the parameters to the
+// ProjectsService.CreateProjectCard and
+// ProjectsService.UpdateProjectCard methods.
+type ProjectCardOptions struct {
+       // The note of the card. Note and ContentID are mutually exclusive.
+       Note string `json:"note,omitempty"`
+       // The ID (not Number) of the Issue to associate with this card.
+       // Note and ContentID are mutually exclusive.
+       ContentID int64 `json:"content_id,omitempty"`
+       // The type of content to associate with this card. Possible values are: "Issue" and "PullRequest".
+       ContentType string `json:"content_type,omitempty"`
+       // Use true to archive a project card.
+       // Specify false if you need to restore a previously archived project card.
+       Archived *bool `json:"archived,omitempty"`
+}
+
+// CreateProjectCard creates a card in the specified column of a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#create-a-project-card
+func (s *ProjectsService) CreateProjectCard(ctx context.Context, columnID int64, opts *ProjectCardOptions) (*ProjectCard, *Response, error) {
+       u := fmt.Sprintf("projects/columns/%v/cards", columnID)
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       card := &ProjectCard{}
+       resp, err := s.client.Do(ctx, req, card)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return card, resp, nil
+}
+
+// UpdateProjectCard updates a card of a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#update-an-existing-project-card
+func (s *ProjectsService) UpdateProjectCard(ctx context.Context, cardID int64, opts *ProjectCardOptions) (*ProjectCard, *Response, error) {
+       u := fmt.Sprintf("projects/columns/cards/%v", cardID)
+       req, err := s.client.NewRequest("PATCH", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       card := &ProjectCard{}
+       resp, err := s.client.Do(ctx, req, card)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return card, resp, nil
+}
+
+// DeleteProjectCard deletes a card from a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#delete-a-project-card
+func (s *ProjectsService) DeleteProjectCard(ctx context.Context, cardID int64) (*Response, error) {
+       u := fmt.Sprintf("projects/columns/cards/%v", cardID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ProjectCardMoveOptions specifies the parameters to the
+// ProjectsService.MoveProjectCard method.
+type ProjectCardMoveOptions struct {
+       // Position can be one of "top", "bottom", or "after:<card-id>", where
+       // <card-id> is the ID of a card in the same project.
+       Position string `json:"position"`
+       // ColumnID is the ID of a column in the same project. Note that ColumnID
+       // is required when using Position "after:<card-id>" when that card is in
+       // another column; otherwise it is optional.
+       ColumnID int64 `json:"column_id,omitempty"`
+}
+
+// MoveProjectCard moves a card within a GitHub Project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#move-a-project-card
+func (s *ProjectsService) MoveProjectCard(ctx context.Context, cardID int64, opts *ProjectCardMoveOptions) (*Response, error) {
+       u := fmt.Sprintf("projects/columns/cards/%v/moves", cardID)
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ProjectCollaboratorOptions specifies the optional parameters to the
+// ProjectsService.AddProjectCollaborator method.
+type ProjectCollaboratorOptions struct {
+       // Permission specifies the permission to grant to the collaborator.
+       // Possible values are:
+       //     "read" - can read, but not write to or administer this project.
+       //     "write" - can read and write, but not administer this project.
+       //     "admin" - can read, write and administer this project.
+       //
+       // Default value is "write"
+       Permission *string `json:"permission,omitempty"`
+}
+
+// AddProjectCollaborator adds a collaborator to an organization project and sets
+// their permission level. You must be an organization owner or a project admin to add a collaborator.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#add-project-collaborator
+func (s *ProjectsService) AddProjectCollaborator(ctx context.Context, id int64, username string, opts *ProjectCollaboratorOptions) (*Response, error) {
+       u := fmt.Sprintf("projects/%v/collaborators/%v", id, username)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// RemoveProjectCollaborator removes a collaborator from an organization project.
+// You must be an organization owner or a project admin to remove a collaborator.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#remove-user-as-a-collaborator
+func (s *ProjectsService) RemoveProjectCollaborator(ctx context.Context, id int64, username string) (*Response, error) {
+       u := fmt.Sprintf("projects/%v/collaborators/%v", id, username)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListCollaboratorOptions specifies the optional parameters to the
+// ProjectsService.ListProjectCollaborators method.
+type ListCollaboratorOptions struct {
+       // Affiliation specifies how collaborators should be filtered by their affiliation.
+       // Possible values are:
+       //     "outside" - All outside collaborators of an organization-owned repository
+       //     "direct" - All collaborators with permissions to an organization-owned repository,
+       //              regardless of organization membership status
+       //     "all" - All collaborators the authenticated user can see
+       //
+       // Default value is "all".
+       Affiliation *string `url:"affiliation,omitempty"`
+
+       ListOptions
+}
+
+// ListProjectCollaborators lists the collaborators for an organization project. For a project,
+// the list of collaborators includes outside collaborators, organization members that are direct
+// collaborators, organization members with access through team memberships, organization members
+// with access through default organization permissions, and organization owners. You must be an
+// organization owner or a project admin to list collaborators.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#list-project-collaborators
+func (s *ProjectsService) ListProjectCollaborators(ctx context.Context, id int64, opts *ListCollaboratorOptions) ([]*User, *Response, error) {
+       u := fmt.Sprintf("projects/%v/collaborators", id)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       var users []*User
+       resp, err := s.client.Do(ctx, req, &users)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return users, resp, nil
+}
+
+// ProjectPermissionLevel represents the permission level an organization
+// member has for a given project.
+type ProjectPermissionLevel struct {
+       // Possible values: "admin", "write", "read", "none"
+       Permission *string `json:"permission,omitempty"`
+
+       User *User `json:"user,omitempty"`
+}
+
+// ReviewProjectCollaboratorPermission returns the collaborator's permission level for an organization
+// project. Possible values for the permission key: "admin", "write", "read", "none".
+// You must be an organization owner or a project admin to review a user's permission level.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#get-project-permission-for-a-user
+func (s *ProjectsService) ReviewProjectCollaboratorPermission(ctx context.Context, id int64, username string) (*ProjectPermissionLevel, *Response, error) {
+       u := fmt.Sprintf("projects/%v/collaborators/%v/permission", id, username)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       ppl := new(ProjectPermissionLevel)
+       resp, err := s.client.Do(ctx, req, ppl)
+       if err != nil {
+               return nil, resp, err
+       }
+       return ppl, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/pulls.go b/vendor/github.com/google/go-github/v37/github/pulls.go
new file mode 100644 (file)
index 0000000..6c866ea
--- /dev/null
@@ -0,0 +1,485 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "bytes"
+       "context"
+       "fmt"
+       "time"
+)
+
+// PullRequestsService handles communication with the pull request related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/
+type PullRequestsService service
+
+// PullRequestAutoMerge represents the "auto_merge" response for a PullRequest.
+type PullRequestAutoMerge struct {
+       EnabledBy     *User   `json:"enabled_by,omitempty"`
+       MergeMethod   *string `json:"merge_method,omitempty"`
+       CommitTitle   *string `json:"commit_title,omitempty"`
+       CommitMessage *string `json:"commit_message,omitempty"`
+}
+
+// PullRequest represents a GitHub pull request on a repository.
+type PullRequest struct {
+       ID                  *int64                `json:"id,omitempty"`
+       Number              *int                  `json:"number,omitempty"`
+       State               *string               `json:"state,omitempty"`
+       Locked              *bool                 `json:"locked,omitempty"`
+       Title               *string               `json:"title,omitempty"`
+       Body                *string               `json:"body,omitempty"`
+       CreatedAt           *time.Time            `json:"created_at,omitempty"`
+       UpdatedAt           *time.Time            `json:"updated_at,omitempty"`
+       ClosedAt            *time.Time            `json:"closed_at,omitempty"`
+       MergedAt            *time.Time            `json:"merged_at,omitempty"`
+       Labels              []*Label              `json:"labels,omitempty"`
+       User                *User                 `json:"user,omitempty"`
+       Draft               *bool                 `json:"draft,omitempty"`
+       Merged              *bool                 `json:"merged,omitempty"`
+       Mergeable           *bool                 `json:"mergeable,omitempty"`
+       MergeableState      *string               `json:"mergeable_state,omitempty"`
+       MergedBy            *User                 `json:"merged_by,omitempty"`
+       MergeCommitSHA      *string               `json:"merge_commit_sha,omitempty"`
+       Rebaseable          *bool                 `json:"rebaseable,omitempty"`
+       Comments            *int                  `json:"comments,omitempty"`
+       Commits             *int                  `json:"commits,omitempty"`
+       Additions           *int                  `json:"additions,omitempty"`
+       Deletions           *int                  `json:"deletions,omitempty"`
+       ChangedFiles        *int                  `json:"changed_files,omitempty"`
+       URL                 *string               `json:"url,omitempty"`
+       HTMLURL             *string               `json:"html_url,omitempty"`
+       IssueURL            *string               `json:"issue_url,omitempty"`
+       StatusesURL         *string               `json:"statuses_url,omitempty"`
+       DiffURL             *string               `json:"diff_url,omitempty"`
+       PatchURL            *string               `json:"patch_url,omitempty"`
+       CommitsURL          *string               `json:"commits_url,omitempty"`
+       CommentsURL         *string               `json:"comments_url,omitempty"`
+       ReviewCommentsURL   *string               `json:"review_comments_url,omitempty"`
+       ReviewCommentURL    *string               `json:"review_comment_url,omitempty"`
+       ReviewComments      *int                  `json:"review_comments,omitempty"`
+       Assignee            *User                 `json:"assignee,omitempty"`
+       Assignees           []*User               `json:"assignees,omitempty"`
+       Milestone           *Milestone            `json:"milestone,omitempty"`
+       MaintainerCanModify *bool                 `json:"maintainer_can_modify,omitempty"`
+       AuthorAssociation   *string               `json:"author_association,omitempty"`
+       NodeID              *string               `json:"node_id,omitempty"`
+       RequestedReviewers  []*User               `json:"requested_reviewers,omitempty"`
+       AutoMerge           *PullRequestAutoMerge `json:"auto_merge,omitempty"`
+
+       // RequestedTeams is populated as part of the PullRequestEvent.
+       // See, https://docs.github.com/en/developers/webhooks-and-events/github-event-types#pullrequestevent for an example.
+       RequestedTeams []*Team `json:"requested_teams,omitempty"`
+
+       Links *PRLinks           `json:"_links,omitempty"`
+       Head  *PullRequestBranch `json:"head,omitempty"`
+       Base  *PullRequestBranch `json:"base,omitempty"`
+
+       // ActiveLockReason is populated only when LockReason is provided while locking the pull request.
+       // Possible values are: "off-topic", "too heated", "resolved", and "spam".
+       ActiveLockReason *string `json:"active_lock_reason,omitempty"`
+}
+
+func (p PullRequest) String() string {
+       return Stringify(p)
+}
+
+// PRLink represents a single link object from GitHub pull request _links.
+type PRLink struct {
+       HRef *string `json:"href,omitempty"`
+}
+
+// PRLinks represents the "_links" object in a GitHub pull request.
+type PRLinks struct {
+       Self           *PRLink `json:"self,omitempty"`
+       HTML           *PRLink `json:"html,omitempty"`
+       Issue          *PRLink `json:"issue,omitempty"`
+       Comments       *PRLink `json:"comments,omitempty"`
+       ReviewComments *PRLink `json:"review_comments,omitempty"`
+       ReviewComment  *PRLink `json:"review_comment,omitempty"`
+       Commits        *PRLink `json:"commits,omitempty"`
+       Statuses       *PRLink `json:"statuses,omitempty"`
+}
+
+// PullRequestBranch represents a base or head branch in a GitHub pull request.
+type PullRequestBranch struct {
+       Label *string     `json:"label,omitempty"`
+       Ref   *string     `json:"ref,omitempty"`
+       SHA   *string     `json:"sha,omitempty"`
+       Repo  *Repository `json:"repo,omitempty"`
+       User  *User       `json:"user,omitempty"`
+}
+
+// PullRequestListOptions specifies the optional parameters to the
+// PullRequestsService.List method.
+type PullRequestListOptions struct {
+       // State filters pull requests based on their state. Possible values are:
+       // open, closed, all. Default is "open".
+       State string `url:"state,omitempty"`
+
+       // Head filters pull requests by head user and branch name in the format of:
+       // "user:ref-name".
+       Head string `url:"head,omitempty"`
+
+       // Base filters pull requests by base branch name.
+       Base string `url:"base,omitempty"`
+
+       // Sort specifies how to sort pull requests. Possible values are: created,
+       // updated, popularity, long-running. Default is "created".
+       Sort string `url:"sort,omitempty"`
+
+       // Direction in which to sort pull requests. Possible values are: asc, desc.
+       // If Sort is "created" or not specified, Default is "desc", otherwise Default
+       // is "asc"
+       Direction string `url:"direction,omitempty"`
+
+       ListOptions
+}
+
+// List the pull requests for the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-pull-requests
+func (s *PullRequestsService) List(ctx context.Context, owner string, repo string, opts *PullRequestListOptions) ([]*PullRequest, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var pulls []*PullRequest
+       resp, err := s.client.Do(ctx, req, &pulls)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return pulls, resp, nil
+}
+
+// ListPullRequestsWithCommit returns pull requests associated with a commit SHA.
+//
+// The results will include open and closed pull requests.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-pull-requests-associated-with-a-commit
+func (s *PullRequestsService) ListPullRequestsWithCommit(ctx context.Context, owner, repo, sha string, opts *PullRequestListOptions) ([]*PullRequest, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v/pulls", owner, repo, sha)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeListPullsOrBranchesForCommitPreview)
+       var pulls []*PullRequest
+       resp, err := s.client.Do(ctx, req, &pulls)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return pulls, resp, nil
+}
+
+// Get a single pull request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#get-a-pull-request
+func (s *PullRequestsService) Get(ctx context.Context, owner string, repo string, number int) (*PullRequest, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       pull := new(PullRequest)
+       resp, err := s.client.Do(ctx, req, pull)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return pull, resp, nil
+}
+
+// GetRaw gets a single pull request in raw (diff or patch) format.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#get-a-pull-request
+func (s *PullRequestsService) GetRaw(ctx context.Context, owner string, repo string, number int, opts RawOptions) (string, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return "", nil, err
+       }
+
+       switch opts.Type {
+       case Diff:
+               req.Header.Set("Accept", mediaTypeV3Diff)
+       case Patch:
+               req.Header.Set("Accept", mediaTypeV3Patch)
+       default:
+               return "", nil, fmt.Errorf("unsupported raw type %d", opts.Type)
+       }
+
+       var buf bytes.Buffer
+       resp, err := s.client.Do(ctx, req, &buf)
+       if err != nil {
+               return "", resp, err
+       }
+
+       return buf.String(), resp, nil
+}
+
+// NewPullRequest represents a new pull request to be created.
+type NewPullRequest struct {
+       Title               *string `json:"title,omitempty"`
+       Head                *string `json:"head,omitempty"`
+       Base                *string `json:"base,omitempty"`
+       Body                *string `json:"body,omitempty"`
+       Issue               *int    `json:"issue,omitempty"`
+       MaintainerCanModify *bool   `json:"maintainer_can_modify,omitempty"`
+       Draft               *bool   `json:"draft,omitempty"`
+}
+
+// Create a new pull request on the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#create-a-pull-request
+func (s *PullRequestsService) Create(ctx context.Context, owner string, repo string, pull *NewPullRequest) (*PullRequest, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls", owner, repo)
+       req, err := s.client.NewRequest("POST", u, pull)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       p := new(PullRequest)
+       resp, err := s.client.Do(ctx, req, p)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return p, resp, nil
+}
+
+// PullRequestBranchUpdateOptions specifies the optional parameters to the
+// PullRequestsService.UpdateBranch method.
+type PullRequestBranchUpdateOptions struct {
+       // ExpectedHeadSHA specifies the most recent commit on the pull request's branch.
+       // Default value is the SHA of the pull request's current HEAD ref.
+       ExpectedHeadSHA *string `json:"expected_head_sha,omitempty"`
+}
+
+// PullRequestBranchUpdateResponse specifies the response of pull request branch update.
+type PullRequestBranchUpdateResponse struct {
+       Message *string `json:"message,omitempty"`
+       URL     *string `json:"url,omitempty"`
+}
+
+// UpdateBranch updates the pull request branch with latest upstream changes.
+//
+// This method might return an AcceptedError and a status code of
+// 202. This is because this is the status that GitHub returns to signify that
+// it has now scheduled the update of the pull request branch in a background task.
+// A follow up request, after a delay of a second or so, should result
+// in a successful request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#update-a-pull-request-branch
+func (s *PullRequestsService) UpdateBranch(ctx context.Context, owner, repo string, number int, opts *PullRequestBranchUpdateOptions) (*PullRequestBranchUpdateResponse, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/update-branch", owner, repo, number)
+
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeUpdatePullRequestBranchPreview)
+
+       p := new(PullRequestBranchUpdateResponse)
+       resp, err := s.client.Do(ctx, req, p)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return p, resp, nil
+}
+
+type pullRequestUpdate struct {
+       Title               *string `json:"title,omitempty"`
+       Body                *string `json:"body,omitempty"`
+       State               *string `json:"state,omitempty"`
+       Base                *string `json:"base,omitempty"`
+       MaintainerCanModify *bool   `json:"maintainer_can_modify,omitempty"`
+}
+
+// Edit a pull request.
+// pull must not be nil.
+//
+// The following fields are editable: Title, Body, State, Base.Ref and MaintainerCanModify.
+// Base.Ref updates the base branch of the pull request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#update-a-pull-request
+func (s *PullRequestsService) Edit(ctx context.Context, owner string, repo string, number int, pull *PullRequest) (*PullRequest, *Response, error) {
+       if pull == nil {
+               return nil, nil, fmt.Errorf("pull must be provided")
+       }
+
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number)
+
+       update := &pullRequestUpdate{
+               Title:               pull.Title,
+               Body:                pull.Body,
+               State:               pull.State,
+               MaintainerCanModify: pull.MaintainerCanModify,
+       }
+       // avoid updating the base branch when closing the Pull Request
+       // - otherwise the GitHub API server returns a "Validation Failed" error:
+       // "Cannot change base branch of closed pull request".
+       if pull.Base != nil && pull.GetState() != "closed" {
+               update.Base = pull.Base.Ref
+       }
+
+       req, err := s.client.NewRequest("PATCH", u, update)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       p := new(PullRequest)
+       resp, err := s.client.Do(ctx, req, p)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return p, resp, nil
+}
+
+// ListCommits lists the commits in a pull request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-commits-on-a-pull-request
+func (s *PullRequestsService) ListCommits(ctx context.Context, owner string, repo string, number int, opts *ListOptions) ([]*RepositoryCommit, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/commits", owner, repo, number)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var commits []*RepositoryCommit
+       resp, err := s.client.Do(ctx, req, &commits)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return commits, resp, nil
+}
+
+// ListFiles lists the files in a pull request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-pull-requests-files
+func (s *PullRequestsService) ListFiles(ctx context.Context, owner string, repo string, number int, opts *ListOptions) ([]*CommitFile, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/files", owner, repo, number)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var commitFiles []*CommitFile
+       resp, err := s.client.Do(ctx, req, &commitFiles)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return commitFiles, resp, nil
+}
+
+// IsMerged checks if a pull request has been merged.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#check-if-a-pull-request-has-been-merged
+func (s *PullRequestsService) IsMerged(ctx context.Context, owner string, repo string, number int) (bool, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/merge", owner, repo, number)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+
+       resp, err := s.client.Do(ctx, req, nil)
+       merged, err := parseBoolResponse(err)
+       return merged, resp, err
+}
+
+// PullRequestMergeResult represents the result of merging a pull request.
+type PullRequestMergeResult struct {
+       SHA     *string `json:"sha,omitempty"`
+       Merged  *bool   `json:"merged,omitempty"`
+       Message *string `json:"message,omitempty"`
+}
+
+// PullRequestOptions lets you define how a pull request will be merged.
+type PullRequestOptions struct {
+       CommitTitle string // Title for the automatic commit message. (Optional.)
+       SHA         string // SHA that pull request head must match to allow merge. (Optional.)
+
+       // The merge method to use. Possible values include: "merge", "squash", and "rebase" with the default being merge. (Optional.)
+       MergeMethod string
+
+       // If false, an empty string commit message will use the default commit message. If true, an empty string commit message will be used.
+       DontDefaultIfBlank bool
+}
+
+type pullRequestMergeRequest struct {
+       CommitMessage *string `json:"commit_message,omitempty"`
+       CommitTitle   string  `json:"commit_title,omitempty"`
+       MergeMethod   string  `json:"merge_method,omitempty"`
+       SHA           string  `json:"sha,omitempty"`
+}
+
+// Merge a pull request.
+// commitMessage is an extra detail to append to automatic commit message.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#merge-a-pull-request
+func (s *PullRequestsService) Merge(ctx context.Context, owner string, repo string, number int, commitMessage string, options *PullRequestOptions) (*PullRequestMergeResult, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/merge", owner, repo, number)
+
+       pullRequestBody := &pullRequestMergeRequest{}
+       if commitMessage != "" {
+               pullRequestBody.CommitMessage = &commitMessage
+       }
+       if options != nil {
+               pullRequestBody.CommitTitle = options.CommitTitle
+               pullRequestBody.MergeMethod = options.MergeMethod
+               pullRequestBody.SHA = options.SHA
+               if options.DontDefaultIfBlank && commitMessage == "" {
+                       pullRequestBody.CommitMessage = &commitMessage
+               }
+       }
+       req, err := s.client.NewRequest("PUT", u, pullRequestBody)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       mergeResult := new(PullRequestMergeResult)
+       resp, err := s.client.Do(ctx, req, mergeResult)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return mergeResult, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/pulls_comments.go b/vendor/github.com/google/go-github/v37/github/pulls_comments.go
new file mode 100644 (file)
index 0000000..5078bab
--- /dev/null
@@ -0,0 +1,202 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "strings"
+       "time"
+)
+
+// PullRequestComment represents a comment left on a pull request.
+type PullRequestComment struct {
+       ID                  *int64     `json:"id,omitempty"`
+       NodeID              *string    `json:"node_id,omitempty"`
+       InReplyTo           *int64     `json:"in_reply_to_id,omitempty"`
+       Body                *string    `json:"body,omitempty"`
+       Path                *string    `json:"path,omitempty"`
+       DiffHunk            *string    `json:"diff_hunk,omitempty"`
+       PullRequestReviewID *int64     `json:"pull_request_review_id,omitempty"`
+       Position            *int       `json:"position,omitempty"`
+       OriginalPosition    *int       `json:"original_position,omitempty"`
+       StartLine           *int       `json:"start_line,omitempty"`
+       Line                *int       `json:"line,omitempty"`
+       OriginalLine        *int       `json:"original_line,omitempty"`
+       OriginalStartLine   *int       `json:"original_start_line,omitempty"`
+       Side                *string    `json:"side,omitempty"`
+       StartSide           *string    `json:"start_side,omitempty"`
+       CommitID            *string    `json:"commit_id,omitempty"`
+       OriginalCommitID    *string    `json:"original_commit_id,omitempty"`
+       User                *User      `json:"user,omitempty"`
+       Reactions           *Reactions `json:"reactions,omitempty"`
+       CreatedAt           *time.Time `json:"created_at,omitempty"`
+       UpdatedAt           *time.Time `json:"updated_at,omitempty"`
+       // AuthorAssociation is the comment author's relationship to the pull request's repository.
+       // Possible values are "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIMER", "FIRST_TIME_CONTRIBUTOR", "MEMBER", "OWNER", or "NONE".
+       AuthorAssociation *string `json:"author_association,omitempty"`
+       URL               *string `json:"url,omitempty"`
+       HTMLURL           *string `json:"html_url,omitempty"`
+       PullRequestURL    *string `json:"pull_request_url,omitempty"`
+}
+
+func (p PullRequestComment) String() string {
+       return Stringify(p)
+}
+
+// PullRequestListCommentsOptions specifies the optional parameters to the
+// PullRequestsService.ListComments method.
+type PullRequestListCommentsOptions struct {
+       // Sort specifies how to sort comments. Possible values are: created, updated.
+       Sort string `url:"sort,omitempty"`
+
+       // Direction in which to sort comments. Possible values are: asc, desc.
+       Direction string `url:"direction,omitempty"`
+
+       // Since filters comments by time.
+       Since time.Time `url:"since,omitempty"`
+
+       ListOptions
+}
+
+// ListComments lists all comments on the specified pull request. Specifying a
+// pull request number of 0 will return all comments on all pull requests for
+// the repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-review-comments-on-a-pull-request
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-review-comments-in-a-repository
+func (s *PullRequestsService) ListComments(ctx context.Context, owner, repo string, number int, opts *PullRequestListCommentsOptions) ([]*PullRequestComment, *Response, error) {
+       var u string
+       if number == 0 {
+               u = fmt.Sprintf("repos/%v/%v/pulls/comments", owner, repo)
+       } else {
+               u = fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number)
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeMultiLineCommentsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       var comments []*PullRequestComment
+       resp, err := s.client.Do(ctx, req, &comments)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comments, resp, nil
+}
+
+// GetComment fetches the specified pull request comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#get-a-review-comment-for-a-pull-request
+func (s *PullRequestsService) GetComment(ctx context.Context, owner, repo string, commentID int64) (*PullRequestComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeMultiLineCommentsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       comment := new(PullRequestComment)
+       resp, err := s.client.Do(ctx, req, comment)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comment, resp, nil
+}
+
+// CreateComment creates a new comment on the specified pull request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#create-a-review-comment-for-a-pull-request
+func (s *PullRequestsService) CreateComment(ctx context.Context, owner, repo string, number int, comment *PullRequestComment) (*PullRequestComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number)
+       req, err := s.client.NewRequest("POST", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+       // TODO: remove custom Accept headers when their respective API fully launches.
+       acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeMultiLineCommentsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       c := new(PullRequestComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// CreateCommentInReplyTo creates a new comment as a reply to an existing pull request comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#create-a-review-comment-for-a-pull-request
+func (s *PullRequestsService) CreateCommentInReplyTo(ctx context.Context, owner, repo string, number int, body string, commentID int64) (*PullRequestComment, *Response, error) {
+       comment := &struct {
+               Body      string `json:"body,omitempty"`
+               InReplyTo int64  `json:"in_reply_to,omitempty"`
+       }{
+               Body:      body,
+               InReplyTo: commentID,
+       }
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number)
+       req, err := s.client.NewRequest("POST", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       c := new(PullRequestComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// EditComment updates a pull request comment.
+// A non-nil comment.Body must be provided. Other comment fields should be left nil.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#update-a-review-comment-for-a-pull-request
+func (s *PullRequestsService) EditComment(ctx context.Context, owner, repo string, commentID int64, comment *PullRequestComment) (*PullRequestComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID)
+       req, err := s.client.NewRequest("PATCH", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       c := new(PullRequestComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// DeleteComment deletes a pull request comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#delete-a-review-comment-for-a-pull-request
+func (s *PullRequestsService) DeleteComment(ctx context.Context, owner, repo string, commentID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/pulls_reviewers.go b/vendor/github.com/google/go-github/v37/github/pulls_reviewers.go
new file mode 100644 (file)
index 0000000..f901c2e
--- /dev/null
@@ -0,0 +1,80 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ReviewersRequest specifies users and teams for a pull request review request.
+type ReviewersRequest struct {
+       NodeID        *string  `json:"node_id,omitempty"`
+       Reviewers     []string `json:"reviewers,omitempty"`
+       TeamReviewers []string `json:"team_reviewers,omitempty"`
+}
+
+// Reviewers represents reviewers of a pull request.
+type Reviewers struct {
+       Users []*User `json:"users,omitempty"`
+       Teams []*Team `json:"teams,omitempty"`
+}
+
+// RequestReviewers creates a review request for the provided reviewers for the specified pull request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#request-reviewers-for-a-pull-request
+func (s *PullRequestsService) RequestReviewers(ctx context.Context, owner, repo string, number int, reviewers ReviewersRequest) (*PullRequest, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number)
+       req, err := s.client.NewRequest("POST", u, &reviewers)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(PullRequest)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// ListReviewers lists reviewers whose reviews have been requested on the specified pull request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-requested-reviewers-for-a-pull-request
+func (s *PullRequestsService) ListReviewers(ctx context.Context, owner, repo string, number int, opts *ListOptions) (*Reviewers, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/requested_reviewers", owner, repo, number)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       reviewers := new(Reviewers)
+       resp, err := s.client.Do(ctx, req, reviewers)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return reviewers, resp, nil
+}
+
+// RemoveReviewers removes the review request for the provided reviewers for the specified pull request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#remove-requested-reviewers-from-a-pull-request
+func (s *PullRequestsService) RemoveReviewers(ctx context.Context, owner, repo string, number int, reviewers ReviewersRequest) (*Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number)
+       req, err := s.client.NewRequest("DELETE", u, &reviewers)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/pulls_reviews.go b/vendor/github.com/google/go-github/v37/github/pulls_reviews.go
new file mode 100644 (file)
index 0000000..becd2e0
--- /dev/null
@@ -0,0 +1,336 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "errors"
+       "fmt"
+       "time"
+)
+
+var ErrMixedCommentStyles = errors.New("cannot use both position and side/line form comments")
+
+// PullRequestReview represents a review of a pull request.
+type PullRequestReview struct {
+       ID             *int64     `json:"id,omitempty"`
+       NodeID         *string    `json:"node_id,omitempty"`
+       User           *User      `json:"user,omitempty"`
+       Body           *string    `json:"body,omitempty"`
+       SubmittedAt    *time.Time `json:"submitted_at,omitempty"`
+       CommitID       *string    `json:"commit_id,omitempty"`
+       HTMLURL        *string    `json:"html_url,omitempty"`
+       PullRequestURL *string    `json:"pull_request_url,omitempty"`
+       State          *string    `json:"state,omitempty"`
+       // AuthorAssociation is the comment author's relationship to the issue's repository.
+       // Possible values are "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIMER", "FIRST_TIME_CONTRIBUTOR", "MEMBER", "OWNER", or "NONE".
+       AuthorAssociation *string `json:"author_association,omitempty"`
+}
+
+func (p PullRequestReview) String() string {
+       return Stringify(p)
+}
+
+// DraftReviewComment represents a comment part of the review.
+type DraftReviewComment struct {
+       Path     *string `json:"path,omitempty"`
+       Position *int    `json:"position,omitempty"`
+       Body     *string `json:"body,omitempty"`
+
+       // The new comfort-fade-preview fields
+       StartSide *string `json:"start_side,omitempty"`
+       Side      *string `json:"side,omitempty"`
+       StartLine *int    `json:"start_line,omitempty"`
+       Line      *int    `json:"line,omitempty"`
+}
+
+func (c DraftReviewComment) String() string {
+       return Stringify(c)
+}
+
+// PullRequestReviewRequest represents a request to create a review.
+type PullRequestReviewRequest struct {
+       NodeID   *string               `json:"node_id,omitempty"`
+       CommitID *string               `json:"commit_id,omitempty"`
+       Body     *string               `json:"body,omitempty"`
+       Event    *string               `json:"event,omitempty"`
+       Comments []*DraftReviewComment `json:"comments,omitempty"`
+}
+
+func (r PullRequestReviewRequest) String() string {
+       return Stringify(r)
+}
+
+func (r *PullRequestReviewRequest) isComfortFadePreview() (bool, error) {
+       var isCF *bool
+       for _, comment := range r.Comments {
+               if comment == nil {
+                       continue
+               }
+               hasPos := comment.Position != nil
+               hasComfortFade := (comment.StartSide != nil) || (comment.Side != nil) ||
+                       (comment.StartLine != nil) || (comment.Line != nil)
+
+               switch {
+               case hasPos && hasComfortFade:
+                       return false, ErrMixedCommentStyles
+               case hasPos && isCF != nil && *isCF:
+                       return false, ErrMixedCommentStyles
+               case hasComfortFade && isCF != nil && !*isCF:
+                       return false, ErrMixedCommentStyles
+               }
+               isCF = &hasComfortFade
+       }
+       if isCF != nil {
+               return *isCF, nil
+       }
+       return false, nil
+}
+
+// PullRequestReviewDismissalRequest represents a request to dismiss a review.
+type PullRequestReviewDismissalRequest struct {
+       Message *string `json:"message,omitempty"`
+}
+
+func (r PullRequestReviewDismissalRequest) String() string {
+       return Stringify(r)
+}
+
+// ListReviews lists all reviews on the specified pull request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-reviews-for-a-pull-request
+func (s *PullRequestsService) ListReviews(ctx context.Context, owner, repo string, number int, opts *ListOptions) ([]*PullRequestReview, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews", owner, repo, number)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var reviews []*PullRequestReview
+       resp, err := s.client.Do(ctx, req, &reviews)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return reviews, resp, nil
+}
+
+// GetReview fetches the specified pull request review.
+//
+// TODO: Follow up with GitHub support about an issue with this method's
+// returned error format and remove this comment once it's fixed.
+// Read more about it here - https://github.com/google/go-github/issues/540
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#get-a-review-for-a-pull-request
+func (s *PullRequestsService) GetReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       review := new(PullRequestReview)
+       resp, err := s.client.Do(ctx, req, review)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return review, resp, nil
+}
+
+// DeletePendingReview deletes the specified pull request pending review.
+//
+// TODO: Follow up with GitHub support about an issue with this method's
+// returned error format and remove this comment once it's fixed.
+// Read more about it here - https://github.com/google/go-github/issues/540
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#delete-a-pending-review-for-a-pull-request
+func (s *PullRequestsService) DeletePendingReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       review := new(PullRequestReview)
+       resp, err := s.client.Do(ctx, req, review)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return review, resp, nil
+}
+
+// ListReviewComments lists all the comments for the specified review.
+//
+// TODO: Follow up with GitHub support about an issue with this method's
+// returned error format and remove this comment once it's fixed.
+// Read more about it here - https://github.com/google/go-github/issues/540
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-comments-for-a-pull-request-review
+func (s *PullRequestsService) ListReviewComments(ctx context.Context, owner, repo string, number int, reviewID int64, opts *ListOptions) ([]*PullRequestComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/comments", owner, repo, number, reviewID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var comments []*PullRequestComment
+       resp, err := s.client.Do(ctx, req, &comments)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comments, resp, nil
+}
+
+// CreateReview creates a new review on the specified pull request.
+//
+// TODO: Follow up with GitHub support about an issue with this method's
+// returned error format and remove this comment once it's fixed.
+// Read more about it here - https://github.com/google/go-github/issues/540
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#create-a-review-for-a-pull-request
+//
+// In order to use multi-line comments, you must use the "comfort fade" preview.
+// This replaces the use of the "Position" field in comments with 4 new fields:
+//   [Start]Side, and [Start]Line.
+// These new fields must be used for ALL comments (including single-line),
+// with the following restrictions (empirically observed, so subject to change).
+//
+// For single-line "comfort fade" comments, you must use:
+//
+//    Path:  &path,  // as before
+//    Body:  &body,  // as before
+//    Side:  &"RIGHT" (or "LEFT")
+//    Line:  &123,  // NOT THE SAME AS POSITION, this is an actual line number.
+//
+// If StartSide or StartLine is used with single-line comments, a 422 is returned.
+//
+// For multi-line "comfort fade" comments, you must use:
+//
+//    Path:      &path,  // as before
+//    Body:      &body,  // as before
+//    StartSide: &"RIGHT" (or "LEFT")
+//    Side:      &"RIGHT" (or "LEFT")
+//    StartLine: &120,
+//    Line:      &125,
+//
+// Suggested edits are made by commenting on the lines to replace, and including the
+// suggested edit in a block like this (it may be surrounded in non-suggestion markdown):
+//
+//    ```suggestion
+//    Use this instead.
+//    It is waaaaaay better.
+//    ```
+func (s *PullRequestsService) CreateReview(ctx context.Context, owner, repo string, number int, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews", owner, repo, number)
+
+       req, err := s.client.NewRequest("POST", u, review)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // Detect which style of review comment is being used.
+       if isCF, err := review.isComfortFadePreview(); err != nil {
+               return nil, nil, err
+       } else if isCF {
+               // If the review comments are using the comfort fade preview fields,
+               // then pass the comfort fade header.
+               req.Header.Set("Accept", mediaTypeMultiLineCommentsPreview)
+       }
+
+       r := new(PullRequestReview)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// UpdateReview updates the review summary on the specified pull request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#update-a-review-for-a-pull-request
+func (s *PullRequestsService) UpdateReview(ctx context.Context, owner, repo string, number int, reviewID int64, body string) (*PullRequestReview, *Response, error) {
+       opts := &struct {
+               Body string `json:"body"`
+       }{Body: body}
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID)
+
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       review := &PullRequestReview{}
+       resp, err := s.client.Do(ctx, req, review)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return review, resp, nil
+}
+
+// SubmitReview submits a specified review on the specified pull request.
+//
+// TODO: Follow up with GitHub support about an issue with this method's
+// returned error format and remove this comment once it's fixed.
+// Read more about it here - https://github.com/google/go-github/issues/540
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#submit-a-review-for-a-pull-request
+func (s *PullRequestsService) SubmitReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/events", owner, repo, number, reviewID)
+
+       req, err := s.client.NewRequest("POST", u, review)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(PullRequestReview)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// DismissReview dismisses a specified review on the specified pull request.
+//
+// TODO: Follow up with GitHub support about an issue with this method's
+// returned error format and remove this comment once it's fixed.
+// Read more about it here - https://github.com/google/go-github/issues/540
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#dismiss-a-review-for-a-pull-request
+func (s *PullRequestsService) DismissReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewDismissalRequest) (*PullRequestReview, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/dismissals", owner, repo, number, reviewID)
+
+       req, err := s.client.NewRequest("PUT", u, review)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(PullRequestReview)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/reactions.go b/vendor/github.com/google/go-github/v37/github/reactions.go
new file mode 100644 (file)
index 0000000..08387cb
--- /dev/null
@@ -0,0 +1,494 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "net/http"
+)
+
+// ReactionsService provides access to the reactions-related functions in the
+// GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/
+type ReactionsService service
+
+// Reaction represents a GitHub reaction.
+type Reaction struct {
+       // ID is the Reaction ID.
+       ID     *int64  `json:"id,omitempty"`
+       User   *User   `json:"user,omitempty"`
+       NodeID *string `json:"node_id,omitempty"`
+       // Content is the type of reaction.
+       // Possible values are:
+       //     "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
+       Content *string `json:"content,omitempty"`
+}
+
+// Reactions represents a summary of GitHub reactions.
+type Reactions struct {
+       TotalCount *int    `json:"total_count,omitempty"`
+       PlusOne    *int    `json:"+1,omitempty"`
+       MinusOne   *int    `json:"-1,omitempty"`
+       Laugh      *int    `json:"laugh,omitempty"`
+       Confused   *int    `json:"confused,omitempty"`
+       Heart      *int    `json:"heart,omitempty"`
+       Hooray     *int    `json:"hooray,omitempty"`
+       Rocket     *int    `json:"rocket,omitempty"`
+       Eyes       *int    `json:"eyes,omitempty"`
+       URL        *string `json:"url,omitempty"`
+}
+
+func (r Reaction) String() string {
+       return Stringify(r)
+}
+
+// ListCommentReactionOptions specifies the optional parameters to the
+// ReactionsService.ListCommentReactions method.
+type ListCommentReactionOptions struct {
+       // Content restricts the returned comment reactions to only those with the given type.
+       // Omit this parameter to list all reactions to a commit comment.
+       // Possible values are: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
+       Content string `url:"content,omitempty"`
+
+       ListOptions
+}
+
+// ListCommentReactions lists the reactions for a commit comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#list-reactions-for-a-commit-comment
+func (s *ReactionsService) ListCommentReactions(ctx context.Context, owner, repo string, id int64, opts *ListCommentReactionOptions) ([]*Reaction, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions", owner, repo, id)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var m []*Reaction
+       resp, err := s.client.Do(ctx, req, &m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// CreateCommentReaction creates a reaction for a commit comment.
+// Note that if you have already created a reaction of type content, the
+// previously created reaction will be returned with Status: 200 OK.
+// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#create-reaction-for-a-commit-comment
+func (s *ReactionsService) CreateCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions", owner, repo, id)
+
+       body := &Reaction{Content: String(content)}
+       req, err := s.client.NewRequest("POST", u, body)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       m := &Reaction{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// DeleteCommentReaction deletes the reaction for a commit comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-a-commit-comment-reaction
+func (s *ReactionsService) DeleteCommentReaction(ctx context.Context, owner, repo string, commentID, reactionID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions/%v", owner, repo, commentID, reactionID)
+
+       return s.deleteReaction(ctx, u)
+}
+
+// DeleteCommentReactionByID deletes the reaction for a commit comment by repository ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-a-commit-comment-reaction
+func (s *ReactionsService) DeleteCommentReactionByID(ctx context.Context, repoID, commentID, reactionID int64) (*Response, error) {
+       u := fmt.Sprintf("repositories/%v/comments/%v/reactions/%v", repoID, commentID, reactionID)
+
+       return s.deleteReaction(ctx, u)
+}
+
+// ListIssueReactions lists the reactions for an issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#list-reactions-for-an-issue
+func (s *ReactionsService) ListIssueReactions(ctx context.Context, owner, repo string, number int, opts *ListOptions) ([]*Reaction, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%v/reactions", owner, repo, number)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var m []*Reaction
+       resp, err := s.client.Do(ctx, req, &m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// CreateIssueReaction creates a reaction for an issue.
+// Note that if you have already created a reaction of type content, the
+// previously created reaction will be returned with Status: 200 OK.
+// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#create-reaction-for-an-issue
+func (s *ReactionsService) CreateIssueReaction(ctx context.Context, owner, repo string, number int, content string) (*Reaction, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/%v/reactions", owner, repo, number)
+
+       body := &Reaction{Content: String(content)}
+       req, err := s.client.NewRequest("POST", u, body)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       m := &Reaction{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// DeleteIssueReaction deletes the reaction to an issue.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-an-issue-reaction
+func (s *ReactionsService) DeleteIssueReaction(ctx context.Context, owner, repo string, issueNumber int, reactionID int64) (*Response, error) {
+       url := fmt.Sprintf("repos/%v/%v/issues/%v/reactions/%v", owner, repo, issueNumber, reactionID)
+
+       return s.deleteReaction(ctx, url)
+}
+
+// DeleteIssueReactionByID deletes the reaction to an issue by repository ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-an-issue-reaction
+func (s *ReactionsService) DeleteIssueReactionByID(ctx context.Context, repoID, issueNumber int, reactionID int64) (*Response, error) {
+       url := fmt.Sprintf("repositories/%v/issues/%v/reactions/%v", repoID, issueNumber, reactionID)
+
+       return s.deleteReaction(ctx, url)
+}
+
+// ListIssueCommentReactions lists the reactions for an issue comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#list-reactions-for-an-issue-comment
+func (s *ReactionsService) ListIssueCommentReactions(ctx context.Context, owner, repo string, id int64, opts *ListOptions) ([]*Reaction, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions", owner, repo, id)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var m []*Reaction
+       resp, err := s.client.Do(ctx, req, &m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// CreateIssueCommentReaction creates a reaction for an issue comment.
+// Note that if you have already created a reaction of type content, the
+// previously created reaction will be returned with Status: 200 OK.
+// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#create-reaction-for-an-issue-comment
+func (s *ReactionsService) CreateIssueCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions", owner, repo, id)
+
+       body := &Reaction{Content: String(content)}
+       req, err := s.client.NewRequest("POST", u, body)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       m := &Reaction{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// DeleteIssueCommentReaction deletes the reaction to an issue comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-an-issue-comment-reaction
+func (s *ReactionsService) DeleteIssueCommentReaction(ctx context.Context, owner, repo string, commentID, reactionID int64) (*Response, error) {
+       url := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions/%v", owner, repo, commentID, reactionID)
+
+       return s.deleteReaction(ctx, url)
+}
+
+// DeleteIssueCommentReactionByID deletes the reaction to an issue comment by repository ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-an-issue-comment-reaction
+func (s *ReactionsService) DeleteIssueCommentReactionByID(ctx context.Context, repoID, commentID, reactionID int64) (*Response, error) {
+       url := fmt.Sprintf("repositories/%v/issues/comments/%v/reactions/%v", repoID, commentID, reactionID)
+
+       return s.deleteReaction(ctx, url)
+}
+
+// ListPullRequestCommentReactions lists the reactions for a pull request review comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#list-reactions-for-a-pull-request-review-comment
+func (s *ReactionsService) ListPullRequestCommentReactions(ctx context.Context, owner, repo string, id int64, opts *ListOptions) ([]*Reaction, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions", owner, repo, id)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var m []*Reaction
+       resp, err := s.client.Do(ctx, req, &m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// CreatePullRequestCommentReaction creates a reaction for a pull request review comment.
+// Note that if you have already created a reaction of type content, the
+// previously created reaction will be returned with Status: 200 OK.
+// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#create-reaction-for-a-pull-request-review-comment
+func (s *ReactionsService) CreatePullRequestCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions", owner, repo, id)
+
+       body := &Reaction{Content: String(content)}
+       req, err := s.client.NewRequest("POST", u, body)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       m := &Reaction{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// DeletePullRequestCommentReaction deletes the reaction to a pull request review comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-a-pull-request-comment-reaction
+func (s *ReactionsService) DeletePullRequestCommentReaction(ctx context.Context, owner, repo string, commentID, reactionID int64) (*Response, error) {
+       url := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions/%v", owner, repo, commentID, reactionID)
+
+       return s.deleteReaction(ctx, url)
+}
+
+// DeletePullRequestCommentReactionByID deletes the reaction to a pull request review comment by repository ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-a-pull-request-comment-reaction
+func (s *ReactionsService) DeletePullRequestCommentReactionByID(ctx context.Context, repoID, commentID, reactionID int64) (*Response, error) {
+       url := fmt.Sprintf("repositories/%v/pulls/comments/%v/reactions/%v", repoID, commentID, reactionID)
+
+       return s.deleteReaction(ctx, url)
+}
+
+// ListTeamDiscussionReactions lists the reactions for a team discussion.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#list-reactions-for-a-team-discussion-legacy
+func (s *ReactionsService) ListTeamDiscussionReactions(ctx context.Context, teamID int64, discussionNumber int, opts *ListOptions) ([]*Reaction, *Response, error) {
+       u := fmt.Sprintf("teams/%v/discussions/%v/reactions", teamID, discussionNumber)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var m []*Reaction
+       resp, err := s.client.Do(ctx, req, &m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// CreateTeamDiscussionReaction creates a reaction for a team discussion.
+// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#create-reaction-for-a-team-discussion-legacy
+func (s *ReactionsService) CreateTeamDiscussionReaction(ctx context.Context, teamID int64, discussionNumber int, content string) (*Reaction, *Response, error) {
+       u := fmt.Sprintf("teams/%v/discussions/%v/reactions", teamID, discussionNumber)
+
+       body := &Reaction{Content: String(content)}
+       req, err := s.client.NewRequest("POST", u, body)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       m := &Reaction{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// DeleteTeamDiscussionReaction deletes the reaction to a team discussion.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-team-discussion-reaction
+func (s *ReactionsService) DeleteTeamDiscussionReaction(ctx context.Context, org, teamSlug string, discussionNumber int, reactionID int64) (*Response, error) {
+       url := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/reactions/%v", org, teamSlug, discussionNumber, reactionID)
+
+       return s.deleteReaction(ctx, url)
+}
+
+// DeleteTeamDiscussionReactionByOrgIDAndTeamID deletes the reaction to a team discussion by organization ID and team ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-team-discussion-reaction
+func (s *ReactionsService) DeleteTeamDiscussionReactionByOrgIDAndTeamID(ctx context.Context, orgID, teamID, discussionNumber int, reactionID int64) (*Response, error) {
+       url := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/reactions/%v", orgID, teamID, discussionNumber, reactionID)
+
+       return s.deleteReaction(ctx, url)
+}
+
+// ListTeamDiscussionCommentReactions lists the reactions for a team discussion comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#list-reactions-for-a-team-discussion-comment-legacy
+func (s *ReactionsService) ListTeamDiscussionCommentReactions(ctx context.Context, teamID int64, discussionNumber, commentNumber int, opts *ListOptions) ([]*Reaction, *Response, error) {
+       u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v/reactions", teamID, discussionNumber, commentNumber)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var m []*Reaction
+       resp, err := s.client.Do(ctx, req, &m)
+       if err != nil {
+               return nil, resp, err
+       }
+       return m, resp, nil
+}
+
+// CreateTeamDiscussionCommentReaction creates a reaction for a team discussion comment.
+// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#create-reaction-for-a-team-discussion-comment-legacy
+func (s *ReactionsService) CreateTeamDiscussionCommentReaction(ctx context.Context, teamID int64, discussionNumber, commentNumber int, content string) (*Reaction, *Response, error) {
+       u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v/reactions", teamID, discussionNumber, commentNumber)
+
+       body := &Reaction{Content: String(content)}
+       req, err := s.client.NewRequest("POST", u, body)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       m := &Reaction{}
+       resp, err := s.client.Do(ctx, req, m)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return m, resp, nil
+}
+
+// DeleteTeamDiscussionCommentReaction deletes the reaction to a team discussion comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-team-discussion-comment-reaction
+func (s *ReactionsService) DeleteTeamDiscussionCommentReaction(ctx context.Context, org, teamSlug string, discussionNumber, commentNumber int, reactionID int64) (*Response, error) {
+       url := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments/%v/reactions/%v", org, teamSlug, discussionNumber, commentNumber, reactionID)
+
+       return s.deleteReaction(ctx, url)
+}
+
+// DeleteTeamDiscussionCommentReactionByOrgIDAndTeamID deletes the reaction to a team discussion comment by organization ID and team ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#delete-team-discussion-comment-reaction
+func (s *ReactionsService) DeleteTeamDiscussionCommentReactionByOrgIDAndTeamID(ctx context.Context, orgID, teamID, discussionNumber, commentNumber int, reactionID int64) (*Response, error) {
+       url := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments/%v/reactions/%v", orgID, teamID, discussionNumber, commentNumber, reactionID)
+
+       return s.deleteReaction(ctx, url)
+}
+
+func (s *ReactionsService) deleteReaction(ctx context.Context, url string) (*Response, error) {
+       req, err := s.client.NewRequest(http.MethodDelete, url, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos.go b/vendor/github.com/google/go-github/v37/github/repos.go
new file mode 100644 (file)
index 0000000..d336e8b
--- /dev/null
@@ -0,0 +1,1535 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "encoding/json"
+       "fmt"
+       "net/http"
+       "strings"
+)
+
+// RepositoriesService handles communication with the repository related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/
+type RepositoriesService service
+
+// Repository represents a GitHub repository.
+type Repository struct {
+       ID                  *int64          `json:"id,omitempty"`
+       NodeID              *string         `json:"node_id,omitempty"`
+       Owner               *User           `json:"owner,omitempty"`
+       Name                *string         `json:"name,omitempty"`
+       FullName            *string         `json:"full_name,omitempty"`
+       Description         *string         `json:"description,omitempty"`
+       Homepage            *string         `json:"homepage,omitempty"`
+       CodeOfConduct       *CodeOfConduct  `json:"code_of_conduct,omitempty"`
+       DefaultBranch       *string         `json:"default_branch,omitempty"`
+       MasterBranch        *string         `json:"master_branch,omitempty"`
+       CreatedAt           *Timestamp      `json:"created_at,omitempty"`
+       PushedAt            *Timestamp      `json:"pushed_at,omitempty"`
+       UpdatedAt           *Timestamp      `json:"updated_at,omitempty"`
+       HTMLURL             *string         `json:"html_url,omitempty"`
+       CloneURL            *string         `json:"clone_url,omitempty"`
+       GitURL              *string         `json:"git_url,omitempty"`
+       MirrorURL           *string         `json:"mirror_url,omitempty"`
+       SSHURL              *string         `json:"ssh_url,omitempty"`
+       SVNURL              *string         `json:"svn_url,omitempty"`
+       Language            *string         `json:"language,omitempty"`
+       Fork                *bool           `json:"fork,omitempty"`
+       ForksCount          *int            `json:"forks_count,omitempty"`
+       NetworkCount        *int            `json:"network_count,omitempty"`
+       OpenIssuesCount     *int            `json:"open_issues_count,omitempty"`
+       OpenIssues          *int            `json:"open_issues,omitempty"` // Deprecated: Replaced by OpenIssuesCount. For backward compatibility OpenIssues is still populated.
+       StargazersCount     *int            `json:"stargazers_count,omitempty"`
+       SubscribersCount    *int            `json:"subscribers_count,omitempty"`
+       WatchersCount       *int            `json:"watchers_count,omitempty"` // Deprecated: Replaced by StargazersCount. For backward compatibility WatchersCount is still populated.
+       Watchers            *int            `json:"watchers,omitempty"`       // Deprecated: Replaced by StargazersCount. For backward compatibility Watchers is still populated.
+       Size                *int            `json:"size,omitempty"`
+       AutoInit            *bool           `json:"auto_init,omitempty"`
+       Parent              *Repository     `json:"parent,omitempty"`
+       Source              *Repository     `json:"source,omitempty"`
+       TemplateRepository  *Repository     `json:"template_repository,omitempty"`
+       Organization        *Organization   `json:"organization,omitempty"`
+       Permissions         map[string]bool `json:"permissions,omitempty"`
+       AllowRebaseMerge    *bool           `json:"allow_rebase_merge,omitempty"`
+       AllowSquashMerge    *bool           `json:"allow_squash_merge,omitempty"`
+       AllowMergeCommit    *bool           `json:"allow_merge_commit,omitempty"`
+       DeleteBranchOnMerge *bool           `json:"delete_branch_on_merge,omitempty"`
+       Topics              []string        `json:"topics,omitempty"`
+       Archived            *bool           `json:"archived,omitempty"`
+       Disabled            *bool           `json:"disabled,omitempty"`
+
+       // Only provided when using RepositoriesService.Get while in preview
+       License *License `json:"license,omitempty"`
+
+       // Additional mutable fields when creating and editing a repository
+       Private           *bool   `json:"private,omitempty"`
+       HasIssues         *bool   `json:"has_issues,omitempty"`
+       HasWiki           *bool   `json:"has_wiki,omitempty"`
+       HasPages          *bool   `json:"has_pages,omitempty"`
+       HasProjects       *bool   `json:"has_projects,omitempty"`
+       HasDownloads      *bool   `json:"has_downloads,omitempty"`
+       IsTemplate        *bool   `json:"is_template,omitempty"`
+       LicenseTemplate   *string `json:"license_template,omitempty"`
+       GitignoreTemplate *string `json:"gitignore_template,omitempty"`
+
+       // Creating an organization repository. Required for non-owners.
+       TeamID *int64 `json:"team_id,omitempty"`
+
+       // API URLs
+       URL              *string `json:"url,omitempty"`
+       ArchiveURL       *string `json:"archive_url,omitempty"`
+       AssigneesURL     *string `json:"assignees_url,omitempty"`
+       BlobsURL         *string `json:"blobs_url,omitempty"`
+       BranchesURL      *string `json:"branches_url,omitempty"`
+       CollaboratorsURL *string `json:"collaborators_url,omitempty"`
+       CommentsURL      *string `json:"comments_url,omitempty"`
+       CommitsURL       *string `json:"commits_url,omitempty"`
+       CompareURL       *string `json:"compare_url,omitempty"`
+       ContentsURL      *string `json:"contents_url,omitempty"`
+       ContributorsURL  *string `json:"contributors_url,omitempty"`
+       DeploymentsURL   *string `json:"deployments_url,omitempty"`
+       DownloadsURL     *string `json:"downloads_url,omitempty"`
+       EventsURL        *string `json:"events_url,omitempty"`
+       ForksURL         *string `json:"forks_url,omitempty"`
+       GitCommitsURL    *string `json:"git_commits_url,omitempty"`
+       GitRefsURL       *string `json:"git_refs_url,omitempty"`
+       GitTagsURL       *string `json:"git_tags_url,omitempty"`
+       HooksURL         *string `json:"hooks_url,omitempty"`
+       IssueCommentURL  *string `json:"issue_comment_url,omitempty"`
+       IssueEventsURL   *string `json:"issue_events_url,omitempty"`
+       IssuesURL        *string `json:"issues_url,omitempty"`
+       KeysURL          *string `json:"keys_url,omitempty"`
+       LabelsURL        *string `json:"labels_url,omitempty"`
+       LanguagesURL     *string `json:"languages_url,omitempty"`
+       MergesURL        *string `json:"merges_url,omitempty"`
+       MilestonesURL    *string `json:"milestones_url,omitempty"`
+       NotificationsURL *string `json:"notifications_url,omitempty"`
+       PullsURL         *string `json:"pulls_url,omitempty"`
+       ReleasesURL      *string `json:"releases_url,omitempty"`
+       StargazersURL    *string `json:"stargazers_url,omitempty"`
+       StatusesURL      *string `json:"statuses_url,omitempty"`
+       SubscribersURL   *string `json:"subscribers_url,omitempty"`
+       SubscriptionURL  *string `json:"subscription_url,omitempty"`
+       TagsURL          *string `json:"tags_url,omitempty"`
+       TreesURL         *string `json:"trees_url,omitempty"`
+       TeamsURL         *string `json:"teams_url,omitempty"`
+
+       // TextMatches is only populated from search results that request text matches
+       // See: search.go and https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#text-match-metadata
+       TextMatches []*TextMatch `json:"text_matches,omitempty"`
+
+       // Visibility is only used for Create and Edit endpoints. The visibility field
+       // overrides the field parameter when both are used.
+       // Can be one of public, private or internal.
+       Visibility *string `json:"visibility,omitempty"`
+}
+
+func (r Repository) String() string {
+       return Stringify(r)
+}
+
+// BranchListOptions specifies the optional parameters to the
+// RepositoriesService.ListBranches method.
+type BranchListOptions struct {
+       // Setting to true returns only protected branches.
+       // When set to false, only unprotected branches are returned.
+       // Omitting this parameter returns all branches.
+       // Default: nil
+       Protected *bool `url:"protected,omitempty"`
+
+       ListOptions
+}
+
+// RepositoryListOptions specifies the optional parameters to the
+// RepositoriesService.List method.
+type RepositoryListOptions struct {
+       // Visibility of repositories to list. Can be one of all, public, or private.
+       // Default: all
+       Visibility string `url:"visibility,omitempty"`
+
+       // List repos of given affiliation[s].
+       // Comma-separated list of values. Can include:
+       // * owner: Repositories that are owned by the authenticated user.
+       // * collaborator: Repositories that the user has been added to as a
+       //   collaborator.
+       // * organization_member: Repositories that the user has access to through
+       //   being a member of an organization. This includes every repository on
+       //   every team that the user is on.
+       // Default: owner,collaborator,organization_member
+       Affiliation string `url:"affiliation,omitempty"`
+
+       // Type of repositories to list.
+       // Can be one of all, owner, public, private, member. Default: all
+       // Will cause a 422 error if used in the same request as visibility or
+       // affiliation.
+       Type string `url:"type,omitempty"`
+
+       // How to sort the repository list. Can be one of created, updated, pushed,
+       // full_name. Default: full_name
+       Sort string `url:"sort,omitempty"`
+
+       // Direction in which to sort repositories. Can be one of asc or desc.
+       // Default: when using full_name: asc; otherwise desc
+       Direction string `url:"direction,omitempty"`
+
+       ListOptions
+}
+
+// List the repositories for a user. Passing the empty string will list
+// repositories for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-repositories-for-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-repositories-for-a-user
+func (s *RepositoriesService) List(ctx context.Context, user string, opts *RepositoryListOptions) ([]*Repository, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v/repos", user)
+       } else {
+               u = "user/repos"
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       acceptHeaders := []string{mediaTypeTopicsPreview, mediaTypeRepositoryVisibilityPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       var repos []*Repository
+       resp, err := s.client.Do(ctx, req, &repos)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repos, resp, nil
+}
+
+// RepositoryListByOrgOptions specifies the optional parameters to the
+// RepositoriesService.ListByOrg method.
+type RepositoryListByOrgOptions struct {
+       // Type of repositories to list. Possible values are: all, public, private,
+       // forks, sources, member. Default is "all".
+       Type string `url:"type,omitempty"`
+
+       // How to sort the repository list. Can be one of created, updated, pushed,
+       // full_name. Default is "created".
+       Sort string `url:"sort,omitempty"`
+
+       // Direction in which to sort repositories. Can be one of asc or desc.
+       // Default when using full_name: asc; otherwise desc.
+       Direction string `url:"direction,omitempty"`
+
+       ListOptions
+}
+
+// ListByOrg lists the repositories for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-organization-repositories
+func (s *RepositoriesService) ListByOrg(ctx context.Context, org string, opts *RepositoryListByOrgOptions) ([]*Repository, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/repos", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       acceptHeaders := []string{mediaTypeTopicsPreview, mediaTypeRepositoryVisibilityPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       var repos []*Repository
+       resp, err := s.client.Do(ctx, req, &repos)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repos, resp, nil
+}
+
+// RepositoryListAllOptions specifies the optional parameters to the
+// RepositoriesService.ListAll method.
+type RepositoryListAllOptions struct {
+       // ID of the last repository seen
+       Since int64 `url:"since,omitempty"`
+}
+
+// ListAll lists all GitHub repositories in the order that they were created.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-public-repositories
+func (s *RepositoriesService) ListAll(ctx context.Context, opts *RepositoryListAllOptions) ([]*Repository, *Response, error) {
+       u, err := addOptions("repositories", opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var repos []*Repository
+       resp, err := s.client.Do(ctx, req, &repos)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repos, resp, nil
+}
+
+// createRepoRequest is a subset of Repository and is used internally
+// by Create to pass only the known fields for the endpoint.
+//
+// See https://github.com/google/go-github/issues/1014 for more
+// information.
+type createRepoRequest struct {
+       // Name is required when creating a repo.
+       Name        *string `json:"name,omitempty"`
+       Description *string `json:"description,omitempty"`
+       Homepage    *string `json:"homepage,omitempty"`
+
+       Private     *bool   `json:"private,omitempty"`
+       Visibility  *string `json:"visibility,omitempty"`
+       HasIssues   *bool   `json:"has_issues,omitempty"`
+       HasProjects *bool   `json:"has_projects,omitempty"`
+       HasWiki     *bool   `json:"has_wiki,omitempty"`
+       IsTemplate  *bool   `json:"is_template,omitempty"`
+
+       // Creating an organization repository. Required for non-owners.
+       TeamID *int64 `json:"team_id,omitempty"`
+
+       AutoInit            *bool   `json:"auto_init,omitempty"`
+       GitignoreTemplate   *string `json:"gitignore_template,omitempty"`
+       LicenseTemplate     *string `json:"license_template,omitempty"`
+       AllowSquashMerge    *bool   `json:"allow_squash_merge,omitempty"`
+       AllowMergeCommit    *bool   `json:"allow_merge_commit,omitempty"`
+       AllowRebaseMerge    *bool   `json:"allow_rebase_merge,omitempty"`
+       DeleteBranchOnMerge *bool   `json:"delete_branch_on_merge,omitempty"`
+}
+
+// Create a new repository. If an organization is specified, the new
+// repository will be created under that org. If the empty string is
+// specified, it will be created for the authenticated user.
+//
+// Note that only a subset of the repo fields are used and repo must
+// not be nil.
+//
+// Also note that this method will return the response without actually
+// waiting for GitHub to finish creating the repository and letting the
+// changes propagate throughout its servers. You may set up a loop with
+// exponential back-off to verify repository's creation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-repository-for-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-an-organization-repository
+func (s *RepositoriesService) Create(ctx context.Context, org string, repo *Repository) (*Repository, *Response, error) {
+       var u string
+       if org != "" {
+               u = fmt.Sprintf("orgs/%v/repos", org)
+       } else {
+               u = "user/repos"
+       }
+
+       repoReq := &createRepoRequest{
+               Name:                repo.Name,
+               Description:         repo.Description,
+               Homepage:            repo.Homepage,
+               Private:             repo.Private,
+               Visibility:          repo.Visibility,
+               HasIssues:           repo.HasIssues,
+               HasProjects:         repo.HasProjects,
+               HasWiki:             repo.HasWiki,
+               IsTemplate:          repo.IsTemplate,
+               TeamID:              repo.TeamID,
+               AutoInit:            repo.AutoInit,
+               GitignoreTemplate:   repo.GitignoreTemplate,
+               LicenseTemplate:     repo.LicenseTemplate,
+               AllowSquashMerge:    repo.AllowSquashMerge,
+               AllowMergeCommit:    repo.AllowMergeCommit,
+               AllowRebaseMerge:    repo.AllowRebaseMerge,
+               DeleteBranchOnMerge: repo.DeleteBranchOnMerge,
+       }
+
+       req, err := s.client.NewRequest("POST", u, repoReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       acceptHeaders := []string{mediaTypeRepositoryTemplatePreview, mediaTypeRepositoryVisibilityPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+       r := new(Repository)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// TemplateRepoRequest represents a request to create a repository from a template.
+type TemplateRepoRequest struct {
+       // Name is required when creating a repo.
+       Name        *string `json:"name,omitempty"`
+       Owner       *string `json:"owner,omitempty"`
+       Description *string `json:"description,omitempty"`
+
+       IncludeAllBranches *bool `json:"include_all_branches,omitempty"`
+       Private            *bool `json:"private,omitempty"`
+}
+
+// CreateFromTemplate generates a repository from a template.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-repository-using-a-template
+func (s *RepositoriesService) CreateFromTemplate(ctx context.Context, templateOwner, templateRepo string, templateRepoReq *TemplateRepoRequest) (*Repository, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/generate", templateOwner, templateRepo)
+
+       req, err := s.client.NewRequest("POST", u, templateRepoReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req.Header.Set("Accept", mediaTypeRepositoryTemplatePreview)
+       r := new(Repository)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// Get fetches a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-repository
+func (s *RepositoriesService) Get(ctx context.Context, owner, repo string) (*Repository, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when the license support fully launches
+       // https://docs.github.com/en/free-pro-team@latest/rest/reference/licenses/#get-a-repositorys-license
+       acceptHeaders := []string{
+               mediaTypeCodesOfConductPreview,
+               mediaTypeTopicsPreview,
+               mediaTypeRepositoryTemplatePreview,
+               mediaTypeRepositoryVisibilityPreview,
+       }
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       repository := new(Repository)
+       resp, err := s.client.Do(ctx, req, repository)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repository, resp, nil
+}
+
+// GetCodeOfConduct gets the contents of a repository's code of conduct.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/codes-of-conduct/#get-the-code-of-conduct-for-a-repository
+func (s *RepositoriesService) GetCodeOfConduct(ctx context.Context, owner, repo string) (*CodeOfConduct, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/community/code_of_conduct", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeCodesOfConductPreview)
+
+       coc := new(CodeOfConduct)
+       resp, err := s.client.Do(ctx, req, coc)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return coc, resp, nil
+}
+
+// GetByID fetches a repository.
+//
+// Note: GetByID uses the undocumented GitHub API endpoint /repositories/:id.
+func (s *RepositoriesService) GetByID(ctx context.Context, id int64) (*Repository, *Response, error) {
+       u := fmt.Sprintf("repositories/%d", id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       repository := new(Repository)
+       resp, err := s.client.Do(ctx, req, repository)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repository, resp, nil
+}
+
+// Edit updates a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-a-repository
+func (s *RepositoriesService) Edit(ctx context.Context, owner, repo string, repository *Repository) (*Repository, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v", owner, repo)
+       req, err := s.client.NewRequest("PATCH", u, repository)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       acceptHeaders := []string{mediaTypeRepositoryTemplatePreview, mediaTypeRepositoryVisibilityPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+       r := new(Repository)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// Delete a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-a-repository
+func (s *RepositoriesService) Delete(ctx context.Context, owner, repo string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v", owner, repo)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// Contributor represents a repository contributor
+type Contributor struct {
+       Login             *string `json:"login,omitempty"`
+       ID                *int64  `json:"id,omitempty"`
+       NodeID            *string `json:"node_id,omitempty"`
+       AvatarURL         *string `json:"avatar_url,omitempty"`
+       GravatarID        *string `json:"gravatar_id,omitempty"`
+       URL               *string `json:"url,omitempty"`
+       HTMLURL           *string `json:"html_url,omitempty"`
+       FollowersURL      *string `json:"followers_url,omitempty"`
+       FollowingURL      *string `json:"following_url,omitempty"`
+       GistsURL          *string `json:"gists_url,omitempty"`
+       StarredURL        *string `json:"starred_url,omitempty"`
+       SubscriptionsURL  *string `json:"subscriptions_url,omitempty"`
+       OrganizationsURL  *string `json:"organizations_url,omitempty"`
+       ReposURL          *string `json:"repos_url,omitempty"`
+       EventsURL         *string `json:"events_url,omitempty"`
+       ReceivedEventsURL *string `json:"received_events_url,omitempty"`
+       Type              *string `json:"type,omitempty"`
+       SiteAdmin         *bool   `json:"site_admin,omitempty"`
+       Contributions     *int    `json:"contributions,omitempty"`
+       Name              *string `json:"name,omitempty"`
+       Email             *string `json:"email,omitempty"`
+}
+
+// ListContributorsOptions specifies the optional parameters to the
+// RepositoriesService.ListContributors method.
+type ListContributorsOptions struct {
+       // Include anonymous contributors in results or not
+       Anon string `url:"anon,omitempty"`
+
+       ListOptions
+}
+
+// GetVulnerabilityAlerts checks if vulnerability alerts are enabled for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#check-if-vulnerability-alerts-are-enabled-for-a-repository
+func (s *RepositoriesService) GetVulnerabilityAlerts(ctx context.Context, owner, repository string) (bool, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/vulnerability-alerts", owner, repository)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeRequiredVulnerabilityAlertsPreview)
+
+       resp, err := s.client.Do(ctx, req, nil)
+       vulnerabilityAlertsEnabled, err := parseBoolResponse(err)
+
+       return vulnerabilityAlertsEnabled, resp, err
+}
+
+// EnableVulnerabilityAlerts enables vulnerability alerts and the dependency graph for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#enable-vulnerability-alerts
+func (s *RepositoriesService) EnableVulnerabilityAlerts(ctx context.Context, owner, repository string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/vulnerability-alerts", owner, repository)
+
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeRequiredVulnerabilityAlertsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DisableVulnerabilityAlerts disables vulnerability alerts and the dependency graph for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#disable-vulnerability-alerts
+func (s *RepositoriesService) DisableVulnerabilityAlerts(ctx context.Context, owner, repository string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/vulnerability-alerts", owner, repository)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeRequiredVulnerabilityAlertsPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// EnableAutomatedSecurityFixes enables the automated security fixes for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#enable-automated-security-fixes
+func (s *RepositoriesService) EnableAutomatedSecurityFixes(ctx context.Context, owner, repository string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/automated-security-fixes", owner, repository)
+
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeRequiredAutomatedSecurityFixesPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DisableAutomatedSecurityFixes disables vulnerability alerts and the dependency graph for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#disable-automated-security-fixes
+func (s *RepositoriesService) DisableAutomatedSecurityFixes(ctx context.Context, owner, repository string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/automated-security-fixes", owner, repository)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeRequiredAutomatedSecurityFixesPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListContributors lists contributors for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-repository-contributors
+func (s *RepositoriesService) ListContributors(ctx context.Context, owner string, repository string, opts *ListContributorsOptions) ([]*Contributor, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/contributors", owner, repository)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var contributor []*Contributor
+       resp, err := s.client.Do(ctx, req, &contributor)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return contributor, resp, nil
+}
+
+// ListLanguages lists languages for the specified repository. The returned map
+// specifies the languages and the number of bytes of code written in that
+// language. For example:
+//
+//     {
+//       "C": 78769,
+//       "Python": 7769
+//     }
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-repository-languages
+func (s *RepositoriesService) ListLanguages(ctx context.Context, owner string, repo string) (map[string]int, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/languages", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       languages := make(map[string]int)
+       resp, err := s.client.Do(ctx, req, &languages)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return languages, resp, nil
+}
+
+// ListTeams lists the teams for the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-repository-teams
+func (s *RepositoriesService) ListTeams(ctx context.Context, owner string, repo string, opts *ListOptions) ([]*Team, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/teams", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var teams []*Team
+       resp, err := s.client.Do(ctx, req, &teams)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teams, resp, nil
+}
+
+// RepositoryTag represents a repository tag.
+type RepositoryTag struct {
+       Name       *string `json:"name,omitempty"`
+       Commit     *Commit `json:"commit,omitempty"`
+       ZipballURL *string `json:"zipball_url,omitempty"`
+       TarballURL *string `json:"tarball_url,omitempty"`
+}
+
+// ListTags lists tags for the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-repository-tags
+func (s *RepositoriesService) ListTags(ctx context.Context, owner string, repo string, opts *ListOptions) ([]*RepositoryTag, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/tags", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var tags []*RepositoryTag
+       resp, err := s.client.Do(ctx, req, &tags)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return tags, resp, nil
+}
+
+// Branch represents a repository branch
+type Branch struct {
+       Name      *string           `json:"name,omitempty"`
+       Commit    *RepositoryCommit `json:"commit,omitempty"`
+       Protected *bool             `json:"protected,omitempty"`
+}
+
+// Protection represents a repository branch's protection.
+type Protection struct {
+       RequiredStatusChecks           *RequiredStatusChecks           `json:"required_status_checks"`
+       RequiredPullRequestReviews     *PullRequestReviewsEnforcement  `json:"required_pull_request_reviews"`
+       EnforceAdmins                  *AdminEnforcement               `json:"enforce_admins"`
+       Restrictions                   *BranchRestrictions             `json:"restrictions"`
+       RequireLinearHistory           *RequireLinearHistory           `json:"required_linear_history"`
+       AllowForcePushes               *AllowForcePushes               `json:"allow_force_pushes"`
+       AllowDeletions                 *AllowDeletions                 `json:"allow_deletions"`
+       RequiredConversationResolution *RequiredConversationResolution `json:"required_conversation_resolution"`
+}
+
+// ProtectionRequest represents a request to create/edit a branch's protection.
+type ProtectionRequest struct {
+       RequiredStatusChecks       *RequiredStatusChecks                 `json:"required_status_checks"`
+       RequiredPullRequestReviews *PullRequestReviewsEnforcementRequest `json:"required_pull_request_reviews"`
+       EnforceAdmins              bool                                  `json:"enforce_admins"`
+       Restrictions               *BranchRestrictionsRequest            `json:"restrictions"`
+       // Enforces a linear commit Git history, which prevents anyone from pushing merge commits to a branch.
+       RequireLinearHistory *bool `json:"required_linear_history,omitempty"`
+       // Permits force pushes to the protected branch by anyone with write access to the repository.
+       AllowForcePushes *bool `json:"allow_force_pushes,omitempty"`
+       // Allows deletion of the protected branch by anyone with write access to the repository.
+       AllowDeletions *bool `json:"allow_deletions,omitempty"`
+}
+
+// RequiredStatusChecks represents the protection status of a individual branch.
+type RequiredStatusChecks struct {
+       // Require branches to be up to date before merging. (Required.)
+       Strict bool `json:"strict"`
+       // The list of status checks to require in order to merge into this
+       // branch. (Required; use []string{} instead of nil for empty list.)
+       Contexts []string `json:"contexts"`
+}
+
+// RequiredStatusChecksRequest represents a request to edit a protected branch's status checks.
+type RequiredStatusChecksRequest struct {
+       Strict   *bool    `json:"strict,omitempty"`
+       Contexts []string `json:"contexts,omitempty"`
+}
+
+// PullRequestReviewsEnforcement represents the pull request reviews enforcement of a protected branch.
+type PullRequestReviewsEnforcement struct {
+       // Specifies which users and teams can dismiss pull request reviews.
+       DismissalRestrictions *DismissalRestrictions `json:"dismissal_restrictions,omitempty"`
+       // Specifies if approved reviews are dismissed automatically, when a new commit is pushed.
+       DismissStaleReviews bool `json:"dismiss_stale_reviews"`
+       // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner.
+       RequireCodeOwnerReviews bool `json:"require_code_owner_reviews"`
+       // RequiredApprovingReviewCount specifies the number of approvals required before the pull request can be merged.
+       // Valid values are 1-6.
+       RequiredApprovingReviewCount int `json:"required_approving_review_count"`
+}
+
+// PullRequestReviewsEnforcementRequest represents request to set the pull request review
+// enforcement of a protected branch. It is separate from PullRequestReviewsEnforcement above
+// because the request structure is different from the response structure.
+type PullRequestReviewsEnforcementRequest struct {
+       // Specifies which users and teams should be allowed to dismiss pull request reviews.
+       // User and team dismissal restrictions are only available for
+       // organization-owned repositories. Must be nil for personal repositories.
+       DismissalRestrictionsRequest *DismissalRestrictionsRequest `json:"dismissal_restrictions,omitempty"`
+       // Specifies if approved reviews can be dismissed automatically, when a new commit is pushed. (Required)
+       DismissStaleReviews bool `json:"dismiss_stale_reviews"`
+       // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner.
+       RequireCodeOwnerReviews bool `json:"require_code_owner_reviews"`
+       // RequiredApprovingReviewCount specifies the number of approvals required before the pull request can be merged.
+       // Valid values are 1-6.
+       RequiredApprovingReviewCount int `json:"required_approving_review_count"`
+}
+
+// PullRequestReviewsEnforcementUpdate represents request to patch the pull request review
+// enforcement of a protected branch. It is separate from PullRequestReviewsEnforcementRequest above
+// because the patch request does not require all fields to be initialized.
+type PullRequestReviewsEnforcementUpdate struct {
+       // Specifies which users and teams can dismiss pull request reviews. Can be omitted.
+       DismissalRestrictionsRequest *DismissalRestrictionsRequest `json:"dismissal_restrictions,omitempty"`
+       // Specifies if approved reviews can be dismissed automatically, when a new commit is pushed. Can be omitted.
+       DismissStaleReviews *bool `json:"dismiss_stale_reviews,omitempty"`
+       // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner.
+       RequireCodeOwnerReviews bool `json:"require_code_owner_reviews,omitempty"`
+       // RequiredApprovingReviewCount specifies the number of approvals required before the pull request can be merged.
+       // Valid values are 1 - 6.
+       RequiredApprovingReviewCount int `json:"required_approving_review_count"`
+}
+
+// RequireLinearHistory represents the configuration to enforce branches with no merge commit.
+type RequireLinearHistory struct {
+       Enabled bool `json:"enabled"`
+}
+
+// AllowDeletions represents the configuration to accept deletion of protected branches.
+type AllowDeletions struct {
+       Enabled bool `json:"enabled"`
+}
+
+// AllowForcePushes represents the configuration to accept forced pushes on protected branches.
+type AllowForcePushes struct {
+       Enabled bool `json:"enabled"`
+}
+
+// RequiredConversationResolution, if enabled, requires all comments on the pull request to be resolved before it can be merged to a protected branch.
+type RequiredConversationResolution struct {
+       Enabled bool `json:"enabled"`
+}
+
+// AdminEnforcement represents the configuration to enforce required status checks for repository administrators.
+type AdminEnforcement struct {
+       URL     *string `json:"url,omitempty"`
+       Enabled bool    `json:"enabled"`
+}
+
+// BranchRestrictions represents the restriction that only certain users or
+// teams may push to a branch.
+type BranchRestrictions struct {
+       // The list of user logins with push access.
+       Users []*User `json:"users"`
+       // The list of team slugs with push access.
+       Teams []*Team `json:"teams"`
+       // The list of app slugs with push access.
+       Apps []*App `json:"apps"`
+}
+
+// BranchRestrictionsRequest represents the request to create/edit the
+// restriction that only certain users or teams may push to a branch. It is
+// separate from BranchRestrictions above because the request structure is
+// different from the response structure.
+type BranchRestrictionsRequest struct {
+       // The list of user logins with push access. (Required; use []string{} instead of nil for empty list.)
+       Users []string `json:"users"`
+       // The list of team slugs with push access. (Required; use []string{} instead of nil for empty list.)
+       Teams []string `json:"teams"`
+       // The list of app slugs with push access.
+       Apps []string `json:"apps,omitempty"`
+}
+
+// DismissalRestrictions specifies which users and teams can dismiss pull request reviews.
+type DismissalRestrictions struct {
+       // The list of users who can dimiss pull request reviews.
+       Users []*User `json:"users"`
+       // The list of teams which can dismiss pull request reviews.
+       Teams []*Team `json:"teams"`
+}
+
+// DismissalRestrictionsRequest represents the request to create/edit the
+// restriction to allows only specific users or teams to dimiss pull request reviews. It is
+// separate from DismissalRestrictions above because the request structure is
+// different from the response structure.
+// Note: Both Users and Teams must be nil, or both must be non-nil.
+type DismissalRestrictionsRequest struct {
+       // The list of user logins who can dismiss pull request reviews. (Required; use nil to disable dismissal_restrictions or &[]string{} otherwise.)
+       Users *[]string `json:"users,omitempty"`
+       // The list of team slugs which can dismiss pull request reviews. (Required; use nil to disable dismissal_restrictions or &[]string{} otherwise.)
+       Teams *[]string `json:"teams,omitempty"`
+}
+
+// SignaturesProtectedBranch represents the protection status of an individual branch.
+type SignaturesProtectedBranch struct {
+       URL *string `json:"url,omitempty"`
+       // Commits pushed to matching branches must have verified signatures.
+       Enabled *bool `json:"enabled,omitempty"`
+}
+
+// ListBranches lists branches for the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-branches
+func (s *RepositoriesService) ListBranches(ctx context.Context, owner string, repo string, opts *BranchListOptions) ([]*Branch, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var branches []*Branch
+       resp, err := s.client.Do(ctx, req, &branches)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return branches, resp, nil
+}
+
+// GetBranch gets the specified branch for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-branch
+func (s *RepositoriesService) GetBranch(ctx context.Context, owner, repo, branch string, followRedirects bool) (*Branch, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v", owner, repo, branch)
+
+       resp, err := s.getBranchFromURL(ctx, u, followRedirects)
+       if err != nil {
+               return nil, nil, err
+       }
+       defer resp.Body.Close()
+
+       if resp.StatusCode != http.StatusOK {
+               return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status)
+       }
+
+       b := new(Branch)
+       err = json.NewDecoder(resp.Body).Decode(b)
+       return b, newResponse(resp), err
+}
+
+func (s *RepositoriesService) getBranchFromURL(ctx context.Context, u string, followRedirects bool) (*http.Response, error) {
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       var resp *http.Response
+       // Use http.DefaultTransport if no custom Transport is configured
+       req = withContext(ctx, req)
+       if s.client.client.Transport == nil {
+               resp, err = http.DefaultTransport.RoundTrip(req)
+       } else {
+               resp, err = s.client.client.Transport.RoundTrip(req)
+       }
+       if err != nil {
+               return nil, err
+       }
+
+       // If redirect response is returned, follow it
+       if followRedirects && resp.StatusCode == http.StatusMovedPermanently {
+               resp.Body.Close()
+               u = resp.Header.Get("Location")
+               resp, err = s.getBranchFromURL(ctx, u, false)
+       }
+       return resp, err
+}
+
+// GetBranchProtection gets the protection of a given branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-branch-protection
+func (s *RepositoriesService) GetBranchProtection(ctx context.Context, owner, repo, branch string) (*Protection, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
+
+       p := new(Protection)
+       resp, err := s.client.Do(ctx, req, p)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return p, resp, nil
+}
+
+// GetRequiredStatusChecks gets the required status checks for a given protected branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-status-checks-protection
+func (s *RepositoriesService) GetRequiredStatusChecks(ctx context.Context, owner, repo, branch string) (*RequiredStatusChecks, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks", owner, repo, branch)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       p := new(RequiredStatusChecks)
+       resp, err := s.client.Do(ctx, req, p)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return p, resp, nil
+}
+
+// ListRequiredStatusChecksContexts lists the required status checks contexts for a given protected branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-all-status-check-contexts
+func (s *RepositoriesService) ListRequiredStatusChecksContexts(ctx context.Context, owner, repo, branch string) (contexts []string, resp *Response, err error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks/contexts", owner, repo, branch)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       resp, err = s.client.Do(ctx, req, &contexts)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return contexts, resp, nil
+}
+
+// UpdateBranchProtection updates the protection of a given branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-branch-protection
+func (s *RepositoriesService) UpdateBranchProtection(ctx context.Context, owner, repo, branch string, preq *ProtectionRequest) (*Protection, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch)
+       req, err := s.client.NewRequest("PUT", u, preq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
+
+       p := new(Protection)
+       resp, err := s.client.Do(ctx, req, p)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return p, resp, nil
+}
+
+// RemoveBranchProtection removes the protection of a given branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-branch-protection
+func (s *RepositoriesService) RemoveBranchProtection(ctx context.Context, owner, repo, branch string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// GetSignaturesProtectedBranch gets required signatures of protected branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-commit-signature-protection
+func (s *RepositoriesService) GetSignaturesProtectedBranch(ctx context.Context, owner, repo, branch string) (*SignaturesProtectedBranch, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_signatures", owner, repo, branch)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeSignaturePreview)
+
+       p := new(SignaturesProtectedBranch)
+       resp, err := s.client.Do(ctx, req, p)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return p, resp, nil
+}
+
+// RequireSignaturesOnProtectedBranch makes signed commits required on a protected branch.
+// It requires admin access and branch protection to be enabled.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-commit-signature-protection
+func (s *RepositoriesService) RequireSignaturesOnProtectedBranch(ctx context.Context, owner, repo, branch string) (*SignaturesProtectedBranch, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_signatures", owner, repo, branch)
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeSignaturePreview)
+
+       r := new(SignaturesProtectedBranch)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, err
+}
+
+// OptionalSignaturesOnProtectedBranch removes required signed commits on a given branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-commit-signature-protection
+func (s *RepositoriesService) OptionalSignaturesOnProtectedBranch(ctx context.Context, owner, repo, branch string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_signatures", owner, repo, branch)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeSignaturePreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// UpdateRequiredStatusChecks updates the required status checks for a given protected branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-status-check-protection
+func (s *RepositoriesService) UpdateRequiredStatusChecks(ctx context.Context, owner, repo, branch string, sreq *RequiredStatusChecksRequest) (*RequiredStatusChecks, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks", owner, repo, branch)
+       req, err := s.client.NewRequest("PATCH", u, sreq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       sc := new(RequiredStatusChecks)
+       resp, err := s.client.Do(ctx, req, sc)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return sc, resp, nil
+}
+
+// RemoveRequiredStatusChecks removes the required status checks for a given protected branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos#remove-status-check-protection
+func (s *RepositoriesService) RemoveRequiredStatusChecks(ctx context.Context, owner, repo, branch string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks", owner, repo, branch)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// License gets the contents of a repository's license if one is detected.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/licenses/#get-the-license-for-a-repository
+func (s *RepositoriesService) License(ctx context.Context, owner, repo string) (*RepositoryLicense, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/license", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := &RepositoryLicense{}
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// GetPullRequestReviewEnforcement gets pull request review enforcement of a protected branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-pull-request-review-protection
+func (s *RepositoriesService) GetPullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string) (*PullRequestReviewsEnforcement, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
+
+       r := new(PullRequestReviewsEnforcement)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// UpdatePullRequestReviewEnforcement patches pull request review enforcement of a protected branch.
+// It requires admin access and branch protection to be enabled.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-pull-request-review-protection
+func (s *RepositoriesService) UpdatePullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string, patch *PullRequestReviewsEnforcementUpdate) (*PullRequestReviewsEnforcement, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch)
+       req, err := s.client.NewRequest("PATCH", u, patch)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
+
+       r := new(PullRequestReviewsEnforcement)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, err
+}
+
+// DisableDismissalRestrictions disables dismissal restrictions of a protected branch.
+// It requires admin access and branch protection to be enabled.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-pull-request-review-protection
+func (s *RepositoriesService) DisableDismissalRestrictions(ctx context.Context, owner, repo, branch string) (*PullRequestReviewsEnforcement, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch)
+
+       data := new(struct {
+               DismissalRestrictionsRequest `json:"dismissal_restrictions"`
+       })
+
+       req, err := s.client.NewRequest("PATCH", u, data)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches
+       req.Header.Set("Accept", mediaTypeRequiredApprovingReviewsPreview)
+
+       r := new(PullRequestReviewsEnforcement)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, err
+}
+
+// RemovePullRequestReviewEnforcement removes pull request enforcement of a protected branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-pull-request-review-protection
+func (s *RepositoriesService) RemovePullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// GetAdminEnforcement gets admin enforcement information of a protected branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-admin-branch-protection
+func (s *RepositoriesService) GetAdminEnforcement(ctx context.Context, owner, repo, branch string) (*AdminEnforcement, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(AdminEnforcement)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// AddAdminEnforcement adds admin enforcement to a protected branch.
+// It requires admin access and branch protection to be enabled.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#set-admin-branch-protection
+func (s *RepositoriesService) AddAdminEnforcement(ctx context.Context, owner, repo, branch string) (*AdminEnforcement, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch)
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(AdminEnforcement)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, err
+}
+
+// RemoveAdminEnforcement removes admin enforcement from a protected branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-admin-branch-protection
+func (s *RepositoriesService) RemoveAdminEnforcement(ctx context.Context, owner, repo, branch string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// repositoryTopics represents a collection of repository topics.
+type repositoryTopics struct {
+       Names []string `json:"names"`
+}
+
+// ListAllTopics lists topics for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-all-repository-topics
+func (s *RepositoriesService) ListAllTopics(ctx context.Context, owner, repo string) ([]string, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/topics", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeTopicsPreview)
+
+       topics := new(repositoryTopics)
+       resp, err := s.client.Do(ctx, req, topics)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return topics.Names, resp, nil
+}
+
+// ReplaceAllTopics replaces topics for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#replace-all-repository-topics
+func (s *RepositoriesService) ReplaceAllTopics(ctx context.Context, owner, repo string, topics []string) ([]string, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/topics", owner, repo)
+       t := &repositoryTopics{
+               Names: topics,
+       }
+       if t.Names == nil {
+               t.Names = []string{}
+       }
+       req, err := s.client.NewRequest("PUT", u, t)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeTopicsPreview)
+
+       t = new(repositoryTopics)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t.Names, resp, nil
+}
+
+// ListApps lists the GitHub apps that have push access to a given protected branch.
+// It requires the GitHub apps to have `write` access to the `content` permission.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-apps-with-access-to-the-protected-branch
+func (s *RepositoriesService) ListApps(ctx context.Context, owner, repo, branch string) ([]*App, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/restrictions/apps", owner, repo, branch)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var apps []*App
+       resp, err := s.client.Do(ctx, req, &apps)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return apps, resp, nil
+}
+
+// ReplaceAppRestrictions replaces the apps that have push access to a given protected branch.
+// It removes all apps that previously had push access and grants push access to the new list of apps.
+// It requires the GitHub apps to have `write` access to the `content` permission.
+//
+// Note: The list of users, apps, and teams in total is limited to 100 items.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#set-app-access-restrictions
+func (s *RepositoriesService) ReplaceAppRestrictions(ctx context.Context, owner, repo, branch string, slug []string) ([]*App, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/restrictions/apps", owner, repo, branch)
+       req, err := s.client.NewRequest("PUT", u, slug)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var apps []*App
+       resp, err := s.client.Do(ctx, req, &apps)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return apps, resp, nil
+}
+
+// AddAppRestrictions grants the specified apps push access to a given protected branch.
+// It requires the GitHub apps to have `write` access to the `content` permission.
+//
+// Note: The list of users, apps, and teams in total is limited to 100 items.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#add-app-access-restrictions
+func (s *RepositoriesService) AddAppRestrictions(ctx context.Context, owner, repo, branch string, slug []string) ([]*App, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/restrictions/apps", owner, repo, branch)
+       req, err := s.client.NewRequest("POST", u, slug)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var apps []*App
+       resp, err := s.client.Do(ctx, req, &apps)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return apps, resp, nil
+}
+
+// RemoveAppRestrictions removes the ability of an app to push to this branch.
+// It requires the GitHub apps to have `write` access to the `content` permission.
+//
+// Note: The list of users, apps, and teams in total is limited to 100 items.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#remove-app-access-restrictions
+func (s *RepositoriesService) RemoveAppRestrictions(ctx context.Context, owner, repo, branch string, slug []string) ([]*App, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/restrictions/apps", owner, repo, branch)
+       req, err := s.client.NewRequest("DELETE", u, slug)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var apps []*App
+       resp, err := s.client.Do(ctx, req, &apps)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return apps, resp, nil
+}
+
+// TransferRequest represents a request to transfer a repository.
+type TransferRequest struct {
+       NewOwner string  `json:"new_owner"`
+       TeamID   []int64 `json:"team_ids,omitempty"`
+}
+
+// Transfer transfers a repository from one account or organization to another.
+//
+// This method might return an *AcceptedError and a status code of
+// 202. This is because this is the status that GitHub returns to signify that
+// it has now scheduled the transfer of the repository in a background task.
+// A follow up request, after a delay of a second or so, should result
+// in a successful request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#transfer-a-repository
+func (s *RepositoriesService) Transfer(ctx context.Context, owner, repo string, transfer TransferRequest) (*Repository, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/transfer", owner, repo)
+
+       req, err := s.client.NewRequest("POST", u, &transfer)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(Repository)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
+
+// DispatchRequestOptions represents a request to trigger a repository_dispatch event.
+type DispatchRequestOptions struct {
+       // EventType is a custom webhook event name. (Required.)
+       EventType string `json:"event_type"`
+       // ClientPayload is a custom JSON payload with extra information about the webhook event.
+       // Defaults to an empty JSON object.
+       ClientPayload *json.RawMessage `json:"client_payload,omitempty"`
+}
+
+// Dispatch triggers a repository_dispatch event in a GitHub Actions workflow.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-repository-dispatch-event
+func (s *RepositoriesService) Dispatch(ctx context.Context, owner, repo string, opts DispatchRequestOptions) (*Repository, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/dispatches", owner, repo)
+
+       req, err := s.client.NewRequest("POST", u, &opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(Repository)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return r, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_collaborators.go b/vendor/github.com/google/go-github/v37/github/repos_collaborators.go
new file mode 100644 (file)
index 0000000..ccb97a1
--- /dev/null
@@ -0,0 +1,154 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ListCollaboratorsOptions specifies the optional parameters to the
+// RepositoriesService.ListCollaborators method.
+type ListCollaboratorsOptions struct {
+       // Affiliation specifies how collaborators should be filtered by their affiliation.
+       // Possible values are:
+       //     outside - All outside collaborators of an organization-owned repository
+       //     direct - All collaborators with permissions to an organization-owned repository,
+       //              regardless of organization membership status
+       //     all - All collaborators the authenticated user can see
+       //
+       // Default value is "all".
+       Affiliation string `url:"affiliation,omitempty"`
+
+       ListOptions
+}
+
+// CollaboratorInvitation represents an invitation created when adding a collaborator.
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/collaborators/#response-when-a-new-invitation-is-created
+type CollaboratorInvitation struct {
+       ID          *int64      `json:"id,omitempty"`
+       Repo        *Repository `json:"repository,omitempty"`
+       Invitee     *User       `json:"invitee,omitempty"`
+       Inviter     *User       `json:"inviter,omitempty"`
+       Permissions *string     `json:"permissions,omitempty"`
+       CreatedAt   *Timestamp  `json:"created_at,omitempty"`
+       URL         *string     `json:"url,omitempty"`
+       HTMLURL     *string     `json:"html_url,omitempty"`
+}
+
+// ListCollaborators lists the GitHub users that have access to the repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-repository-collaborators
+func (s *RepositoriesService) ListCollaborators(ctx context.Context, owner, repo string, opts *ListCollaboratorsOptions) ([]*User, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/collaborators", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var users []*User
+       resp, err := s.client.Do(ctx, req, &users)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return users, resp, nil
+}
+
+// IsCollaborator checks whether the specified GitHub user has collaborator
+// access to the given repo.
+// Note: This will return false if the user is not a collaborator OR the user
+// is not a GitHub user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#check-if-a-user-is-a-repository-collaborator
+func (s *RepositoriesService) IsCollaborator(ctx context.Context, owner, repo, user string) (bool, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+
+       resp, err := s.client.Do(ctx, req, nil)
+       isCollab, err := parseBoolResponse(err)
+       return isCollab, resp, err
+}
+
+// RepositoryPermissionLevel represents the permission level an organization
+// member has for a given repository.
+type RepositoryPermissionLevel struct {
+       // Possible values: "admin", "write", "read", "none"
+       Permission *string `json:"permission,omitempty"`
+
+       User *User `json:"user,omitempty"`
+}
+
+// GetPermissionLevel retrieves the specific permission level a collaborator has for a given repository.
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-repository-permissions-for-a-user
+func (s *RepositoriesService) GetPermissionLevel(ctx context.Context, owner, repo, user string) (*RepositoryPermissionLevel, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/collaborators/%v/permission", owner, repo, user)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       rpl := new(RepositoryPermissionLevel)
+       resp, err := s.client.Do(ctx, req, rpl)
+       if err != nil {
+               return nil, resp, err
+       }
+       return rpl, resp, nil
+}
+
+// RepositoryAddCollaboratorOptions specifies the optional parameters to the
+// RepositoriesService.AddCollaborator method.
+type RepositoryAddCollaboratorOptions struct {
+       // Permission specifies the permission to grant the user on this repository.
+       // Possible values are:
+       //     pull - team members can pull, but not push to or administer this repository
+       //     push - team members can pull and push, but not administer this repository
+       //     admin - team members can pull, push and administer this repository
+       //     maintain - team members can manage the repository without access to sensitive or destructive actions.
+       //     triage - team members can proactively manage issues and pull requests without write access.
+       //
+       // Default value is "push". This option is only valid for organization-owned repositories.
+       Permission string `json:"permission,omitempty"`
+}
+
+// AddCollaborator sends an invitation to the specified GitHub user
+// to become a collaborator to the given repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#add-a-repository-collaborator
+func (s *RepositoriesService) AddCollaborator(ctx context.Context, owner, repo, user string, opts *RepositoryAddCollaboratorOptions) (*CollaboratorInvitation, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+       acr := new(CollaboratorInvitation)
+       resp, err := s.client.Do(ctx, req, acr)
+       if err != nil {
+               return nil, resp, err
+       }
+       return acr, resp, nil
+}
+
+// RemoveCollaborator removes the specified GitHub user as collaborator from the given repo.
+// Note: Does not return error if a valid user that is not a collaborator is removed.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#remove-a-repository-collaborator
+func (s *RepositoriesService) RemoveCollaborator(ctx context.Context, owner, repo, user string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_comments.go b/vendor/github.com/google/go-github/v37/github/repos_comments.go
new file mode 100644 (file)
index 0000000..912eeba
--- /dev/null
@@ -0,0 +1,162 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// RepositoryComment represents a comment for a commit, file, or line in a repository.
+type RepositoryComment struct {
+       HTMLURL   *string    `json:"html_url,omitempty"`
+       URL       *string    `json:"url,omitempty"`
+       ID        *int64     `json:"id,omitempty"`
+       NodeID    *string    `json:"node_id,omitempty"`
+       CommitID  *string    `json:"commit_id,omitempty"`
+       User      *User      `json:"user,omitempty"`
+       Reactions *Reactions `json:"reactions,omitempty"`
+       CreatedAt *time.Time `json:"created_at,omitempty"`
+       UpdatedAt *time.Time `json:"updated_at,omitempty"`
+
+       // User-mutable fields
+       Body *string `json:"body"`
+       // User-initialized fields
+       Path     *string `json:"path,omitempty"`
+       Position *int    `json:"position,omitempty"`
+}
+
+func (r RepositoryComment) String() string {
+       return Stringify(r)
+}
+
+// ListComments lists all the comments for the repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-commit-comments-for-a-repository
+func (s *RepositoriesService) ListComments(ctx context.Context, owner, repo string, opts *ListOptions) ([]*RepositoryComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/comments", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var comments []*RepositoryComment
+       resp, err := s.client.Do(ctx, req, &comments)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comments, resp, nil
+}
+
+// ListCommitComments lists all the comments for a given commit SHA.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-commit-comments
+func (s *RepositoriesService) ListCommitComments(ctx context.Context, owner, repo, sha string, opts *ListOptions) ([]*RepositoryComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v/comments", owner, repo, sha)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       var comments []*RepositoryComment
+       resp, err := s.client.Do(ctx, req, &comments)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comments, resp, nil
+}
+
+// CreateComment creates a comment for the given commit.
+// Note: GitHub allows for comments to be created for non-existing files and positions.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-commit-comment
+func (s *RepositoriesService) CreateComment(ctx context.Context, owner, repo, sha string, comment *RepositoryComment) (*RepositoryComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v/comments", owner, repo, sha)
+       req, err := s.client.NewRequest("POST", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       c := new(RepositoryComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// GetComment gets a single comment from a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-commit-comment
+func (s *RepositoriesService) GetComment(ctx context.Context, owner, repo string, id int64) (*RepositoryComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeReactionsPreview)
+
+       c := new(RepositoryComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// UpdateComment updates the body of a single comment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-a-commit-comment
+func (s *RepositoriesService) UpdateComment(ctx context.Context, owner, repo string, id int64, comment *RepositoryComment) (*RepositoryComment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id)
+       req, err := s.client.NewRequest("PATCH", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       c := new(RepositoryComment)
+       resp, err := s.client.Do(ctx, req, c)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return c, resp, nil
+}
+
+// DeleteComment deletes a single comment from a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-a-commit-comment
+func (s *RepositoriesService) DeleteComment(ctx context.Context, owner, repo string, id int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_commits.go b/vendor/github.com/google/go-github/v37/github/repos_commits.go
new file mode 100644 (file)
index 0000000..b49a5af
--- /dev/null
@@ -0,0 +1,304 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "bytes"
+       "context"
+       "fmt"
+       "net/url"
+       "time"
+)
+
+// RepositoryCommit represents a commit in a repo.
+// Note that it's wrapping a Commit, so author/committer information is in two places,
+// but contain different details about them: in RepositoryCommit "github details", in Commit - "git details".
+type RepositoryCommit struct {
+       NodeID      *string   `json:"node_id,omitempty"`
+       SHA         *string   `json:"sha,omitempty"`
+       Commit      *Commit   `json:"commit,omitempty"`
+       Author      *User     `json:"author,omitempty"`
+       Committer   *User     `json:"committer,omitempty"`
+       Parents     []*Commit `json:"parents,omitempty"`
+       HTMLURL     *string   `json:"html_url,omitempty"`
+       URL         *string   `json:"url,omitempty"`
+       CommentsURL *string   `json:"comments_url,omitempty"`
+
+       // Details about how many changes were made in this commit. Only filled in during GetCommit!
+       Stats *CommitStats `json:"stats,omitempty"`
+       // Details about which files, and how this commit touched. Only filled in during GetCommit!
+       Files []*CommitFile `json:"files,omitempty"`
+}
+
+func (r RepositoryCommit) String() string {
+       return Stringify(r)
+}
+
+// CommitStats represents the number of additions / deletions from a file in a given RepositoryCommit or GistCommit.
+type CommitStats struct {
+       Additions *int `json:"additions,omitempty"`
+       Deletions *int `json:"deletions,omitempty"`
+       Total     *int `json:"total,omitempty"`
+}
+
+func (c CommitStats) String() string {
+       return Stringify(c)
+}
+
+// CommitFile represents a file modified in a commit.
+type CommitFile struct {
+       SHA              *string `json:"sha,omitempty"`
+       Filename         *string `json:"filename,omitempty"`
+       Additions        *int    `json:"additions,omitempty"`
+       Deletions        *int    `json:"deletions,omitempty"`
+       Changes          *int    `json:"changes,omitempty"`
+       Status           *string `json:"status,omitempty"`
+       Patch            *string `json:"patch,omitempty"`
+       BlobURL          *string `json:"blob_url,omitempty"`
+       RawURL           *string `json:"raw_url,omitempty"`
+       ContentsURL      *string `json:"contents_url,omitempty"`
+       PreviousFilename *string `json:"previous_filename,omitempty"`
+}
+
+func (c CommitFile) String() string {
+       return Stringify(c)
+}
+
+// CommitsComparison is the result of comparing two commits.
+// See CompareCommits() for details.
+type CommitsComparison struct {
+       BaseCommit      *RepositoryCommit `json:"base_commit,omitempty"`
+       MergeBaseCommit *RepositoryCommit `json:"merge_base_commit,omitempty"`
+
+       // Head can be 'behind' or 'ahead'
+       Status       *string `json:"status,omitempty"`
+       AheadBy      *int    `json:"ahead_by,omitempty"`
+       BehindBy     *int    `json:"behind_by,omitempty"`
+       TotalCommits *int    `json:"total_commits,omitempty"`
+
+       Commits []*RepositoryCommit `json:"commits,omitempty"`
+
+       Files []*CommitFile `json:"files,omitempty"`
+
+       HTMLURL      *string `json:"html_url,omitempty"`
+       PermalinkURL *string `json:"permalink_url,omitempty"`
+       DiffURL      *string `json:"diff_url,omitempty"`
+       PatchURL     *string `json:"patch_url,omitempty"`
+       URL          *string `json:"url,omitempty"` // API URL.
+}
+
+func (c CommitsComparison) String() string {
+       return Stringify(c)
+}
+
+// CommitsListOptions specifies the optional parameters to the
+// RepositoriesService.ListCommits method.
+type CommitsListOptions struct {
+       // SHA or branch to start listing Commits from.
+       SHA string `url:"sha,omitempty"`
+
+       // Path that should be touched by the returned Commits.
+       Path string `url:"path,omitempty"`
+
+       // Author of by which to filter Commits.
+       Author string `url:"author,omitempty"`
+
+       // Since when should Commits be included in the response.
+       Since time.Time `url:"since,omitempty"`
+
+       // Until when should Commits be included in the response.
+       Until time.Time `url:"until,omitempty"`
+
+       ListOptions
+}
+
+// BranchCommit is the result of listing branches with commit SHA.
+type BranchCommit struct {
+       Name      *string `json:"name,omitempty"`
+       Commit    *Commit `json:"commit,omitempty"`
+       Protected *bool   `json:"protected,omitempty"`
+}
+
+// ListCommits lists the commits of a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-commits
+func (s *RepositoriesService) ListCommits(ctx context.Context, owner, repo string, opts *CommitsListOptions) ([]*RepositoryCommit, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var commits []*RepositoryCommit
+       resp, err := s.client.Do(ctx, req, &commits)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return commits, resp, nil
+}
+
+// GetCommit fetches the specified commit, including all details about it.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-single-commit
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-commit
+func (s *RepositoriesService) GetCommit(ctx context.Context, owner, repo, sha string) (*RepositoryCommit, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, sha)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       commit := new(RepositoryCommit)
+       resp, err := s.client.Do(ctx, req, commit)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return commit, resp, nil
+}
+
+// GetCommitRaw fetches the specified commit in raw (diff or patch) format.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-commit
+func (s *RepositoriesService) GetCommitRaw(ctx context.Context, owner string, repo string, sha string, opts RawOptions) (string, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, sha)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return "", nil, err
+       }
+
+       switch opts.Type {
+       case Diff:
+               req.Header.Set("Accept", mediaTypeV3Diff)
+       case Patch:
+               req.Header.Set("Accept", mediaTypeV3Patch)
+       default:
+               return "", nil, fmt.Errorf("unsupported raw type %d", opts.Type)
+       }
+
+       var buf bytes.Buffer
+       resp, err := s.client.Do(ctx, req, &buf)
+       if err != nil {
+               return "", resp, err
+       }
+
+       return buf.String(), resp, nil
+}
+
+// GetCommitSHA1 gets the SHA-1 of a commit reference. If a last-known SHA1 is
+// supplied and no new commits have occurred, a 304 Unmodified response is returned.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-commit
+func (s *RepositoriesService) GetCommitSHA1(ctx context.Context, owner, repo, ref, lastSHA string) (string, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, refURLEscape(ref))
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return "", nil, err
+       }
+       if lastSHA != "" {
+               req.Header.Set("If-None-Match", `"`+lastSHA+`"`)
+       }
+
+       req.Header.Set("Accept", mediaTypeV3SHA)
+
+       var buf bytes.Buffer
+       resp, err := s.client.Do(ctx, req, &buf)
+       if err != nil {
+               return "", resp, err
+       }
+
+       return buf.String(), resp, nil
+}
+
+// CompareCommits compares a range of commits with each other.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#compare-two-commits
+func (s *RepositoriesService) CompareCommits(ctx context.Context, owner, repo string, base, head string) (*CommitsComparison, *Response, error) {
+       escapedBase := url.QueryEscape(base)
+       escapedHead := url.QueryEscape(head)
+
+       u := fmt.Sprintf("repos/%v/%v/compare/%v...%v", owner, repo, escapedBase, escapedHead)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       comp := new(CommitsComparison)
+       resp, err := s.client.Do(ctx, req, comp)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comp, resp, nil
+}
+
+// CompareCommitsRaw compares a range of commits with each other in raw (diff or patch) format.
+//
+// Both "base" and "head" must be branch names in "repo".
+// To compare branches across other repositories in the same network as "repo",
+// use the format "<USERNAME>:branch".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#compare-two-commits
+func (s *RepositoriesService) CompareCommitsRaw(ctx context.Context, owner, repo, base, head string, opts RawOptions) (string, *Response, error) {
+       escapedBase := url.QueryEscape(base)
+       escapedHead := url.QueryEscape(head)
+
+       u := fmt.Sprintf("repos/%v/%v/compare/%v...%v", owner, repo, escapedBase, escapedHead)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return "", nil, err
+       }
+
+       switch opts.Type {
+       case Diff:
+               req.Header.Set("Accept", mediaTypeV3Diff)
+       case Patch:
+               req.Header.Set("Accept", mediaTypeV3Patch)
+       default:
+               return "", nil, fmt.Errorf("unsupported raw type %d", opts.Type)
+       }
+
+       var buf bytes.Buffer
+       resp, err := s.client.Do(ctx, req, &buf)
+       if err != nil {
+               return "", resp, err
+       }
+
+       return buf.String(), resp, nil
+}
+
+// ListBranchesHeadCommit gets all branches where the given commit SHA is the HEAD,
+// or latest commit for the branch.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-branches-for-head-commit
+func (s *RepositoriesService) ListBranchesHeadCommit(ctx context.Context, owner, repo, sha string) ([]*BranchCommit, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v/branches-where-head", owner, repo, sha)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeListPullsOrBranchesForCommitPreview)
+       var branchCommits []*BranchCommit
+       resp, err := s.client.Do(ctx, req, &branchCommits)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return branchCommits, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_community_health.go b/vendor/github.com/google/go-github/v37/github/repos_community_health.go
new file mode 100644 (file)
index 0000000..aeb4277
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// Metric represents the different fields for one file in community health files.
+type Metric struct {
+       Name    *string `json:"name"`
+       Key     *string `json:"key"`
+       URL     *string `json:"url"`
+       HTMLURL *string `json:"html_url"`
+}
+
+// CommunityHealthFiles represents the different files in the community health metrics response.
+type CommunityHealthFiles struct {
+       CodeOfConduct       *Metric `json:"code_of_conduct"`
+       Contributing        *Metric `json:"contributing"`
+       IssueTemplate       *Metric `json:"issue_template"`
+       PullRequestTemplate *Metric `json:"pull_request_template"`
+       License             *Metric `json:"license"`
+       Readme              *Metric `json:"readme"`
+}
+
+// CommunityHealthMetrics represents a response containing the community metrics of a repository.
+type CommunityHealthMetrics struct {
+       HealthPercentage *int                  `json:"health_percentage"`
+       Files            *CommunityHealthFiles `json:"files"`
+       UpdatedAt        *time.Time            `json:"updated_at"`
+}
+
+// GetCommunityHealthMetrics retrieves all the community health  metrics for a  repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-community-profile-metrics
+func (s *RepositoriesService) GetCommunityHealthMetrics(ctx context.Context, owner, repo string) (*CommunityHealthMetrics, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/community/profile", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeRepositoryCommunityHealthMetricsPreview)
+
+       metrics := &CommunityHealthMetrics{}
+       resp, err := s.client.Do(ctx, req, metrics)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return metrics, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_contents.go b/vendor/github.com/google/go-github/v37/github/repos_contents.go
new file mode 100644 (file)
index 0000000..d88ae74
--- /dev/null
@@ -0,0 +1,323 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Repository contents API methods.
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/contents/
+
+package github
+
+import (
+       "context"
+       "encoding/base64"
+       "encoding/json"
+       "errors"
+       "fmt"
+       "io"
+       "net/http"
+       "net/url"
+       "path"
+       "strings"
+)
+
+// RepositoryContent represents a file or directory in a github repository.
+type RepositoryContent struct {
+       Type *string `json:"type,omitempty"`
+       // Target is only set if the type is "symlink" and the target is not a normal file.
+       // If Target is set, Path will be the symlink path.
+       Target   *string `json:"target,omitempty"`
+       Encoding *string `json:"encoding,omitempty"`
+       Size     *int    `json:"size,omitempty"`
+       Name     *string `json:"name,omitempty"`
+       Path     *string `json:"path,omitempty"`
+       // Content contains the actual file content, which may be encoded.
+       // Callers should call GetContent which will decode the content if
+       // necessary.
+       Content     *string `json:"content,omitempty"`
+       SHA         *string `json:"sha,omitempty"`
+       URL         *string `json:"url,omitempty"`
+       GitURL      *string `json:"git_url,omitempty"`
+       HTMLURL     *string `json:"html_url,omitempty"`
+       DownloadURL *string `json:"download_url,omitempty"`
+}
+
+// RepositoryContentResponse holds the parsed response from CreateFile, UpdateFile, and DeleteFile.
+type RepositoryContentResponse struct {
+       Content *RepositoryContent `json:"content,omitempty"`
+       Commit  `json:"commit,omitempty"`
+}
+
+// RepositoryContentFileOptions specifies optional parameters for CreateFile, UpdateFile, and DeleteFile.
+type RepositoryContentFileOptions struct {
+       Message   *string       `json:"message,omitempty"`
+       Content   []byte        `json:"content,omitempty"` // unencoded
+       SHA       *string       `json:"sha,omitempty"`
+       Branch    *string       `json:"branch,omitempty"`
+       Author    *CommitAuthor `json:"author,omitempty"`
+       Committer *CommitAuthor `json:"committer,omitempty"`
+}
+
+// RepositoryContentGetOptions represents an optional ref parameter, which can be a SHA,
+// branch, or tag
+type RepositoryContentGetOptions struct {
+       Ref string `url:"ref,omitempty"`
+}
+
+// String converts RepositoryContent to a string. It's primarily for testing.
+func (r RepositoryContent) String() string {
+       return Stringify(r)
+}
+
+// GetContent returns the content of r, decoding it if necessary.
+func (r *RepositoryContent) GetContent() (string, error) {
+       var encoding string
+       if r.Encoding != nil {
+               encoding = *r.Encoding
+       }
+
+       switch encoding {
+       case "base64":
+               if r.Content == nil {
+                       return "", errors.New("malformed response: base64 encoding of null content")
+               }
+               c, err := base64.StdEncoding.DecodeString(*r.Content)
+               return string(c), err
+       case "":
+               if r.Content == nil {
+                       return "", nil
+               }
+               return *r.Content, nil
+       default:
+               return "", fmt.Errorf("unsupported content encoding: %v", encoding)
+       }
+}
+
+// GetReadme gets the Readme file for the repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-repository-readme
+func (s *RepositoriesService) GetReadme(ctx context.Context, owner, repo string, opts *RepositoryContentGetOptions) (*RepositoryContent, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/readme", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       readme := new(RepositoryContent)
+       resp, err := s.client.Do(ctx, req, readme)
+       if err != nil {
+               return nil, resp, err
+       }
+       return readme, resp, nil
+}
+
+// DownloadContents returns an io.ReadCloser that reads the contents of the
+// specified file. This function will work with files of any size, as opposed
+// to GetContents which is limited to 1 Mb files. It is the caller's
+// responsibility to close the ReadCloser.
+//
+// It is possible for the download to result in a failed response when the
+// returned error is nil. Callers should check the returned Response status
+// code to verify the content is from a successful response.
+func (s *RepositoriesService) DownloadContents(ctx context.Context, owner, repo, filepath string, opts *RepositoryContentGetOptions) (io.ReadCloser, *Response, error) {
+       dir := path.Dir(filepath)
+       filename := path.Base(filepath)
+       _, dirContents, resp, err := s.GetContents(ctx, owner, repo, dir, opts)
+       if err != nil {
+               return nil, resp, err
+       }
+       for _, contents := range dirContents {
+               if *contents.Name == filename {
+                       if contents.DownloadURL == nil || *contents.DownloadURL == "" {
+                               return nil, resp, fmt.Errorf("No download link found for %s", filepath)
+                       }
+                       dlResp, err := s.client.client.Get(*contents.DownloadURL)
+                       if err != nil {
+                               return nil, &Response{Response: dlResp}, err
+                       }
+                       return dlResp.Body, &Response{Response: dlResp}, nil
+               }
+       }
+       return nil, resp, fmt.Errorf("No file named %s found in %s", filename, dir)
+}
+
+// DownloadContentsWithMeta is identical to DownloadContents but additionally
+// returns the RepositoryContent of the requested file. This additional data
+// is useful for future operations involving the requested file. For merely
+// reading the content of a file, DownloadContents is perfectly adequate.
+//
+// It is possible for the download to result in a failed response when the
+// returned error is nil. Callers should check the returned Response status
+// code to verify the content is from a successful response.
+func (s *RepositoriesService) DownloadContentsWithMeta(ctx context.Context, owner, repo, filepath string, opts *RepositoryContentGetOptions) (io.ReadCloser, *RepositoryContent, *Response, error) {
+       dir := path.Dir(filepath)
+       filename := path.Base(filepath)
+       _, dirContents, resp, err := s.GetContents(ctx, owner, repo, dir, opts)
+       if err != nil {
+               return nil, nil, resp, err
+       }
+       for _, contents := range dirContents {
+               if *contents.Name == filename {
+                       if contents.DownloadURL == nil || *contents.DownloadURL == "" {
+                               return nil, contents, resp, fmt.Errorf("No download link found for %s", filepath)
+                       }
+                       dlResp, err := s.client.client.Get(*contents.DownloadURL)
+                       if err != nil {
+                               return nil, contents, &Response{Response: dlResp}, err
+                       }
+                       return dlResp.Body, contents, &Response{Response: dlResp}, nil
+               }
+       }
+       return nil, nil, resp, fmt.Errorf("No file named %s found in %s", filename, dir)
+}
+
+// GetContents can return either the metadata and content of a single file
+// (when path references a file) or the metadata of all the files and/or
+// subdirectories of a directory (when path references a directory). To make it
+// easy to distinguish between both result types and to mimic the API as much
+// as possible, both result types will be returned but only one will contain a
+// value and the other will be nil.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-repository-content
+func (s *RepositoriesService) GetContents(ctx context.Context, owner, repo, path string, opts *RepositoryContentGetOptions) (fileContent *RepositoryContent, directoryContent []*RepositoryContent, resp *Response, err error) {
+       escapedPath := (&url.URL{Path: strings.TrimSuffix(path, "/")}).String()
+       u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, escapedPath)
+       u, err = addOptions(u, opts)
+       if err != nil {
+               return nil, nil, nil, err
+       }
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, nil, err
+       }
+       var rawJSON json.RawMessage
+       resp, err = s.client.Do(ctx, req, &rawJSON)
+       if err != nil {
+               return nil, nil, resp, err
+       }
+       fileUnmarshalError := json.Unmarshal(rawJSON, &fileContent)
+       if fileUnmarshalError == nil {
+               return fileContent, nil, resp, nil
+       }
+       directoryUnmarshalError := json.Unmarshal(rawJSON, &directoryContent)
+       if directoryUnmarshalError == nil {
+               return nil, directoryContent, resp, nil
+       }
+       return nil, nil, resp, fmt.Errorf("unmarshalling failed for both file and directory content: %s and %s", fileUnmarshalError, directoryUnmarshalError)
+}
+
+// CreateFile creates a new file in a repository at the given path and returns
+// the commit and file metadata.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-or-update-file-contents
+func (s *RepositoriesService) CreateFile(ctx context.Context, owner, repo, path string, opts *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+       createResponse := new(RepositoryContentResponse)
+       resp, err := s.client.Do(ctx, req, createResponse)
+       if err != nil {
+               return nil, resp, err
+       }
+       return createResponse, resp, nil
+}
+
+// UpdateFile updates a file in a repository at the given path and returns the
+// commit and file metadata. Requires the blob SHA of the file being updated.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-or-update-file-contents
+func (s *RepositoriesService) UpdateFile(ctx context.Context, owner, repo, path string, opts *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+       updateResponse := new(RepositoryContentResponse)
+       resp, err := s.client.Do(ctx, req, updateResponse)
+       if err != nil {
+               return nil, resp, err
+       }
+       return updateResponse, resp, nil
+}
+
+// DeleteFile deletes a file from a repository and returns the commit.
+// Requires the blob SHA of the file to be deleted.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-a-file
+func (s *RepositoriesService) DeleteFile(ctx context.Context, owner, repo, path string, opts *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path)
+       req, err := s.client.NewRequest("DELETE", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+       deleteResponse := new(RepositoryContentResponse)
+       resp, err := s.client.Do(ctx, req, deleteResponse)
+       if err != nil {
+               return nil, resp, err
+       }
+       return deleteResponse, resp, nil
+}
+
+// ArchiveFormat is used to define the archive type when calling GetArchiveLink.
+type ArchiveFormat string
+
+const (
+       // Tarball specifies an archive in gzipped tar format.
+       Tarball ArchiveFormat = "tarball"
+
+       // Zipball specifies an archive in zip format.
+       Zipball ArchiveFormat = "zipball"
+)
+
+// GetArchiveLink returns an URL to download a tarball or zipball archive for a
+// repository. The archiveFormat can be specified by either the github.Tarball
+// or github.Zipball constant.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/contents/#get-archive-link
+func (s *RepositoriesService) GetArchiveLink(ctx context.Context, owner, repo string, archiveformat ArchiveFormat, opts *RepositoryContentGetOptions, followRedirects bool) (*url.URL, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/%s", owner, repo, archiveformat)
+       if opts != nil && opts.Ref != "" {
+               u += fmt.Sprintf("/%s", opts.Ref)
+       }
+       resp, err := s.getArchiveLinkFromURL(ctx, u, followRedirects)
+       if err != nil {
+               return nil, nil, err
+       }
+       if resp.StatusCode != http.StatusFound {
+               return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status)
+       }
+       parsedURL, err := url.Parse(resp.Header.Get("Location"))
+       return parsedURL, newResponse(resp), err
+}
+
+func (s *RepositoriesService) getArchiveLinkFromURL(ctx context.Context, u string, followRedirects bool) (*http.Response, error) {
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       var resp *http.Response
+       // Use http.DefaultTransport if no custom Transport is configured
+       req = withContext(ctx, req)
+       if s.client.client.Transport == nil {
+               resp, err = http.DefaultTransport.RoundTrip(req)
+       } else {
+               resp, err = s.client.client.Transport.RoundTrip(req)
+       }
+       if err != nil {
+               return nil, err
+       }
+       resp.Body.Close()
+
+       // If redirect response is returned, follow it
+       if followRedirects && resp.StatusCode == http.StatusMovedPermanently {
+               u = resp.Header.Get("Location")
+               resp, err = s.getArchiveLinkFromURL(ctx, u, false)
+       }
+       return resp, err
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_deployments.go b/vendor/github.com/google/go-github/v37/github/repos_deployments.go
new file mode 100644 (file)
index 0000000..7308bce
--- /dev/null
@@ -0,0 +1,250 @@
+// Copyright 2014 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "encoding/json"
+       "fmt"
+       "strings"
+)
+
+// Deployment represents a deployment in a repo
+type Deployment struct {
+       URL           *string         `json:"url,omitempty"`
+       ID            *int64          `json:"id,omitempty"`
+       SHA           *string         `json:"sha,omitempty"`
+       Ref           *string         `json:"ref,omitempty"`
+       Task          *string         `json:"task,omitempty"`
+       Payload       json.RawMessage `json:"payload,omitempty"`
+       Environment   *string         `json:"environment,omitempty"`
+       Description   *string         `json:"description,omitempty"`
+       Creator       *User           `json:"creator,omitempty"`
+       CreatedAt     *Timestamp      `json:"created_at,omitempty"`
+       UpdatedAt     *Timestamp      `json:"updated_at,omitempty"`
+       StatusesURL   *string         `json:"statuses_url,omitempty"`
+       RepositoryURL *string         `json:"repository_url,omitempty"`
+       NodeID        *string         `json:"node_id,omitempty"`
+}
+
+// DeploymentRequest represents a deployment request
+type DeploymentRequest struct {
+       Ref                   *string     `json:"ref,omitempty"`
+       Task                  *string     `json:"task,omitempty"`
+       AutoMerge             *bool       `json:"auto_merge,omitempty"`
+       RequiredContexts      *[]string   `json:"required_contexts,omitempty"`
+       Payload               interface{} `json:"payload,omitempty"`
+       Environment           *string     `json:"environment,omitempty"`
+       Description           *string     `json:"description,omitempty"`
+       TransientEnvironment  *bool       `json:"transient_environment,omitempty"`
+       ProductionEnvironment *bool       `json:"production_environment,omitempty"`
+}
+
+// DeploymentsListOptions specifies the optional parameters to the
+// RepositoriesService.ListDeployments method.
+type DeploymentsListOptions struct {
+       // SHA of the Deployment.
+       SHA string `url:"sha,omitempty"`
+
+       // List deployments for a given ref.
+       Ref string `url:"ref,omitempty"`
+
+       // List deployments for a given task.
+       Task string `url:"task,omitempty"`
+
+       // List deployments for a given environment.
+       Environment string `url:"environment,omitempty"`
+
+       ListOptions
+}
+
+// ListDeployments lists the deployments of a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-deployments
+func (s *RepositoriesService) ListDeployments(ctx context.Context, owner, repo string, opts *DeploymentsListOptions) ([]*Deployment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/deployments", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var deployments []*Deployment
+       resp, err := s.client.Do(ctx, req, &deployments)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return deployments, resp, nil
+}
+
+// GetDeployment returns a single deployment of a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-deployment
+func (s *RepositoriesService) GetDeployment(ctx context.Context, owner, repo string, deploymentID int64) (*Deployment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/deployments/%v", owner, repo, deploymentID)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       deployment := new(Deployment)
+       resp, err := s.client.Do(ctx, req, deployment)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return deployment, resp, nil
+}
+
+// CreateDeployment creates a new deployment for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-deployment
+func (s *RepositoriesService) CreateDeployment(ctx context.Context, owner, repo string, request *DeploymentRequest) (*Deployment, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/deployments", owner, repo)
+
+       req, err := s.client.NewRequest("POST", u, request)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       d := new(Deployment)
+       resp, err := s.client.Do(ctx, req, d)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return d, resp, nil
+}
+
+// DeleteDeployment deletes an existing deployment for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-a-deployment
+func (s *RepositoriesService) DeleteDeployment(ctx context.Context, owner, repo string, deploymentID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/deployments/%v", owner, repo, deploymentID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeploymentStatus represents the status of a
+// particular deployment.
+type DeploymentStatus struct {
+       ID *int64 `json:"id,omitempty"`
+       // State is the deployment state.
+       // Possible values are: "pending", "success", "failure", "error",
+       // "inactive", "in_progress", "queued".
+       State          *string    `json:"state,omitempty"`
+       Creator        *User      `json:"creator,omitempty"`
+       Description    *string    `json:"description,omitempty"`
+       Environment    *string    `json:"environment,omitempty"`
+       NodeID         *string    `json:"node_id,omitempty"`
+       CreatedAt      *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt      *Timestamp `json:"updated_at,omitempty"`
+       TargetURL      *string    `json:"target_url,omitempty"`
+       DeploymentURL  *string    `json:"deployment_url,omitempty"`
+       RepositoryURL  *string    `json:"repository_url,omitempty"`
+       EnvironmentURL *string    `json:"environment_url,omitempty"`
+       LogURL         *string    `json:"log_url,omitempty"`
+       URL            *string    `json:"url,omitempty"`
+}
+
+// DeploymentStatusRequest represents a deployment request
+type DeploymentStatusRequest struct {
+       State          *string `json:"state,omitempty"`
+       LogURL         *string `json:"log_url,omitempty"`
+       Description    *string `json:"description,omitempty"`
+       Environment    *string `json:"environment,omitempty"`
+       EnvironmentURL *string `json:"environment_url,omitempty"`
+       AutoInactive   *bool   `json:"auto_inactive,omitempty"`
+}
+
+// ListDeploymentStatuses lists the statuses of a given deployment of a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-deployment-statuses
+func (s *RepositoriesService) ListDeploymentStatuses(ctx context.Context, owner, repo string, deployment int64, opts *ListOptions) ([]*DeploymentStatus, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses", owner, repo, deployment)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       var statuses []*DeploymentStatus
+       resp, err := s.client.Do(ctx, req, &statuses)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return statuses, resp, nil
+}
+
+// GetDeploymentStatus returns a single deployment status of a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-deployment-status
+func (s *RepositoriesService) GetDeploymentStatus(ctx context.Context, owner, repo string, deploymentID, deploymentStatusID int64) (*DeploymentStatus, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses/%v", owner, repo, deploymentID, deploymentStatusID)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       d := new(DeploymentStatus)
+       resp, err := s.client.Do(ctx, req, d)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return d, resp, nil
+}
+
+// CreateDeploymentStatus creates a new status for a deployment.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-deployment-status
+func (s *RepositoriesService) CreateDeploymentStatus(ctx context.Context, owner, repo string, deployment int64, request *DeploymentStatusRequest) (*DeploymentStatus, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses", owner, repo, deployment)
+
+       req, err := s.client.NewRequest("POST", u, request)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       d := new(DeploymentStatus)
+       resp, err := s.client.Do(ctx, req, d)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return d, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_environments.go b/vendor/github.com/google/go-github/v37/github/repos_environments.go
new file mode 100644 (file)
index 0000000..25cb005
--- /dev/null
@@ -0,0 +1,191 @@
+// Copyright 2021 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "encoding/json"
+       "fmt"
+)
+
+// Environment represents a single environment in a repository.
+type Environment struct {
+       Owner                  *string         `json:"owner,omitempty"`
+       Repo                   *string         `json:"repo,omitempty"`
+       EnvironmentName        *string         `json:"environment_name,omitempty"`
+       WaitTimer              *int            `json:"wait_timer,omitempty"`
+       Reviewers              []*EnvReviewers `json:"reviewers,omitempty"`
+       DeploymentBranchPolicy *BranchPolicy   `json:"deployment_branch_policy,omitempty"`
+       // Return/response only values
+       ID              *int64            `json:"id,omitempty"`
+       NodeID          *string           `json:"node_id,omitempty"`
+       Name            *string           `json:"name,omitempty"`
+       URL             *string           `json:"url,omitempty"`
+       HTMLURL         *string           `json:"html_url,omitempty"`
+       CreatedAt       *Timestamp        `json:"created_at,omitempty"`
+       UpdatedAt       *Timestamp        `json:"updated_at,omitempty"`
+       ProtectionRules []*ProtectionRule `json:"protection_rules,omitempty"`
+}
+
+// EnvReviewers represents a single environment reviewer entry.
+type EnvReviewers struct {
+       Type *string `json:"type,omitempty"`
+       ID   *int64  `json:"id,omitempty"`
+}
+
+// BranchPolicy represents the options for whether a branch deployment policy is applied to this environment.
+type BranchPolicy struct {
+       ProtectedBranches    *bool `json:"protected_branches,omitempty"`
+       CustomBranchPolicies *bool `json:"custom_branch_policies,omitempty"`
+}
+
+// EnvResponse represents the slightly different format of response that comes back when you list an environment.
+type EnvResponse struct {
+       TotalCount   *int           `json:"total_count,omitempty"`
+       Environments []*Environment `json:"environments,omitempty"`
+}
+
+// ProtectionRule represents a single protection rule applied to the environment.
+type ProtectionRule struct {
+       ID        *int64              `json:"id,omitempty"`
+       NodeID    *string             `json:"node_id,omitempty"`
+       Type      *string             `json:"type,omitempty"`
+       WaitTimer *int                `json:"wait_timer,omitempty"`
+       Reviewers []*RequiredReviewer `json:"reviewers,omitempty"`
+}
+
+// RequiredReviewer represents a required reviewer.
+type RequiredReviewer struct {
+       Type     *string     `json:"type,omitempty"`
+       Reviewer interface{} `json:"reviewer,omitempty"`
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+// This helps us handle the fact that RequiredReviewer can have either a User or Team type reviewer field.
+func (r *RequiredReviewer) UnmarshalJSON(data []byte) error {
+       type aliasReviewer RequiredReviewer
+       var reviewer aliasReviewer
+       if err := json.Unmarshal(data, &reviewer); err != nil {
+               return err
+       }
+
+       r.Type = reviewer.Type
+
+       switch *reviewer.Type {
+       case "User":
+               reviewer.Reviewer = &User{}
+               if err := json.Unmarshal(data, &reviewer); err != nil {
+                       return err
+               }
+               r.Reviewer = reviewer.Reviewer
+       case "Team":
+               reviewer.Reviewer = &Team{}
+               if err := json.Unmarshal(data, &reviewer); err != nil {
+                       return err
+               }
+               r.Reviewer = reviewer.Reviewer
+       default:
+               r.Type = nil
+               r.Reviewer = nil
+               return fmt.Errorf("reviewer.Type is %T, not a string of 'User' or 'Team', unable to unmarshal", reviewer.Type)
+       }
+
+       return nil
+}
+
+// ListEnvironments lists all environments for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/repos#get-all-environments
+func (s *RepositoriesService) ListEnvironments(ctx context.Context, owner, repo string) (*EnvResponse, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/environments", owner, repo)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var list *EnvResponse
+       resp, err := s.client.Do(ctx, req, &list)
+       if err != nil {
+               return nil, resp, err
+       }
+       return list, resp, nil
+}
+
+// GetEnvironment get a single environment for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/repos#get-an-environment
+func (s *RepositoriesService) GetEnvironment(ctx context.Context, owner, repo, name string) (*Environment, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/environments/%s", owner, repo, name)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var env *Environment
+       resp, err := s.client.Do(ctx, req, &env)
+       if err != nil {
+               return nil, resp, err
+       }
+       return env, resp, nil
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+// As the only way to clear a WaitTimer is to set it to 0, a missing WaitTimer object should default to 0, not null.
+func (c *CreateUpdateEnvironment) MarshalJSON() ([]byte, error) {
+       type Alias CreateUpdateEnvironment
+       if c.WaitTimer == nil {
+               c.WaitTimer = Int(0)
+       }
+       return json.Marshal(&struct {
+               *Alias
+       }{
+               Alias: (*Alias)(c),
+       })
+}
+
+// CreateUpdateEnvironment represents the fields required for the create/update operation
+// following the Create/Update release example.
+// See https://github.com/google/go-github/issues/992 for more information.
+// Removed omitempty here as the API expects null values for reviewers and deployment_branch_policy to clear them.
+type CreateUpdateEnvironment struct {
+       WaitTimer              *int            `json:"wait_timer"`
+       Reviewers              []*EnvReviewers `json:"reviewers"`
+       DeploymentBranchPolicy *BranchPolicy   `json:"deployment_branch_policy"`
+}
+
+// CreateUpdateEnvironment create or update a new environment for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/repos#create-or-update-an-environment
+func (s *RepositoriesService) CreateUpdateEnvironment(ctx context.Context, owner, repo, name string, environment *CreateUpdateEnvironment) (*Environment, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/environments/%s", owner, repo, name)
+
+       req, err := s.client.NewRequest("PUT", u, environment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       e := new(Environment)
+       resp, err := s.client.Do(ctx, req, e)
+       if err != nil {
+               return nil, resp, err
+       }
+       return e, resp, nil
+}
+
+// DeleteEnvironment delete an environment from a repository.
+//
+// GitHub API docs: https://docs.github.com/en/rest/reference/repos#delete-an-environment
+func (s *RepositoriesService) DeleteEnvironment(ctx context.Context, owner, repo, name string) (*Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/environments/%s", owner, repo, name)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_forks.go b/vendor/github.com/google/go-github/v37/github/repos_forks.go
new file mode 100644 (file)
index 0000000..74b9b44
--- /dev/null
@@ -0,0 +1,96 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+
+       "encoding/json"
+)
+
+// RepositoryListForksOptions specifies the optional parameters to the
+// RepositoriesService.ListForks method.
+type RepositoryListForksOptions struct {
+       // How to sort the forks list. Possible values are: newest, oldest,
+       // watchers. Default is "newest".
+       Sort string `url:"sort,omitempty"`
+
+       ListOptions
+}
+
+// ListForks lists the forks of the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-forks
+func (s *RepositoriesService) ListForks(ctx context.Context, owner, repo string, opts *RepositoryListForksOptions) ([]*Repository, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/forks", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when topics API fully launches.
+       req.Header.Set("Accept", mediaTypeTopicsPreview)
+
+       var repos []*Repository
+       resp, err := s.client.Do(ctx, req, &repos)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repos, resp, nil
+}
+
+// RepositoryCreateForkOptions specifies the optional parameters to the
+// RepositoriesService.CreateFork method.
+type RepositoryCreateForkOptions struct {
+       // The organization to fork the repository into.
+       Organization string `url:"organization,omitempty"`
+}
+
+// CreateFork creates a fork of the specified repository.
+//
+// This method might return an *AcceptedError and a status code of
+// 202. This is because this is the status that GitHub returns to signify that
+// it is now computing creating the fork in a background task. In this event,
+// the Repository value will be returned, which includes the details about the pending fork.
+// A follow up request, after a delay of a second or so, should result
+// in a successful request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-fork
+func (s *RepositoriesService) CreateFork(ctx context.Context, owner, repo string, opts *RepositoryCreateForkOptions) (*Repository, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/forks", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       fork := new(Repository)
+       resp, err := s.client.Do(ctx, req, fork)
+       if err != nil {
+               // Persist AcceptedError's metadata to the Repository object.
+               if aerr, ok := err.(*AcceptedError); ok {
+                       if err := json.Unmarshal(aerr.Raw, fork); err != nil {
+                               return fork, resp, err
+                       }
+
+                       return fork, resp, err
+               }
+               return nil, resp, err
+       }
+
+       return fork, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_hooks.go b/vendor/github.com/google/go-github/v37/github/repos_hooks.go
new file mode 100644 (file)
index 0000000..6afec86
--- /dev/null
@@ -0,0 +1,234 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// WebHookPayload represents the data that is received from GitHub when a push
+// event hook is triggered. The format of these payloads pre-date most of the
+// GitHub v3 API, so there are lots of minor incompatibilities with the types
+// defined in the rest of the API. Therefore, several types are duplicated
+// here to account for these differences.
+//
+// GitHub API docs: https://help.github.com/articles/post-receive-hooks
+type WebHookPayload struct {
+       Action       *string          `json:"action,omitempty"`
+       After        *string          `json:"after,omitempty"`
+       Before       *string          `json:"before,omitempty"`
+       Commits      []*WebHookCommit `json:"commits,omitempty"`
+       Compare      *string          `json:"compare,omitempty"`
+       Created      *bool            `json:"created,omitempty"`
+       Deleted      *bool            `json:"deleted,omitempty"`
+       Forced       *bool            `json:"forced,omitempty"`
+       HeadCommit   *WebHookCommit   `json:"head_commit,omitempty"`
+       Installation *Installation    `json:"installation,omitempty"`
+       Organization *Organization    `json:"organization,omitempty"`
+       Pusher       *User            `json:"pusher,omitempty"`
+       Ref          *string          `json:"ref,omitempty"`
+       Repo         *Repository      `json:"repository,omitempty"`
+       Sender       *User            `json:"sender,omitempty"`
+}
+
+func (w WebHookPayload) String() string {
+       return Stringify(w)
+}
+
+// WebHookCommit represents the commit variant we receive from GitHub in a
+// WebHookPayload.
+type WebHookCommit struct {
+       Added     []string       `json:"added,omitempty"`
+       Author    *WebHookAuthor `json:"author,omitempty"`
+       Committer *WebHookAuthor `json:"committer,omitempty"`
+       Distinct  *bool          `json:"distinct,omitempty"`
+       ID        *string        `json:"id,omitempty"`
+       Message   *string        `json:"message,omitempty"`
+       Modified  []string       `json:"modified,omitempty"`
+       Removed   []string       `json:"removed,omitempty"`
+       Timestamp *time.Time     `json:"timestamp,omitempty"`
+}
+
+func (w WebHookCommit) String() string {
+       return Stringify(w)
+}
+
+// WebHookAuthor represents the author or committer of a commit, as specified
+// in a WebHookCommit. The commit author may not correspond to a GitHub User.
+type WebHookAuthor struct {
+       Email    *string `json:"email,omitempty"`
+       Name     *string `json:"name,omitempty"`
+       Username *string `json:"username,omitempty"`
+}
+
+func (w WebHookAuthor) String() string {
+       return Stringify(w)
+}
+
+// Hook represents a GitHub (web and service) hook for a repository.
+type Hook struct {
+       CreatedAt    *time.Time             `json:"created_at,omitempty"`
+       UpdatedAt    *time.Time             `json:"updated_at,omitempty"`
+       URL          *string                `json:"url,omitempty"`
+       ID           *int64                 `json:"id,omitempty"`
+       Type         *string                `json:"type,omitempty"`
+       Name         *string                `json:"name,omitempty"`
+       TestURL      *string                `json:"test_url,omitempty"`
+       PingURL      *string                `json:"ping_url,omitempty"`
+       LastResponse map[string]interface{} `json:"last_response,omitempty"`
+
+       // Only the following fields are used when creating a hook.
+       // Config is required.
+       Config map[string]interface{} `json:"config,omitempty"`
+       Events []string               `json:"events,omitempty"`
+       Active *bool                  `json:"active,omitempty"`
+}
+
+func (h Hook) String() string {
+       return Stringify(h)
+}
+
+// createHookRequest is a subset of Hook and is used internally
+// by CreateHook to pass only the known fields for the endpoint.
+//
+// See https://github.com/google/go-github/issues/1015 for more
+// information.
+type createHookRequest struct {
+       // Config is required.
+       Name   string                 `json:"name"`
+       Config map[string]interface{} `json:"config,omitempty"`
+       Events []string               `json:"events,omitempty"`
+       Active *bool                  `json:"active,omitempty"`
+}
+
+// CreateHook creates a Hook for the specified repository.
+// Config is a required field.
+//
+// Note that only a subset of the hook fields are used and hook must
+// not be nil.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-repository-webhook
+func (s *RepositoriesService) CreateHook(ctx context.Context, owner, repo string, hook *Hook) (*Hook, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo)
+
+       hookReq := &createHookRequest{
+               Name:   "web",
+               Events: hook.Events,
+               Active: hook.Active,
+               Config: hook.Config,
+       }
+
+       req, err := s.client.NewRequest("POST", u, hookReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       h := new(Hook)
+       resp, err := s.client.Do(ctx, req, h)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return h, resp, nil
+}
+
+// ListHooks lists all Hooks for the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-repository-webhooks
+func (s *RepositoriesService) ListHooks(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Hook, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var hooks []*Hook
+       resp, err := s.client.Do(ctx, req, &hooks)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return hooks, resp, nil
+}
+
+// GetHook returns a single specified Hook.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-repository-webhook
+func (s *RepositoriesService) GetHook(ctx context.Context, owner, repo string, id int64) (*Hook, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+       h := new(Hook)
+       resp, err := s.client.Do(ctx, req, h)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return h, resp, nil
+}
+
+// EditHook updates a specified Hook.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-a-repository-webhook
+func (s *RepositoriesService) EditHook(ctx context.Context, owner, repo string, id int64, hook *Hook) (*Hook, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id)
+       req, err := s.client.NewRequest("PATCH", u, hook)
+       if err != nil {
+               return nil, nil, err
+       }
+       h := new(Hook)
+       resp, err := s.client.Do(ctx, req, h)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return h, resp, nil
+}
+
+// DeleteHook deletes a specified Hook.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-a-repository-webhook
+func (s *RepositoriesService) DeleteHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// PingHook triggers a 'ping' event to be sent to the Hook.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#ping-a-repository-webhook
+func (s *RepositoriesService) PingHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/hooks/%d/pings", owner, repo, id)
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// TestHook triggers a test Hook by github.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#test-the-push-repository-webhook
+func (s *RepositoriesService) TestHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/hooks/%d/tests", owner, repo, id)
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_invitations.go b/vendor/github.com/google/go-github/v37/github/repos_invitations.go
new file mode 100644 (file)
index 0000000..79dd578
--- /dev/null
@@ -0,0 +1,89 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// RepositoryInvitation represents an invitation to collaborate on a repo.
+type RepositoryInvitation struct {
+       ID      *int64      `json:"id,omitempty"`
+       Repo    *Repository `json:"repository,omitempty"`
+       Invitee *User       `json:"invitee,omitempty"`
+       Inviter *User       `json:"inviter,omitempty"`
+
+       // Permissions represents the permissions that the associated user will have
+       // on the repository. Possible values are: "read", "write", "admin".
+       Permissions *string    `json:"permissions,omitempty"`
+       CreatedAt   *Timestamp `json:"created_at,omitempty"`
+       URL         *string    `json:"url,omitempty"`
+       HTMLURL     *string    `json:"html_url,omitempty"`
+}
+
+// ListInvitations lists all currently-open repository invitations.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-repository-invitations
+func (s *RepositoriesService) ListInvitations(ctx context.Context, owner, repo string, opts *ListOptions) ([]*RepositoryInvitation, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/invitations", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       invites := []*RepositoryInvitation{}
+       resp, err := s.client.Do(ctx, req, &invites)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return invites, resp, nil
+}
+
+// DeleteInvitation deletes a repository invitation.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-a-repository-invitation
+func (s *RepositoriesService) DeleteInvitation(ctx context.Context, owner, repo string, invitationID int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/invitations/%v", owner, repo, invitationID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// UpdateInvitation updates the permissions associated with a repository
+// invitation.
+//
+// permissions represents the permissions that the associated user will have
+// on the repository. Possible values are: "read", "write", "admin".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-a-repository-invitation
+func (s *RepositoriesService) UpdateInvitation(ctx context.Context, owner, repo string, invitationID int64, permissions string) (*RepositoryInvitation, *Response, error) {
+       opts := &struct {
+               Permissions string `json:"permissions"`
+       }{Permissions: permissions}
+       u := fmt.Sprintf("repos/%v/%v/invitations/%v", owner, repo, invitationID)
+       req, err := s.client.NewRequest("PATCH", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       invite := &RepositoryInvitation{}
+       resp, err := s.client.Do(ctx, req, invite)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return invite, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_keys.go b/vendor/github.com/google/go-github/v37/github/repos_keys.go
new file mode 100644 (file)
index 0000000..3e127ae
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// The Key type is defined in users_keys.go
+
+// ListKeys lists the deploy keys for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-deploy-keys
+func (s *RepositoriesService) ListKeys(ctx context.Context, owner string, repo string, opts *ListOptions) ([]*Key, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/keys", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var keys []*Key
+       resp, err := s.client.Do(ctx, req, &keys)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return keys, resp, nil
+}
+
+// GetKey fetches a single deploy key.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-deploy-key
+func (s *RepositoriesService) GetKey(ctx context.Context, owner string, repo string, id int64) (*Key, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/keys/%v", owner, repo, id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       key := new(Key)
+       resp, err := s.client.Do(ctx, req, key)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return key, resp, nil
+}
+
+// CreateKey adds a deploy key for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-deploy-key
+func (s *RepositoriesService) CreateKey(ctx context.Context, owner string, repo string, key *Key) (*Key, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/keys", owner, repo)
+
+       req, err := s.client.NewRequest("POST", u, key)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       k := new(Key)
+       resp, err := s.client.Do(ctx, req, k)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return k, resp, nil
+}
+
+// DeleteKey deletes a deploy key.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-a-deploy-key
+func (s *RepositoriesService) DeleteKey(ctx context.Context, owner string, repo string, id int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/keys/%v", owner, repo, id)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_merging.go b/vendor/github.com/google/go-github/v37/github/repos_merging.go
new file mode 100644 (file)
index 0000000..7edda3e
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2014 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// RepositoryMergeRequest represents a request to merge a branch in a
+// repository.
+type RepositoryMergeRequest struct {
+       Base          *string `json:"base,omitempty"`
+       Head          *string `json:"head,omitempty"`
+       CommitMessage *string `json:"commit_message,omitempty"`
+}
+
+// Merge a branch in the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#merge-a-branch
+func (s *RepositoriesService) Merge(ctx context.Context, owner, repo string, request *RepositoryMergeRequest) (*RepositoryCommit, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/merges", owner, repo)
+       req, err := s.client.NewRequest("POST", u, request)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       commit := new(RepositoryCommit)
+       resp, err := s.client.Do(ctx, req, commit)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return commit, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_pages.go b/vendor/github.com/google/go-github/v37/github/repos_pages.go
new file mode 100644 (file)
index 0000000..a954e70
--- /dev/null
@@ -0,0 +1,221 @@
+// Copyright 2014 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// Pages represents a GitHub Pages site configuration.
+type Pages struct {
+       URL       *string      `json:"url,omitempty"`
+       Status    *string      `json:"status,omitempty"`
+       CNAME     *string      `json:"cname,omitempty"`
+       Custom404 *bool        `json:"custom_404,omitempty"`
+       HTMLURL   *string      `json:"html_url,omitempty"`
+       Source    *PagesSource `json:"source,omitempty"`
+}
+
+// PagesSource represents a GitHub page's source.
+type PagesSource struct {
+       Branch *string `json:"branch,omitempty"`
+       Path   *string `json:"path,omitempty"`
+}
+
+// PagesError represents a build error for a GitHub Pages site.
+type PagesError struct {
+       Message *string `json:"message,omitempty"`
+}
+
+// PagesBuild represents the build information for a GitHub Pages site.
+type PagesBuild struct {
+       URL       *string     `json:"url,omitempty"`
+       Status    *string     `json:"status,omitempty"`
+       Error     *PagesError `json:"error,omitempty"`
+       Pusher    *User       `json:"pusher,omitempty"`
+       Commit    *string     `json:"commit,omitempty"`
+       Duration  *int        `json:"duration,omitempty"`
+       CreatedAt *Timestamp  `json:"created_at,omitempty"`
+       UpdatedAt *Timestamp  `json:"updated_at,omitempty"`
+}
+
+// createPagesRequest is a subset of Pages and is used internally
+// by EnablePages to pass only the known fields for the endpoint.
+type createPagesRequest struct {
+       Source *PagesSource `json:"source,omitempty"`
+}
+
+// EnablePages enables GitHub Pages for the named repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-github-pages-site
+func (s *RepositoriesService) EnablePages(ctx context.Context, owner, repo string, pages *Pages) (*Pages, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pages", owner, repo)
+
+       pagesReq := &createPagesRequest{
+               Source: pages.Source,
+       }
+
+       req, err := s.client.NewRequest("POST", u, pagesReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req.Header.Set("Accept", mediaTypeEnablePagesAPIPreview)
+
+       enable := new(Pages)
+       resp, err := s.client.Do(ctx, req, enable)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return enable, resp, nil
+}
+
+// PagesUpdate sets up parameters needed to update a GitHub Pages site.
+type PagesUpdate struct {
+       // CNAME represents a custom domain for the repository.
+       // Leaving CNAME empty will remove the custom domain.
+       CNAME *string `json:"cname"`
+       // Source must include the branch name, and may optionally specify the subdirectory "/docs".
+       // Possible values are: "gh-pages", "master", and "master /docs".
+       Source *string `json:"source,omitempty"`
+}
+
+// UpdatePages updates GitHub Pages for the named repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-information-about-a-github-pages-site
+func (s *RepositoriesService) UpdatePages(ctx context.Context, owner, repo string, opts *PagesUpdate) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pages", owner, repo)
+
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       resp, err := s.client.Do(ctx, req, nil)
+       if err != nil {
+               return resp, err
+       }
+
+       return resp, nil
+}
+
+// DisablePages disables GitHub Pages for the named repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-a-github-pages-site
+func (s *RepositoriesService) DisablePages(ctx context.Context, owner, repo string) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pages", owner, repo)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeEnablePagesAPIPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// GetPagesInfo fetches information about a GitHub Pages site.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-github-pages-site
+func (s *RepositoriesService) GetPagesInfo(ctx context.Context, owner, repo string) (*Pages, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pages", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       site := new(Pages)
+       resp, err := s.client.Do(ctx, req, site)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return site, resp, nil
+}
+
+// ListPagesBuilds lists the builds for a GitHub Pages site.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-github-pages-builds
+func (s *RepositoriesService) ListPagesBuilds(ctx context.Context, owner, repo string, opts *ListOptions) ([]*PagesBuild, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pages/builds", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var pages []*PagesBuild
+       resp, err := s.client.Do(ctx, req, &pages)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return pages, resp, nil
+}
+
+// GetLatestPagesBuild fetches the latest build information for a GitHub pages site.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-latest-pages-build
+func (s *RepositoriesService) GetLatestPagesBuild(ctx context.Context, owner, repo string) (*PagesBuild, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pages/builds/latest", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       build := new(PagesBuild)
+       resp, err := s.client.Do(ctx, req, build)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return build, resp, nil
+}
+
+// GetPageBuild fetches the specific build information for a GitHub pages site.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-github-pages-build
+func (s *RepositoriesService) GetPageBuild(ctx context.Context, owner, repo string, id int64) (*PagesBuild, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pages/builds/%v", owner, repo, id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       build := new(PagesBuild)
+       resp, err := s.client.Do(ctx, req, build)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return build, resp, nil
+}
+
+// RequestPageBuild requests a build of a GitHub Pages site without needing to push new commit.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#request-a-github-pages-build
+func (s *RepositoriesService) RequestPageBuild(ctx context.Context, owner, repo string) (*PagesBuild, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pages/builds", owner, repo)
+       req, err := s.client.NewRequest("POST", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       build := new(PagesBuild)
+       resp, err := s.client.Do(ctx, req, build)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return build, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_prereceive_hooks.go b/vendor/github.com/google/go-github/v37/github/repos_prereceive_hooks.go
new file mode 100644 (file)
index 0000000..1ce6478
--- /dev/null
@@ -0,0 +1,110 @@
+// Copyright 2018 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// PreReceiveHook represents a GitHub pre-receive hook for a repository.
+type PreReceiveHook struct {
+       ID          *int64  `json:"id,omitempty"`
+       Name        *string `json:"name,omitempty"`
+       Enforcement *string `json:"enforcement,omitempty"`
+       ConfigURL   *string `json:"configuration_url,omitempty"`
+}
+
+func (p PreReceiveHook) String() string {
+       return Stringify(p)
+}
+
+// ListPreReceiveHooks lists all pre-receive hooks for the specified repository.
+//
+// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#list-pre-receive-hooks
+func (s *RepositoriesService) ListPreReceiveHooks(ctx context.Context, owner, repo string, opts *ListOptions) ([]*PreReceiveHook, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
+
+       var hooks []*PreReceiveHook
+       resp, err := s.client.Do(ctx, req, &hooks)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return hooks, resp, nil
+}
+
+// GetPreReceiveHook returns a single specified pre-receive hook.
+//
+// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#get-a-single-pre-receive-hook
+func (s *RepositoriesService) GetPreReceiveHook(ctx context.Context, owner, repo string, id int64) (*PreReceiveHook, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks/%d", owner, repo, id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
+
+       h := new(PreReceiveHook)
+       resp, err := s.client.Do(ctx, req, h)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return h, resp, nil
+}
+
+// UpdatePreReceiveHook updates a specified pre-receive hook.
+//
+// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#update-pre-receive-hook-enforcement
+func (s *RepositoriesService) UpdatePreReceiveHook(ctx context.Context, owner, repo string, id int64, hook *PreReceiveHook) (*PreReceiveHook, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks/%d", owner, repo, id)
+       req, err := s.client.NewRequest("PATCH", u, hook)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
+
+       h := new(PreReceiveHook)
+       resp, err := s.client.Do(ctx, req, h)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return h, resp, nil
+}
+
+// DeletePreReceiveHook deletes a specified pre-receive hook.
+//
+// GitHub API docs: https://developer.github.com/enterprise/2.13/v3/repos/pre_receive_hooks/#remove-enforcement-overrides-for-a-pre-receive-hook
+func (s *RepositoriesService) DeletePreReceiveHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/pre-receive-hooks/%d", owner, repo, id)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypePreReceiveHooksPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_projects.go b/vendor/github.com/google/go-github/v37/github/repos_projects.go
new file mode 100644 (file)
index 0000000..1938d51
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ProjectListOptions specifies the optional parameters to the
+// OrganizationsService.ListProjects and RepositoriesService.ListProjects methods.
+type ProjectListOptions struct {
+       // Indicates the state of the projects to return. Can be either open, closed, or all. Default: open
+       State string `url:"state,omitempty"`
+
+       ListOptions
+}
+
+// ListProjects lists the projects for a repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#list-repository-projects
+func (s *RepositoriesService) ListProjects(ctx context.Context, owner, repo string, opts *ProjectListOptions) ([]*Project, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/projects", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       var projects []*Project
+       resp, err := s.client.Do(ctx, req, &projects)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return projects, resp, nil
+}
+
+// CreateProject creates a GitHub Project for the specified repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#create-a-repository-project
+func (s *RepositoriesService) CreateProject(ctx context.Context, owner, repo string, opts *ProjectOptions) (*Project, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/projects", owner, repo)
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept headers when APIs fully launch.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       project := &Project{}
+       resp, err := s.client.Do(ctx, req, project)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return project, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_releases.go b/vendor/github.com/google/go-github/v37/github/repos_releases.go
new file mode 100644 (file)
index 0000000..f7b03f2
--- /dev/null
@@ -0,0 +1,405 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "errors"
+       "fmt"
+       "io"
+       "mime"
+       "net/http"
+       "os"
+       "path/filepath"
+       "strings"
+)
+
+// RepositoryRelease represents a GitHub release in a repository.
+type RepositoryRelease struct {
+       TagName                *string `json:"tag_name,omitempty"`
+       TargetCommitish        *string `json:"target_commitish,omitempty"`
+       Name                   *string `json:"name,omitempty"`
+       Body                   *string `json:"body,omitempty"`
+       Draft                  *bool   `json:"draft,omitempty"`
+       Prerelease             *bool   `json:"prerelease,omitempty"`
+       DiscussionCategoryName *string `json:"discussion_category_name,omitempty"`
+
+       // The following fields are not used in CreateRelease or EditRelease:
+       ID          *int64          `json:"id,omitempty"`
+       CreatedAt   *Timestamp      `json:"created_at,omitempty"`
+       PublishedAt *Timestamp      `json:"published_at,omitempty"`
+       URL         *string         `json:"url,omitempty"`
+       HTMLURL     *string         `json:"html_url,omitempty"`
+       AssetsURL   *string         `json:"assets_url,omitempty"`
+       Assets      []*ReleaseAsset `json:"assets,omitempty"`
+       UploadURL   *string         `json:"upload_url,omitempty"`
+       ZipballURL  *string         `json:"zipball_url,omitempty"`
+       TarballURL  *string         `json:"tarball_url,omitempty"`
+       Author      *User           `json:"author,omitempty"`
+       NodeID      *string         `json:"node_id,omitempty"`
+}
+
+func (r RepositoryRelease) String() string {
+       return Stringify(r)
+}
+
+// ReleaseAsset represents a GitHub release asset in a repository.
+type ReleaseAsset struct {
+       ID                 *int64     `json:"id,omitempty"`
+       URL                *string    `json:"url,omitempty"`
+       Name               *string    `json:"name,omitempty"`
+       Label              *string    `json:"label,omitempty"`
+       State              *string    `json:"state,omitempty"`
+       ContentType        *string    `json:"content_type,omitempty"`
+       Size               *int       `json:"size,omitempty"`
+       DownloadCount      *int       `json:"download_count,omitempty"`
+       CreatedAt          *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt          *Timestamp `json:"updated_at,omitempty"`
+       BrowserDownloadURL *string    `json:"browser_download_url,omitempty"`
+       Uploader           *User      `json:"uploader,omitempty"`
+       NodeID             *string    `json:"node_id,omitempty"`
+}
+
+func (r ReleaseAsset) String() string {
+       return Stringify(r)
+}
+
+// ListReleases lists the releases for a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-releases
+func (s *RepositoriesService) ListReleases(ctx context.Context, owner, repo string, opts *ListOptions) ([]*RepositoryRelease, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var releases []*RepositoryRelease
+       resp, err := s.client.Do(ctx, req, &releases)
+       if err != nil {
+               return nil, resp, err
+       }
+       return releases, resp, nil
+}
+
+// GetRelease fetches a single release.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-release
+func (s *RepositoriesService) GetRelease(ctx context.Context, owner, repo string, id int64) (*RepositoryRelease, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id)
+       return s.getSingleRelease(ctx, u)
+}
+
+// GetLatestRelease fetches the latest published release for the repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-the-latest-release
+func (s *RepositoriesService) GetLatestRelease(ctx context.Context, owner, repo string) (*RepositoryRelease, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/latest", owner, repo)
+       return s.getSingleRelease(ctx, u)
+}
+
+// GetReleaseByTag fetches a release with the specified tag.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-release-by-tag-name
+func (s *RepositoriesService) GetReleaseByTag(ctx context.Context, owner, repo, tag string) (*RepositoryRelease, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/tags/%s", owner, repo, tag)
+       return s.getSingleRelease(ctx, u)
+}
+
+func (s *RepositoriesService) getSingleRelease(ctx context.Context, url string) (*RepositoryRelease, *Response, error) {
+       req, err := s.client.NewRequest("GET", url, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       release := new(RepositoryRelease)
+       resp, err := s.client.Do(ctx, req, release)
+       if err != nil {
+               return nil, resp, err
+       }
+       return release, resp, nil
+}
+
+// repositoryReleaseRequest is a subset of RepositoryRelease and
+// is used internally by CreateRelease and EditRelease to pass
+// only the known fields for these endpoints.
+//
+// See https://github.com/google/go-github/issues/992 for more
+// information.
+type repositoryReleaseRequest struct {
+       TagName                *string `json:"tag_name,omitempty"`
+       TargetCommitish        *string `json:"target_commitish,omitempty"`
+       Name                   *string `json:"name,omitempty"`
+       Body                   *string `json:"body,omitempty"`
+       Draft                  *bool   `json:"draft,omitempty"`
+       Prerelease             *bool   `json:"prerelease,omitempty"`
+       DiscussionCategoryName *string `json:"discussion_category_name,omitempty"`
+}
+
+// CreateRelease adds a new release for a repository.
+//
+// Note that only a subset of the release fields are used.
+// See RepositoryRelease for more information.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-release
+func (s *RepositoriesService) CreateRelease(ctx context.Context, owner, repo string, release *RepositoryRelease) (*RepositoryRelease, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases", owner, repo)
+
+       releaseReq := &repositoryReleaseRequest{
+               TagName:                release.TagName,
+               TargetCommitish:        release.TargetCommitish,
+               Name:                   release.Name,
+               Body:                   release.Body,
+               Draft:                  release.Draft,
+               Prerelease:             release.Prerelease,
+               DiscussionCategoryName: release.DiscussionCategoryName,
+       }
+
+       req, err := s.client.NewRequest("POST", u, releaseReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(RepositoryRelease)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+       return r, resp, nil
+}
+
+// EditRelease edits a repository release.
+//
+// Note that only a subset of the release fields are used.
+// See RepositoryRelease for more information.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-a-release
+func (s *RepositoriesService) EditRelease(ctx context.Context, owner, repo string, id int64, release *RepositoryRelease) (*RepositoryRelease, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id)
+
+       releaseReq := &repositoryReleaseRequest{
+               TagName:                release.TagName,
+               TargetCommitish:        release.TargetCommitish,
+               Name:                   release.Name,
+               Body:                   release.Body,
+               Draft:                  release.Draft,
+               Prerelease:             release.Prerelease,
+               DiscussionCategoryName: release.DiscussionCategoryName,
+       }
+
+       req, err := s.client.NewRequest("PATCH", u, releaseReq)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       r := new(RepositoryRelease)
+       resp, err := s.client.Do(ctx, req, r)
+       if err != nil {
+               return nil, resp, err
+       }
+       return r, resp, nil
+}
+
+// DeleteRelease delete a single release from a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-a-release
+func (s *RepositoriesService) DeleteRelease(ctx context.Context, owner, repo string, id int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListReleaseAssets lists the release's assets.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-release-assets
+func (s *RepositoriesService) ListReleaseAssets(ctx context.Context, owner, repo string, id int64, opts *ListOptions) ([]*ReleaseAsset, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/%d/assets", owner, repo, id)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var assets []*ReleaseAsset
+       resp, err := s.client.Do(ctx, req, &assets)
+       if err != nil {
+               return nil, resp, err
+       }
+       return assets, resp, nil
+}
+
+// GetReleaseAsset fetches a single release asset.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-release-asset
+func (s *RepositoriesService) GetReleaseAsset(ctx context.Context, owner, repo string, id int64) (*ReleaseAsset, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       asset := new(ReleaseAsset)
+       resp, err := s.client.Do(ctx, req, asset)
+       if err != nil {
+               return nil, resp, err
+       }
+       return asset, resp, nil
+}
+
+// DownloadReleaseAsset downloads a release asset or returns a redirect URL.
+//
+// DownloadReleaseAsset returns an io.ReadCloser that reads the contents of the
+// specified release asset. It is the caller's responsibility to close the ReadCloser.
+// If a redirect is returned, the redirect URL will be returned as a string instead
+// of the io.ReadCloser. Exactly one of rc and redirectURL will be zero.
+//
+// followRedirectsClient can be passed to download the asset from a redirected
+// location. Passing http.DefaultClient is recommended unless special circumstances
+// exist, but it's possible to pass any http.Client. If nil is passed the
+// redirectURL will be returned instead.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-release-asset
+func (s *RepositoriesService) DownloadReleaseAsset(ctx context.Context, owner, repo string, id int64, followRedirectsClient *http.Client) (rc io.ReadCloser, redirectURL string, err error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, "", err
+       }
+       req.Header.Set("Accept", defaultMediaType)
+
+       s.client.clientMu.Lock()
+       defer s.client.clientMu.Unlock()
+
+       var loc string
+       saveRedirect := s.client.client.CheckRedirect
+       s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
+               loc = req.URL.String()
+               return errors.New("disable redirect")
+       }
+       defer func() { s.client.client.CheckRedirect = saveRedirect }()
+
+       req = withContext(ctx, req)
+       resp, err := s.client.client.Do(req)
+       if err != nil {
+               if !strings.Contains(err.Error(), "disable redirect") {
+                       return nil, "", err
+               }
+               if followRedirectsClient != nil {
+                       rc, err := s.downloadReleaseAssetFromURL(ctx, followRedirectsClient, loc)
+                       return rc, "", err
+               }
+               return nil, loc, nil // Intentionally return no error with valid redirect URL.
+       }
+
+       if err := CheckResponse(resp); err != nil {
+               resp.Body.Close()
+               return nil, "", err
+       }
+
+       return resp.Body, "", nil
+}
+
+func (s *RepositoriesService) downloadReleaseAssetFromURL(ctx context.Context, followRedirectsClient *http.Client, url string) (rc io.ReadCloser, err error) {
+       req, err := http.NewRequest("GET", url, nil)
+       if err != nil {
+               return nil, err
+       }
+       req = withContext(ctx, req)
+       req.Header.Set("Accept", "*/*")
+       resp, err := followRedirectsClient.Do(req)
+       if err != nil {
+               return nil, err
+       }
+       if err := CheckResponse(resp); err != nil {
+               resp.Body.Close()
+               return nil, err
+       }
+       return resp.Body, nil
+}
+
+// EditReleaseAsset edits a repository release asset.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#update-a-release-asset
+func (s *RepositoriesService) EditReleaseAsset(ctx context.Context, owner, repo string, id int64, release *ReleaseAsset) (*ReleaseAsset, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id)
+
+       req, err := s.client.NewRequest("PATCH", u, release)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       asset := new(ReleaseAsset)
+       resp, err := s.client.Do(ctx, req, asset)
+       if err != nil {
+               return nil, resp, err
+       }
+       return asset, resp, nil
+}
+
+// DeleteReleaseAsset delete a single release asset from a repository.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#delete-a-release-asset
+func (s *RepositoriesService) DeleteReleaseAsset(ctx context.Context, owner, repo string, id int64) (*Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+       return s.client.Do(ctx, req, nil)
+}
+
+// UploadReleaseAsset creates an asset by uploading a file into a release repository.
+// To upload assets that cannot be represented by an os.File, call NewUploadRequest directly.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#upload-a-release-asset
+func (s *RepositoriesService) UploadReleaseAsset(ctx context.Context, owner, repo string, id int64, opts *UploadOptions, file *os.File) (*ReleaseAsset, *Response, error) {
+       u := fmt.Sprintf("repos/%s/%s/releases/%d/assets", owner, repo, id)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       stat, err := file.Stat()
+       if err != nil {
+               return nil, nil, err
+       }
+       if stat.IsDir() {
+               return nil, nil, errors.New("the asset to upload can't be a directory")
+       }
+
+       mediaType := mime.TypeByExtension(filepath.Ext(file.Name()))
+       if opts.MediaType != "" {
+               mediaType = opts.MediaType
+       }
+
+       req, err := s.client.NewUploadRequest(u, file, stat.Size(), mediaType)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       asset := new(ReleaseAsset)
+       resp, err := s.client.Do(ctx, req, asset)
+       if err != nil {
+               return nil, resp, err
+       }
+       return asset, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_stats.go b/vendor/github.com/google/go-github/v37/github/repos_stats.go
new file mode 100644 (file)
index 0000000..73f0a67
--- /dev/null
@@ -0,0 +1,226 @@
+// Copyright 2014 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// ContributorStats represents a contributor to a repository and their
+// weekly contributions to a given repo.
+type ContributorStats struct {
+       Author *Contributor   `json:"author,omitempty"`
+       Total  *int           `json:"total,omitempty"`
+       Weeks  []*WeeklyStats `json:"weeks,omitempty"`
+}
+
+func (c ContributorStats) String() string {
+       return Stringify(c)
+}
+
+// WeeklyStats represents the number of additions, deletions and commits
+// a Contributor made in a given week.
+type WeeklyStats struct {
+       Week      *Timestamp `json:"w,omitempty"`
+       Additions *int       `json:"a,omitempty"`
+       Deletions *int       `json:"d,omitempty"`
+       Commits   *int       `json:"c,omitempty"`
+}
+
+func (w WeeklyStats) String() string {
+       return Stringify(w)
+}
+
+// ListContributorsStats gets a repo's contributor list with additions,
+// deletions and commit counts.
+//
+// If this is the first time these statistics are requested for the given
+// repository, this method will return an *AcceptedError and a status code of
+// 202. This is because this is the status that GitHub returns to signify that
+// it is now computing the requested statistics. A follow up request, after a
+// delay of a second or so, should result in a successful request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-all-contributor-commit-activity
+func (s *RepositoriesService) ListContributorsStats(ctx context.Context, owner, repo string) ([]*ContributorStats, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/stats/contributors", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var contributorStats []*ContributorStats
+       resp, err := s.client.Do(ctx, req, &contributorStats)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return contributorStats, resp, nil
+}
+
+// WeeklyCommitActivity represents the weekly commit activity for a repository.
+// The days array is a group of commits per day, starting on Sunday.
+type WeeklyCommitActivity struct {
+       Days  []int      `json:"days,omitempty"`
+       Total *int       `json:"total,omitempty"`
+       Week  *Timestamp `json:"week,omitempty"`
+}
+
+func (w WeeklyCommitActivity) String() string {
+       return Stringify(w)
+}
+
+// ListCommitActivity returns the last year of commit activity
+// grouped by week. The days array is a group of commits per day,
+// starting on Sunday.
+//
+// If this is the first time these statistics are requested for the given
+// repository, this method will return an *AcceptedError and a status code of
+// 202. This is because this is the status that GitHub returns to signify that
+// it is now computing the requested statistics. A follow up request, after a
+// delay of a second or so, should result in a successful request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-the-last-year-of-commit-activity
+func (s *RepositoriesService) ListCommitActivity(ctx context.Context, owner, repo string) ([]*WeeklyCommitActivity, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/stats/commit_activity", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var weeklyCommitActivity []*WeeklyCommitActivity
+       resp, err := s.client.Do(ctx, req, &weeklyCommitActivity)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return weeklyCommitActivity, resp, nil
+}
+
+// ListCodeFrequency returns a weekly aggregate of the number of additions and
+// deletions pushed to a repository. Returned WeeklyStats will contain
+// additions and deletions, but not total commits.
+//
+// If this is the first time these statistics are requested for the given
+// repository, this method will return an *AcceptedError and a status code of
+// 202. This is because this is the status that GitHub returns to signify that
+// it is now computing the requested statistics. A follow up request, after a
+// delay of a second or so, should result in a successful request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-the-weekly-commit-activity
+func (s *RepositoriesService) ListCodeFrequency(ctx context.Context, owner, repo string) ([]*WeeklyStats, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/stats/code_frequency", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var weeks [][]int
+       resp, err := s.client.Do(ctx, req, &weeks)
+
+       // convert int slices into WeeklyStats
+       var stats []*WeeklyStats
+       for _, week := range weeks {
+               if len(week) != 3 {
+                       continue
+               }
+               stat := &WeeklyStats{
+                       Week:      &Timestamp{time.Unix(int64(week[0]), 0)},
+                       Additions: Int(week[1]),
+                       Deletions: Int(week[2]),
+               }
+               stats = append(stats, stat)
+       }
+
+       return stats, resp, err
+}
+
+// RepositoryParticipation is the number of commits by everyone
+// who has contributed to the repository (including the owner)
+// as well as the number of commits by the owner themself.
+type RepositoryParticipation struct {
+       All   []int `json:"all,omitempty"`
+       Owner []int `json:"owner,omitempty"`
+}
+
+func (r RepositoryParticipation) String() string {
+       return Stringify(r)
+}
+
+// ListParticipation returns the total commit counts for the 'owner'
+// and total commit counts in 'all'. 'all' is everyone combined,
+// including the 'owner' in the last 52 weeks. If you’d like to get
+// the commit counts for non-owners, you can subtract 'all' from 'owner'.
+//
+// The array order is oldest week (index 0) to most recent week.
+//
+// If this is the first time these statistics are requested for the given
+// repository, this method will return an *AcceptedError and a status code of
+// 202. This is because this is the status that GitHub returns to signify that
+// it is now computing the requested statistics. A follow up request, after a
+// delay of a second or so, should result in a successful request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-the-weekly-commit-count
+func (s *RepositoriesService) ListParticipation(ctx context.Context, owner, repo string) (*RepositoryParticipation, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/stats/participation", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       participation := new(RepositoryParticipation)
+       resp, err := s.client.Do(ctx, req, participation)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return participation, resp, nil
+}
+
+// PunchCard represents the number of commits made during a given hour of a
+// day of the week.
+type PunchCard struct {
+       Day     *int // Day of the week (0-6: =Sunday - Saturday).
+       Hour    *int // Hour of day (0-23).
+       Commits *int // Number of commits.
+}
+
+// ListPunchCard returns the number of commits per hour in each day.
+//
+// If this is the first time these statistics are requested for the given
+// repository, this method will return an *AcceptedError and a status code of
+// 202. This is because this is the status that GitHub returns to signify that
+// it is now computing the requested statistics. A follow up request, after a
+// delay of a second or so, should result in a successful request.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-the-hourly-commit-count-for-each-day
+func (s *RepositoriesService) ListPunchCard(ctx context.Context, owner, repo string) ([]*PunchCard, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/stats/punch_card", owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var results [][]int
+       resp, err := s.client.Do(ctx, req, &results)
+
+       // convert int slices into Punchcards
+       var cards []*PunchCard
+       for _, result := range results {
+               if len(result) != 3 {
+                       continue
+               }
+               card := &PunchCard{
+                       Day:     Int(result[0]),
+                       Hour:    Int(result[1]),
+                       Commits: Int(result[2]),
+               }
+               cards = append(cards, card)
+       }
+
+       return cards, resp, err
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_statuses.go b/vendor/github.com/google/go-github/v37/github/repos_statuses.go
new file mode 100644 (file)
index 0000000..32929ba
--- /dev/null
@@ -0,0 +1,130 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// RepoStatus represents the status of a repository at a particular reference.
+type RepoStatus struct {
+       ID     *int64  `json:"id,omitempty"`
+       NodeID *string `json:"node_id,omitempty"`
+       URL    *string `json:"url,omitempty"`
+
+       // State is the current state of the repository. Possible values are:
+       // pending, success, error, or failure.
+       State *string `json:"state,omitempty"`
+
+       // TargetURL is the URL of the page representing this status. It will be
+       // linked from the GitHub UI to allow users to see the source of the status.
+       TargetURL *string `json:"target_url,omitempty"`
+
+       // Description is a short high level summary of the status.
+       Description *string `json:"description,omitempty"`
+
+       // A string label to differentiate this status from the statuses of other systems.
+       Context *string `json:"context,omitempty"`
+
+       Creator   *User      `json:"creator,omitempty"`
+       CreatedAt *time.Time `json:"created_at,omitempty"`
+       UpdatedAt *time.Time `json:"updated_at,omitempty"`
+}
+
+func (r RepoStatus) String() string {
+       return Stringify(r)
+}
+
+// ListStatuses lists the statuses of a repository at the specified
+// reference. ref can be a SHA, a branch name, or a tag name.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-commit-statuses-for-a-reference
+func (s *RepositoriesService) ListStatuses(ctx context.Context, owner, repo, ref string, opts *ListOptions) ([]*RepoStatus, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v/statuses", owner, repo, refURLEscape(ref))
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var statuses []*RepoStatus
+       resp, err := s.client.Do(ctx, req, &statuses)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return statuses, resp, nil
+}
+
+// CreateStatus creates a new status for a repository at the specified
+// reference. Ref can be a SHA, a branch name, or a tag name.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#create-a-commit-status
+func (s *RepositoriesService) CreateStatus(ctx context.Context, owner, repo, ref string, status *RepoStatus) (*RepoStatus, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/statuses/%v", owner, repo, refURLEscape(ref))
+       req, err := s.client.NewRequest("POST", u, status)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       repoStatus := new(RepoStatus)
+       resp, err := s.client.Do(ctx, req, repoStatus)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repoStatus, resp, nil
+}
+
+// CombinedStatus represents the combined status of a repository at a particular reference.
+type CombinedStatus struct {
+       // State is the combined state of the repository. Possible values are:
+       // failure, pending, or success.
+       State *string `json:"state,omitempty"`
+
+       Name       *string       `json:"name,omitempty"`
+       SHA        *string       `json:"sha,omitempty"`
+       TotalCount *int          `json:"total_count,omitempty"`
+       Statuses   []*RepoStatus `json:"statuses,omitempty"`
+
+       CommitURL     *string `json:"commit_url,omitempty"`
+       RepositoryURL *string `json:"repository_url,omitempty"`
+}
+
+func (s CombinedStatus) String() string {
+       return Stringify(s)
+}
+
+// GetCombinedStatus returns the combined status of a repository at the specified
+// reference. ref can be a SHA, a branch name, or a tag name.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-the-combined-status-for-a-specific-reference
+func (s *RepositoriesService) GetCombinedStatus(ctx context.Context, owner, repo, ref string, opts *ListOptions) (*CombinedStatus, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/commits/%v/status", owner, repo, refURLEscape(ref))
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       status := new(CombinedStatus)
+       resp, err := s.client.Do(ctx, req, status)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return status, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/repos_traffic.go b/vendor/github.com/google/go-github/v37/github/repos_traffic.go
new file mode 100644 (file)
index 0000000..e372fb5
--- /dev/null
@@ -0,0 +1,141 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// TrafficReferrer represent information about traffic from a referrer .
+type TrafficReferrer struct {
+       Referrer *string `json:"referrer,omitempty"`
+       Count    *int    `json:"count,omitempty"`
+       Uniques  *int    `json:"uniques,omitempty"`
+}
+
+// TrafficPath represent information about the traffic on a path of the repo.
+type TrafficPath struct {
+       Path    *string `json:"path,omitempty"`
+       Title   *string `json:"title,omitempty"`
+       Count   *int    `json:"count,omitempty"`
+       Uniques *int    `json:"uniques,omitempty"`
+}
+
+// TrafficData represent information about a specific timestamp in views or clones list.
+type TrafficData struct {
+       Timestamp *Timestamp `json:"timestamp,omitempty"`
+       Count     *int       `json:"count,omitempty"`
+       Uniques   *int       `json:"uniques,omitempty"`
+}
+
+// TrafficViews represent information about the number of views in the last 14 days.
+type TrafficViews struct {
+       Views   []*TrafficData `json:"views,omitempty"`
+       Count   *int           `json:"count,omitempty"`
+       Uniques *int           `json:"uniques,omitempty"`
+}
+
+// TrafficClones represent information about the number of clones in the last 14 days.
+type TrafficClones struct {
+       Clones  []*TrafficData `json:"clones,omitempty"`
+       Count   *int           `json:"count,omitempty"`
+       Uniques *int           `json:"uniques,omitempty"`
+}
+
+// TrafficBreakdownOptions specifies the parameters to methods that support breakdown per day or week.
+// Can be one of: day, week. Default: day.
+type TrafficBreakdownOptions struct {
+       Per string `url:"per,omitempty"`
+}
+
+// ListTrafficReferrers list the top 10 referrers over the last 14 days.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-top-referral-sources
+func (s *RepositoriesService) ListTrafficReferrers(ctx context.Context, owner, repo string) ([]*TrafficReferrer, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/traffic/popular/referrers", owner, repo)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var trafficReferrers []*TrafficReferrer
+       resp, err := s.client.Do(ctx, req, &trafficReferrers)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return trafficReferrers, resp, nil
+}
+
+// ListTrafficPaths list the top 10 popular content over the last 14 days.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-top-referral-paths
+func (s *RepositoriesService) ListTrafficPaths(ctx context.Context, owner, repo string) ([]*TrafficPath, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/traffic/popular/paths", owner, repo)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var paths []*TrafficPath
+       resp, err := s.client.Do(ctx, req, &paths)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return paths, resp, nil
+}
+
+// ListTrafficViews get total number of views for the last 14 days and breaks it down either per day or week.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-page-views
+func (s *RepositoriesService) ListTrafficViews(ctx context.Context, owner, repo string, opts *TrafficBreakdownOptions) (*TrafficViews, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/traffic/views", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       trafficViews := new(TrafficViews)
+       resp, err := s.client.Do(ctx, req, &trafficViews)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return trafficViews, resp, nil
+}
+
+// ListTrafficClones get total number of clones for the last 14 days and breaks it down either per day or week for the last 14 days.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-repository-clones
+func (s *RepositoriesService) ListTrafficClones(ctx context.Context, owner, repo string, opts *TrafficBreakdownOptions) (*TrafficClones, *Response, error) {
+       u := fmt.Sprintf("repos/%v/%v/traffic/clones", owner, repo)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       trafficClones := new(TrafficClones)
+       resp, err := s.client.Do(ctx, req, &trafficClones)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return trafficClones, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/search.go b/vendor/github.com/google/go-github/v37/github/search.go
new file mode 100644 (file)
index 0000000..19aa892
--- /dev/null
@@ -0,0 +1,298 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "strconv"
+
+       qs "github.com/google/go-querystring/query"
+)
+
+// SearchService provides access to the search related functions
+// in the GitHub API.
+//
+// Each method takes a query string defining the search keywords and any search qualifiers.
+// For example, when searching issues, the query "gopher is:issue language:go" will search
+// for issues containing the word "gopher" in Go repositories. The method call
+//   opts :=  &github.SearchOptions{Sort: "created", Order: "asc"}
+//   cl.Search.Issues(ctx, "gopher is:issue language:go", opts)
+// will search for such issues, sorting by creation date in ascending order
+// (i.e., oldest first).
+//
+// If query includes multiple conditions, it MUST NOT include "+" as the condition separator.
+// You have to use " " as the separator instead.
+// For example, querying with "language:c++" and "leveldb", then query should be
+// "language:c++ leveldb" but not "language:c+++leveldb".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/search/
+type SearchService service
+
+// SearchOptions specifies optional parameters to the SearchService methods.
+type SearchOptions struct {
+       // How to sort the search results. Possible values are:
+       //   - for repositories: stars, fork, updated
+       //   - for commits: author-date, committer-date
+       //   - for code: indexed
+       //   - for issues: comments, created, updated
+       //   - for users: followers, repositories, joined
+       //
+       // Default is to sort by best match.
+       Sort string `url:"sort,omitempty"`
+
+       // Sort order if sort parameter is provided. Possible values are: asc,
+       // desc. Default is desc.
+       Order string `url:"order,omitempty"`
+
+       // Whether to retrieve text match metadata with a query
+       TextMatch bool `url:"-"`
+
+       ListOptions
+}
+
+// Common search parameters.
+type searchParameters struct {
+       Query        string
+       RepositoryID *int64 // Sent if non-nil.
+}
+
+// RepositoriesSearchResult represents the result of a repositories search.
+type RepositoriesSearchResult struct {
+       Total             *int          `json:"total_count,omitempty"`
+       IncompleteResults *bool         `json:"incomplete_results,omitempty"`
+       Repositories      []*Repository `json:"items,omitempty"`
+}
+
+// Repositories searches repositories via various criteria.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#search-repositories
+func (s *SearchService) Repositories(ctx context.Context, query string, opts *SearchOptions) (*RepositoriesSearchResult, *Response, error) {
+       result := new(RepositoriesSearchResult)
+       resp, err := s.search(ctx, "repositories", &searchParameters{Query: query}, opts, result)
+       return result, resp, err
+}
+
+// TopicsSearchResult represents the result of a topics search.
+type TopicsSearchResult struct {
+       Total             *int           `json:"total_count,omitempty"`
+       IncompleteResults *bool          `json:"incomplete_results,omitempty"`
+       Topics            []*TopicResult `json:"items,omitempty"`
+}
+
+type TopicResult struct {
+       Name             *string    `json:"name,omitempty"`
+       DisplayName      *string    `json:"display_name,omitempty"`
+       ShortDescription *string    `json:"short_description,omitempty"`
+       Description      *string    `json:"description,omitempty"`
+       CreatedBy        *string    `json:"created_by,omitempty"`
+       CreatedAt        *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt        *string    `json:"updated_at,omitempty"`
+       Featured         *bool      `json:"featured,omitempty"`
+       Curated          *bool      `json:"curated,omitempty"`
+       Score            *float64   `json:"score,omitempty"`
+}
+
+// Topics finds topics via various criteria. Results are sorted by best match.
+// Please see https://help.github.com/en/articles/searching-topics for more
+// information about search qualifiers.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#search-topics
+func (s *SearchService) Topics(ctx context.Context, query string, opts *SearchOptions) (*TopicsSearchResult, *Response, error) {
+       result := new(TopicsSearchResult)
+       resp, err := s.search(ctx, "topics", &searchParameters{Query: query}, opts, result)
+       return result, resp, err
+}
+
+// CommitsSearchResult represents the result of a commits search.
+type CommitsSearchResult struct {
+       Total             *int            `json:"total_count,omitempty"`
+       IncompleteResults *bool           `json:"incomplete_results,omitempty"`
+       Commits           []*CommitResult `json:"items,omitempty"`
+}
+
+// CommitResult represents a commit object as returned in commit search endpoint response.
+type CommitResult struct {
+       SHA         *string   `json:"sha,omitempty"`
+       Commit      *Commit   `json:"commit,omitempty"`
+       Author      *User     `json:"author,omitempty"`
+       Committer   *User     `json:"committer,omitempty"`
+       Parents     []*Commit `json:"parents,omitempty"`
+       HTMLURL     *string   `json:"html_url,omitempty"`
+       URL         *string   `json:"url,omitempty"`
+       CommentsURL *string   `json:"comments_url,omitempty"`
+
+       Repository *Repository `json:"repository,omitempty"`
+       Score      *float64    `json:"score,omitempty"`
+}
+
+// Commits searches commits via various criteria.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#search-commits
+func (s *SearchService) Commits(ctx context.Context, query string, opts *SearchOptions) (*CommitsSearchResult, *Response, error) {
+       result := new(CommitsSearchResult)
+       resp, err := s.search(ctx, "commits", &searchParameters{Query: query}, opts, result)
+       return result, resp, err
+}
+
+// IssuesSearchResult represents the result of an issues search.
+type IssuesSearchResult struct {
+       Total             *int     `json:"total_count,omitempty"`
+       IncompleteResults *bool    `json:"incomplete_results,omitempty"`
+       Issues            []*Issue `json:"items,omitempty"`
+}
+
+// Issues searches issues via various criteria.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#search-issues-and-pull-requests
+func (s *SearchService) Issues(ctx context.Context, query string, opts *SearchOptions) (*IssuesSearchResult, *Response, error) {
+       result := new(IssuesSearchResult)
+       resp, err := s.search(ctx, "issues", &searchParameters{Query: query}, opts, result)
+       return result, resp, err
+}
+
+// UsersSearchResult represents the result of a users search.
+type UsersSearchResult struct {
+       Total             *int    `json:"total_count,omitempty"`
+       IncompleteResults *bool   `json:"incomplete_results,omitempty"`
+       Users             []*User `json:"items,omitempty"`
+}
+
+// Users searches users via various criteria.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#search-users
+func (s *SearchService) Users(ctx context.Context, query string, opts *SearchOptions) (*UsersSearchResult, *Response, error) {
+       result := new(UsersSearchResult)
+       resp, err := s.search(ctx, "users", &searchParameters{Query: query}, opts, result)
+       return result, resp, err
+}
+
+// Match represents a single text match.
+type Match struct {
+       Text    *string `json:"text,omitempty"`
+       Indices []int   `json:"indices,omitempty"`
+}
+
+// TextMatch represents a text match for a SearchResult
+type TextMatch struct {
+       ObjectURL  *string  `json:"object_url,omitempty"`
+       ObjectType *string  `json:"object_type,omitempty"`
+       Property   *string  `json:"property,omitempty"`
+       Fragment   *string  `json:"fragment,omitempty"`
+       Matches    []*Match `json:"matches,omitempty"`
+}
+
+func (tm TextMatch) String() string {
+       return Stringify(tm)
+}
+
+// CodeSearchResult represents the result of a code search.
+type CodeSearchResult struct {
+       Total             *int          `json:"total_count,omitempty"`
+       IncompleteResults *bool         `json:"incomplete_results,omitempty"`
+       CodeResults       []*CodeResult `json:"items,omitempty"`
+}
+
+// CodeResult represents a single search result.
+type CodeResult struct {
+       Name        *string      `json:"name,omitempty"`
+       Path        *string      `json:"path,omitempty"`
+       SHA         *string      `json:"sha,omitempty"`
+       HTMLURL     *string      `json:"html_url,omitempty"`
+       Repository  *Repository  `json:"repository,omitempty"`
+       TextMatches []*TextMatch `json:"text_matches,omitempty"`
+}
+
+func (c CodeResult) String() string {
+       return Stringify(c)
+}
+
+// Code searches code via various criteria.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#search-code
+func (s *SearchService) Code(ctx context.Context, query string, opts *SearchOptions) (*CodeSearchResult, *Response, error) {
+       result := new(CodeSearchResult)
+       resp, err := s.search(ctx, "code", &searchParameters{Query: query}, opts, result)
+       return result, resp, err
+}
+
+// LabelsSearchResult represents the result of a code search.
+type LabelsSearchResult struct {
+       Total             *int           `json:"total_count,omitempty"`
+       IncompleteResults *bool          `json:"incomplete_results,omitempty"`
+       Labels            []*LabelResult `json:"items,omitempty"`
+}
+
+// LabelResult represents a single search result.
+type LabelResult struct {
+       ID          *int64   `json:"id,omitempty"`
+       URL         *string  `json:"url,omitempty"`
+       Name        *string  `json:"name,omitempty"`
+       Color       *string  `json:"color,omitempty"`
+       Default     *bool    `json:"default,omitempty"`
+       Description *string  `json:"description,omitempty"`
+       Score       *float64 `json:"score,omitempty"`
+}
+
+func (l LabelResult) String() string {
+       return Stringify(l)
+}
+
+// Labels searches labels in the repository with ID repoID via various criteria.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#search-labels
+func (s *SearchService) Labels(ctx context.Context, repoID int64, query string, opts *SearchOptions) (*LabelsSearchResult, *Response, error) {
+       result := new(LabelsSearchResult)
+       resp, err := s.search(ctx, "labels", &searchParameters{RepositoryID: &repoID, Query: query}, opts, result)
+       return result, resp, err
+}
+
+// Helper function that executes search queries against different
+// GitHub search types (repositories, commits, code, issues, users, labels)
+//
+// If searchParameters.Query includes multiple condition, it MUST NOT include "+" as condition separator.
+// For example, querying with "language:c++" and "leveldb", then searchParameters.Query should be "language:c++ leveldb" but not "language:c+++leveldb".
+func (s *SearchService) search(ctx context.Context, searchType string, parameters *searchParameters, opts *SearchOptions, result interface{}) (*Response, error) {
+       params, err := qs.Values(opts)
+       if err != nil {
+               return nil, err
+       }
+       if parameters.RepositoryID != nil {
+               params.Set("repository_id", strconv.FormatInt(*parameters.RepositoryID, 10))
+       }
+       params.Set("q", parameters.Query)
+       u := fmt.Sprintf("search/%s?%s", searchType, params.Encode())
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       switch {
+       case searchType == "commits":
+               // Accept header for search commits preview endpoint
+               // TODO: remove custom Accept header when this API fully launches.
+               req.Header.Set("Accept", mediaTypeCommitSearchPreview)
+       case searchType == "topics":
+               // Accept header for search repositories based on topics preview endpoint
+               // TODO: remove custom Accept header when this API fully launches.
+               req.Header.Set("Accept", mediaTypeTopicsPreview)
+       case searchType == "repositories":
+               // Accept header for search repositories based on topics preview endpoint
+               // TODO: remove custom Accept header when this API fully launches.
+               req.Header.Set("Accept", mediaTypeTopicsPreview)
+       case searchType == "issues":
+               // Accept header for search issues based on reactions preview endpoint
+               // TODO: remove custom Accept header when this API fully launches.
+               req.Header.Set("Accept", mediaTypeReactionsPreview)
+       case opts != nil && opts.TextMatch:
+               // Accept header defaults to "application/vnd.github.v3+json"
+               // We change it here to fetch back text-match metadata
+               req.Header.Set("Accept", "application/vnd.github.v3.text-match+json")
+       }
+
+       return s.client.Do(ctx, req, result)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/strings.go b/vendor/github.com/google/go-github/v37/github/strings.go
new file mode 100644 (file)
index 0000000..5611b96
--- /dev/null
@@ -0,0 +1,96 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "bytes"
+       "fmt"
+       "io"
+
+       "reflect"
+)
+
+var timestampType = reflect.TypeOf(Timestamp{})
+
+// Stringify attempts to create a reasonable string representation of types in
+// the GitHub library. It does things like resolve pointers to their values
+// and omits struct fields with nil values.
+func Stringify(message interface{}) string {
+       var buf bytes.Buffer
+       v := reflect.ValueOf(message)
+       stringifyValue(&buf, v)
+       return buf.String()
+}
+
+// stringifyValue was heavily inspired by the goprotobuf library.
+
+func stringifyValue(w io.Writer, val reflect.Value) {
+       if val.Kind() == reflect.Ptr && val.IsNil() {
+               w.Write([]byte("<nil>"))
+               return
+       }
+
+       v := reflect.Indirect(val)
+
+       switch v.Kind() {
+       case reflect.String:
+               fmt.Fprintf(w, `"%s"`, v)
+       case reflect.Slice:
+               w.Write([]byte{'['})
+               for i := 0; i < v.Len(); i++ {
+                       if i > 0 {
+                               w.Write([]byte{' '})
+                       }
+
+                       stringifyValue(w, v.Index(i))
+               }
+
+               w.Write([]byte{']'})
+               return
+       case reflect.Struct:
+               if v.Type().Name() != "" {
+                       w.Write([]byte(v.Type().String()))
+               }
+
+               // special handling of Timestamp values
+               if v.Type() == timestampType {
+                       fmt.Fprintf(w, "{%s}", v.Interface())
+                       return
+               }
+
+               w.Write([]byte{'{'})
+
+               var sep bool
+               for i := 0; i < v.NumField(); i++ {
+                       fv := v.Field(i)
+                       if fv.Kind() == reflect.Ptr && fv.IsNil() {
+                               continue
+                       }
+                       if fv.Kind() == reflect.Slice && fv.IsNil() {
+                               continue
+                       }
+                       if fv.Kind() == reflect.Map && fv.IsNil() {
+                               continue
+                       }
+
+                       if sep {
+                               w.Write([]byte(", "))
+                       } else {
+                               sep = true
+                       }
+
+                       w.Write([]byte(v.Type().Field(i).Name))
+                       w.Write([]byte{':'})
+                       stringifyValue(w, fv)
+               }
+
+               w.Write([]byte{'}'})
+       default:
+               if v.CanInterface() {
+                       fmt.Fprint(w, v.Interface())
+               }
+       }
+}
diff --git a/vendor/github.com/google/go-github/v37/github/teams.go b/vendor/github.com/google/go-github/v37/github/teams.go
new file mode 100644 (file)
index 0000000..7a8a5d8
--- /dev/null
@@ -0,0 +1,856 @@
+// Copyright 2018 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "net/http"
+       "strings"
+       "time"
+)
+
+// TeamsService provides access to the team-related functions
+// in the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/
+type TeamsService service
+
+// Team represents a team within a GitHub organization. Teams are used to
+// manage access to an organization's repositories.
+type Team struct {
+       ID          *int64  `json:"id,omitempty"`
+       NodeID      *string `json:"node_id,omitempty"`
+       Name        *string `json:"name,omitempty"`
+       Description *string `json:"description,omitempty"`
+       URL         *string `json:"url,omitempty"`
+       Slug        *string `json:"slug,omitempty"`
+
+       // Permission specifies the default permission for repositories owned by the team.
+       Permission *string `json:"permission,omitempty"`
+
+       // Permissions identifies the permissions that a team has on a given
+       // repository. This is only populated when calling Repositories.ListTeams.
+       Permissions map[string]bool `json:"permissions,omitempty"`
+
+       // Privacy identifies the level of privacy this team should have.
+       // Possible values are:
+       //     secret - only visible to organization owners and members of this team
+       //     closed - visible to all members of this organization
+       // Default is "secret".
+       Privacy *string `json:"privacy,omitempty"`
+
+       MembersCount    *int          `json:"members_count,omitempty"`
+       ReposCount      *int          `json:"repos_count,omitempty"`
+       Organization    *Organization `json:"organization,omitempty"`
+       MembersURL      *string       `json:"members_url,omitempty"`
+       RepositoriesURL *string       `json:"repositories_url,omitempty"`
+       Parent          *Team         `json:"parent,omitempty"`
+
+       // LDAPDN is only available in GitHub Enterprise and when the team
+       // membership is synchronized with LDAP.
+       LDAPDN *string `json:"ldap_dn,omitempty"`
+}
+
+func (t Team) String() string {
+       return Stringify(t)
+}
+
+// Invitation represents a team member's invitation status.
+type Invitation struct {
+       ID     *int64  `json:"id,omitempty"`
+       NodeID *string `json:"node_id,omitempty"`
+       Login  *string `json:"login,omitempty"`
+       Email  *string `json:"email,omitempty"`
+       // Role can be one of the values - 'direct_member', 'admin', 'billing_manager', 'hiring_manager', or 'reinstate'.
+       Role              *string    `json:"role,omitempty"`
+       CreatedAt         *time.Time `json:"created_at,omitempty"`
+       Inviter           *User      `json:"inviter,omitempty"`
+       TeamCount         *int       `json:"team_count,omitempty"`
+       InvitationTeamURL *string    `json:"invitation_team_url,omitempty"`
+       FailedAt          *Timestamp `json:"failed_at,omitempty"`
+       FailedReason      *string    `json:"failed_reason,omitempty"`
+}
+
+func (i Invitation) String() string {
+       return Stringify(i)
+}
+
+// ListTeams lists all of the teams for an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-teams
+func (s *TeamsService) ListTeams(ctx context.Context, org string, opts *ListOptions) ([]*Team, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var teams []*Team
+       resp, err := s.client.Do(ctx, req, &teams)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teams, resp, nil
+}
+
+// GetTeamByID fetches a team, given a specified organization ID, by ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#get-a-team-by-name
+func (s *TeamsService) GetTeamByID(ctx context.Context, orgID, teamID int64) (*Team, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v", orgID, teamID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Team)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// GetTeamBySlug fetches a team, given a specified organization name, by slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#get-a-team-by-name
+func (s *TeamsService) GetTeamBySlug(ctx context.Context, org, slug string) (*Team, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v", org, slug)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Team)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// NewTeam represents a team to be created or modified.
+type NewTeam struct {
+       Name         string   `json:"name"` // Name of the team. (Required.)
+       Description  *string  `json:"description,omitempty"`
+       Maintainers  []string `json:"maintainers,omitempty"`
+       RepoNames    []string `json:"repo_names,omitempty"`
+       ParentTeamID *int64   `json:"parent_team_id,omitempty"`
+
+       // Deprecated: Permission is deprecated when creating or editing a team in an org
+       // using the new GitHub permission model. It no longer identifies the
+       // permission a team has on its repos, but only specifies the default
+       // permission a repo is initially added with. Avoid confusion by
+       // specifying a permission value when calling AddTeamRepo.
+       Permission *string `json:"permission,omitempty"`
+
+       // Privacy identifies the level of privacy this team should have.
+       // Possible values are:
+       //     secret - only visible to organization owners and members of this team
+       //     closed - visible to all members of this organization
+       // Default is "secret".
+       Privacy *string `json:"privacy,omitempty"`
+
+       // LDAPDN may be used in GitHub Enterprise when the team membership
+       // is synchronized with LDAP.
+       LDAPDN *string `json:"ldap_dn,omitempty"`
+}
+
+func (s NewTeam) String() string {
+       return Stringify(s)
+}
+
+// CreateTeam creates a new team within an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#create-a-team
+func (s *TeamsService) CreateTeam(ctx context.Context, org string, team NewTeam) (*Team, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams", org)
+       req, err := s.client.NewRequest("POST", u, team)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Team)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// newTeamNoParent is the same as NewTeam but ensures that the
+// "parent_team_id" field will be null. It is for internal use
+// only and should not be exported.
+type newTeamNoParent struct {
+       Name         string   `json:"name"`
+       Description  *string  `json:"description,omitempty"`
+       Maintainers  []string `json:"maintainers,omitempty"`
+       RepoNames    []string `json:"repo_names,omitempty"`
+       ParentTeamID *int64   `json:"parent_team_id"` // This will be "null"
+       Privacy      *string  `json:"privacy,omitempty"`
+       LDAPDN       *string  `json:"ldap_dn,omitempty"`
+}
+
+// copyNewTeamWithoutParent is used to set the "parent_team_id"
+// field to "null" after copying the other fields from a NewTeam.
+// It is for internal use only and should not be exported.
+func copyNewTeamWithoutParent(team *NewTeam) *newTeamNoParent {
+       return &newTeamNoParent{
+               Name:        team.Name,
+               Description: team.Description,
+               Maintainers: team.Maintainers,
+               RepoNames:   team.RepoNames,
+               Privacy:     team.Privacy,
+               LDAPDN:      team.LDAPDN,
+       }
+}
+
+// EditTeamByID edits a team, given an organization ID, selected by ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#update-a-team
+func (s *TeamsService) EditTeamByID(ctx context.Context, orgID, teamID int64, team NewTeam, removeParent bool) (*Team, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v", orgID, teamID)
+
+       var req *http.Request
+       var err error
+       if removeParent {
+               teamRemoveParent := copyNewTeamWithoutParent(&team)
+               req, err = s.client.NewRequest("PATCH", u, teamRemoveParent)
+       } else {
+               req, err = s.client.NewRequest("PATCH", u, team)
+       }
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Team)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// EditTeamBySlug edits a team, given an organization name, by slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#update-a-team
+func (s *TeamsService) EditTeamBySlug(ctx context.Context, org, slug string, team NewTeam, removeParent bool) (*Team, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v", org, slug)
+
+       var req *http.Request
+       var err error
+       if removeParent {
+               teamRemoveParent := copyNewTeamWithoutParent(&team)
+               req, err = s.client.NewRequest("PATCH", u, teamRemoveParent)
+       } else {
+               req, err = s.client.NewRequest("PATCH", u, team)
+       }
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Team)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// DeleteTeamByID deletes a team referenced by ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#delete-a-team
+func (s *TeamsService) DeleteTeamByID(ctx context.Context, orgID, teamID int64) (*Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v", orgID, teamID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeleteTeamBySlug deletes a team reference by slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#delete-a-team
+func (s *TeamsService) DeleteTeamBySlug(ctx context.Context, org, slug string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v", org, slug)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListChildTeamsByParentID lists child teams for a parent team given parent ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-child-teams
+func (s *TeamsService) ListChildTeamsByParentID(ctx context.Context, orgID, teamID int64, opts *ListOptions) ([]*Team, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/teams", orgID, teamID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var teams []*Team
+       resp, err := s.client.Do(ctx, req, &teams)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teams, resp, nil
+}
+
+// ListChildTeamsByParentSlug lists child teams for a parent team given parent slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-child-teams
+func (s *TeamsService) ListChildTeamsByParentSlug(ctx context.Context, org, slug string, opts *ListOptions) ([]*Team, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/teams", org, slug)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var teams []*Team
+       resp, err := s.client.Do(ctx, req, &teams)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teams, resp, nil
+}
+
+// ListTeamReposByID lists the repositories given a team ID that the specified team has access to.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-team-repositories
+func (s *TeamsService) ListTeamReposByID(ctx context.Context, orgID, teamID int64, opts *ListOptions) ([]*Repository, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/repos", orgID, teamID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when topics API fully launches.
+       headers := []string{mediaTypeTopicsPreview}
+       req.Header.Set("Accept", strings.Join(headers, ", "))
+
+       var repos []*Repository
+       resp, err := s.client.Do(ctx, req, &repos)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repos, resp, nil
+}
+
+// ListTeamReposBySlug lists the repositories given a team slug that the specified team has access to.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-team-repositories
+func (s *TeamsService) ListTeamReposBySlug(ctx context.Context, org, slug string, opts *ListOptions) ([]*Repository, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/repos", org, slug)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when topics API fully launches.
+       headers := []string{mediaTypeTopicsPreview}
+       req.Header.Set("Accept", strings.Join(headers, ", "))
+
+       var repos []*Repository
+       resp, err := s.client.Do(ctx, req, &repos)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repos, resp, nil
+}
+
+// IsTeamRepoByID checks if a team, given its ID, manages the specified repository. If the
+// repository is managed by team, a Repository is returned which includes the
+// permissions team has for that repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#check-team-permissions-for-a-repository
+func (s *TeamsService) IsTeamRepoByID(ctx context.Context, orgID, teamID int64, owner, repo string) (*Repository, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/repos/%v/%v", orgID, teamID, owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       headers := []string{mediaTypeOrgPermissionRepo}
+       req.Header.Set("Accept", strings.Join(headers, ", "))
+
+       repository := new(Repository)
+       resp, err := s.client.Do(ctx, req, repository)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repository, resp, nil
+}
+
+// IsTeamRepoBySlug checks if a team, given its slug, manages the specified repository. If the
+// repository is managed by team, a Repository is returned which includes the
+// permissions team has for that repo.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#check-team-permissions-for-a-repository
+func (s *TeamsService) IsTeamRepoBySlug(ctx context.Context, org, slug, owner, repo string) (*Repository, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/repos/%v/%v", org, slug, owner, repo)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       headers := []string{mediaTypeOrgPermissionRepo}
+       req.Header.Set("Accept", strings.Join(headers, ", "))
+
+       repository := new(Repository)
+       resp, err := s.client.Do(ctx, req, repository)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return repository, resp, nil
+}
+
+// TeamAddTeamRepoOptions specifies the optional parameters to the
+// TeamsService.AddTeamRepo method.
+type TeamAddTeamRepoOptions struct {
+       // Permission specifies the permission to grant the team on this repository.
+       // Possible values are:
+       //     pull - team members can pull, but not push to or administer this repository
+       //     push - team members can pull and push, but not administer this repository
+       //     admin - team members can pull, push and administer this repository
+       //     maintain - team members can manage the repository without access to sensitive or destructive actions.
+       //     triage - team members can proactively manage issues and pull requests without write access.
+       //
+       // If not specified, the team's permission attribute will be used.
+       Permission string `json:"permission,omitempty"`
+}
+
+// AddTeamRepoByID adds a repository to be managed by the specified team given the team ID.
+// The specified repository must be owned by the organization to which the team
+// belongs, or a direct fork of a repository owned by the organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#add-or-update-team-repository-permissions
+func (s *TeamsService) AddTeamRepoByID(ctx context.Context, orgID, teamID int64, owner, repo string, opts *TeamAddTeamRepoOptions) (*Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/repos/%v/%v", orgID, teamID, owner, repo)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// AddTeamRepoBySlug adds a repository to be managed by the specified team given the team slug.
+// The specified repository must be owned by the organization to which the team
+// belongs, or a direct fork of a repository owned by the organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#add-or-update-team-repository-permissions
+func (s *TeamsService) AddTeamRepoBySlug(ctx context.Context, org, slug, owner, repo string, opts *TeamAddTeamRepoOptions) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/repos/%v/%v", org, slug, owner, repo)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// RemoveTeamRepoByID removes a repository from being managed by the specified
+// team given the team ID. Note that this does not delete the repository, it
+// just removes it from the team.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#remove-a-repository-from-a-team
+func (s *TeamsService) RemoveTeamRepoByID(ctx context.Context, orgID, teamID int64, owner, repo string) (*Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/repos/%v/%v", orgID, teamID, owner, repo)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// RemoveTeamRepoBySlug removes a repository from being managed by the specified
+// team given the team slug. Note that this does not delete the repository, it
+// just removes it from the team.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#remove-a-repository-from-a-team
+func (s *TeamsService) RemoveTeamRepoBySlug(ctx context.Context, org, slug, owner, repo string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/repos/%v/%v", org, slug, owner, repo)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListUserTeams lists a user's teams
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-teams-for-the-authenticated-user
+func (s *TeamsService) ListUserTeams(ctx context.Context, opts *ListOptions) ([]*Team, *Response, error) {
+       u := "user/teams"
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var teams []*Team
+       resp, err := s.client.Do(ctx, req, &teams)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teams, resp, nil
+}
+
+// ListTeamProjectsByID lists the organization projects for a team given the team ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-team-projects
+func (s *TeamsService) ListTeamProjectsByID(ctx context.Context, orgID, teamID int64) ([]*Project, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/projects", orgID, teamID)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeProjectsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       var projects []*Project
+       resp, err := s.client.Do(ctx, req, &projects)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return projects, resp, nil
+}
+
+// ListTeamProjectsBySlug lists the organization projects for a team given the team slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-team-projects
+func (s *TeamsService) ListTeamProjectsBySlug(ctx context.Context, org, slug string) ([]*Project, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/projects", org, slug)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeProjectsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       var projects []*Project
+       resp, err := s.client.Do(ctx, req, &projects)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return projects, resp, nil
+}
+
+// ReviewTeamProjectsByID checks whether a team, given its ID, has read, write, or admin
+// permissions for an organization project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#check-team-permissions-for-a-project
+func (s *TeamsService) ReviewTeamProjectsByID(ctx context.Context, orgID, teamID, projectID int64) (*Project, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/projects/%v", orgID, teamID, projectID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeProjectsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       projects := &Project{}
+       resp, err := s.client.Do(ctx, req, &projects)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return projects, resp, nil
+}
+
+// ReviewTeamProjectsBySlug checks whether a team, given its slug, has read, write, or admin
+// permissions for an organization project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#check-team-permissions-for-a-project
+func (s *TeamsService) ReviewTeamProjectsBySlug(ctx context.Context, org, slug string, projectID int64) (*Project, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/projects/%v", org, slug, projectID)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeProjectsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       projects := &Project{}
+       resp, err := s.client.Do(ctx, req, &projects)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return projects, resp, nil
+}
+
+// TeamProjectOptions specifies the optional parameters to the
+// TeamsService.AddTeamProject method.
+type TeamProjectOptions struct {
+       // Permission specifies the permission to grant to the team for this project.
+       // Possible values are:
+       //     "read" - team members can read, but not write to or administer this project.
+       //     "write" - team members can read and write, but not administer this project.
+       //     "admin" - team members can read, write and administer this project.
+       //
+       Permission *string `json:"permission,omitempty"`
+}
+
+// AddTeamProjectByID adds an organization project to a team given the team ID.
+// To add a project to a team or update the team's permission on a project, the
+// authenticated user must have admin permissions for the project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#add-or-update-team-project-permissions
+func (s *TeamsService) AddTeamProjectByID(ctx context.Context, orgID, teamID, projectID int64, opts *TeamProjectOptions) (*Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/projects/%v", orgID, teamID, projectID)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeProjectsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// AddTeamProjectBySlug adds an organization project to a team given the team slug.
+// To add a project to a team or update the team's permission on a project, the
+// authenticated user must have admin permissions for the project.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#add-or-update-team-project-permissions
+func (s *TeamsService) AddTeamProjectBySlug(ctx context.Context, org, slug string, projectID int64, opts *TeamProjectOptions) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/projects/%v", org, slug, projectID)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeProjectsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// RemoveTeamProjectByID removes an organization project from a team given team ID.
+// An organization owner or a team maintainer can remove any project from the team.
+// To remove a project from a team as an organization member, the authenticated user
+// must have "read" access to both the team and project, or "admin" access to the team
+// or project.
+// Note: This endpoint removes the project from the team, but does not delete it.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#remove-a-project-from-a-team
+func (s *TeamsService) RemoveTeamProjectByID(ctx context.Context, orgID, teamID, projectID int64) (*Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/projects/%v", orgID, teamID, projectID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeProjectsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// RemoveTeamProjectBySlug removes an organization project from a team given team slug.
+// An organization owner or a team maintainer can remove any project from the team.
+// To remove a project from a team as an organization member, the authenticated user
+// must have "read" access to both the team and project, or "admin" access to the team
+// or project.
+// Note: This endpoint removes the project from the team, but does not delete it.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#remove-a-project-from-a-team
+func (s *TeamsService) RemoveTeamProjectBySlug(ctx context.Context, org, slug string, projectID int64) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/projects/%v", org, slug, projectID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       acceptHeaders := []string{mediaTypeProjectsPreview}
+       req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// IDPGroupList represents a list of external identity provider (IDP) groups.
+type IDPGroupList struct {
+       Groups []*IDPGroup `json:"groups"`
+}
+
+// IDPGroup represents an external identity provider (IDP) group.
+type IDPGroup struct {
+       GroupID          *string `json:"group_id,omitempty"`
+       GroupName        *string `json:"group_name,omitempty"`
+       GroupDescription *string `json:"group_description,omitempty"`
+}
+
+// ListIDPGroupsInOrganization lists IDP groups available in an organization.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-idp-groups-for-an-organization
+func (s *TeamsService) ListIDPGroupsInOrganization(ctx context.Context, org string, opts *ListCursorOptions) (*IDPGroupList, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/team-sync/groups", org)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       groups := new(IDPGroupList)
+       resp, err := s.client.Do(ctx, req, groups)
+       if err != nil {
+               return nil, resp, err
+       }
+       return groups, resp, nil
+}
+
+// ListIDPGroupsForTeamByID lists IDP groups connected to a team on GitHub
+// given organization and team IDs.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-idp-groups-for-a-team
+func (s *TeamsService) ListIDPGroupsForTeamByID(ctx context.Context, orgID, teamID int64) (*IDPGroupList, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/team-sync/group-mappings", orgID, teamID)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       groups := new(IDPGroupList)
+       resp, err := s.client.Do(ctx, req, groups)
+       if err != nil {
+               return nil, resp, err
+       }
+       return groups, resp, err
+}
+
+// ListIDPGroupsForTeamBySlug lists IDP groups connected to a team on GitHub
+// given organization name and team slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-idp-groups-for-a-team
+func (s *TeamsService) ListIDPGroupsForTeamBySlug(ctx context.Context, org, slug string) (*IDPGroupList, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/team-sync/group-mappings", org, slug)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       groups := new(IDPGroupList)
+       resp, err := s.client.Do(ctx, req, groups)
+       if err != nil {
+               return nil, resp, err
+       }
+       return groups, resp, err
+}
+
+// CreateOrUpdateIDPGroupConnectionsByID creates, updates, or removes a connection
+// between a team and an IDP group given organization and team IDs.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#create-or-update-idp-group-connections
+func (s *TeamsService) CreateOrUpdateIDPGroupConnectionsByID(ctx context.Context, orgID, teamID int64, opts IDPGroupList) (*IDPGroupList, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/team-sync/group-mappings", orgID, teamID)
+
+       req, err := s.client.NewRequest("PATCH", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       groups := new(IDPGroupList)
+       resp, err := s.client.Do(ctx, req, groups)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return groups, resp, nil
+}
+
+// CreateOrUpdateIDPGroupConnectionsBySlug creates, updates, or removes a connection
+// between a team and an IDP group given organization name and team slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#create-or-update-idp-group-connections
+func (s *TeamsService) CreateOrUpdateIDPGroupConnectionsBySlug(ctx context.Context, org, slug string, opts IDPGroupList) (*IDPGroupList, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/team-sync/group-mappings", org, slug)
+
+       req, err := s.client.NewRequest("PATCH", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       groups := new(IDPGroupList)
+       resp, err := s.client.Do(ctx, req, groups)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return groups, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/teams_discussion_comments.go b/vendor/github.com/google/go-github/v37/github/teams_discussion_comments.go
new file mode 100644 (file)
index 0000000..b6c7e17
--- /dev/null
@@ -0,0 +1,242 @@
+// Copyright 2018 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// DiscussionComment represents a GitHub dicussion in a team.
+type DiscussionComment struct {
+       Author        *User      `json:"author,omitempty"`
+       Body          *string    `json:"body,omitempty"`
+       BodyHTML      *string    `json:"body_html,omitempty"`
+       BodyVersion   *string    `json:"body_version,omitempty"`
+       CreatedAt     *Timestamp `json:"created_at,omitempty"`
+       LastEditedAt  *Timestamp `json:"last_edited_at,omitempty"`
+       DiscussionURL *string    `json:"discussion_url,omitempty"`
+       HTMLURL       *string    `json:"html_url,omitempty"`
+       NodeID        *string    `json:"node_id,omitempty"`
+       Number        *int       `json:"number,omitempty"`
+       UpdatedAt     *Timestamp `json:"updated_at,omitempty"`
+       URL           *string    `json:"url,omitempty"`
+       Reactions     *Reactions `json:"reactions,omitempty"`
+}
+
+func (c DiscussionComment) String() string {
+       return Stringify(c)
+}
+
+// DiscussionCommentListOptions specifies optional parameters to the
+// TeamServices.ListComments method.
+type DiscussionCommentListOptions struct {
+       // Sorts the discussion comments by the date they were created.
+       // Accepted values are asc and desc. Default is desc.
+       Direction string `url:"direction,omitempty"`
+       ListOptions
+}
+
+// ListCommentsByID lists all comments on a team discussion by team ID.
+// Authenticated user must grant read:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-discussion-comments
+func (s *TeamsService) ListCommentsByID(ctx context.Context, orgID, teamID int64, discussionNumber int, options *DiscussionCommentListOptions) ([]*DiscussionComment, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments", orgID, teamID, discussionNumber)
+       u, err := addOptions(u, options)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var comments []*DiscussionComment
+       resp, err := s.client.Do(ctx, req, &comments)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comments, resp, nil
+}
+
+// ListCommentsBySlug lists all comments on a team discussion by team slug.
+// Authenticated user must grant read:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-discussion-comments
+func (s *TeamsService) ListCommentsBySlug(ctx context.Context, org, slug string, discussionNumber int, options *DiscussionCommentListOptions) ([]*DiscussionComment, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments", org, slug, discussionNumber)
+       u, err := addOptions(u, options)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var comments []*DiscussionComment
+       resp, err := s.client.Do(ctx, req, &comments)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return comments, resp, nil
+}
+
+// GetCommentByID gets a specific comment on a team discussion by team ID.
+// Authenticated user must grant read:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#get-a-discussion-comment
+func (s *TeamsService) GetCommentByID(ctx context.Context, orgID, teamID int64, discussionNumber, commentNumber int) (*DiscussionComment, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments/%v", orgID, teamID, discussionNumber, commentNumber)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       discussionComment := &DiscussionComment{}
+       resp, err := s.client.Do(ctx, req, discussionComment)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return discussionComment, resp, nil
+}
+
+// GetCommentBySlug gets a specific comment on a team discussion by team slug.
+// Authenticated user must grant read:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#get-a-discussion-comment
+func (s *TeamsService) GetCommentBySlug(ctx context.Context, org, slug string, discussionNumber, commentNumber int) (*DiscussionComment, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments/%v", org, slug, discussionNumber, commentNumber)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       discussionComment := &DiscussionComment{}
+       resp, err := s.client.Do(ctx, req, discussionComment)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return discussionComment, resp, nil
+}
+
+// CreateCommentByID creates a new comment on a team discussion by team ID.
+// Authenticated user must grant write:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#create-a-discussion-comment
+func (s *TeamsService) CreateCommentByID(ctx context.Context, orgID, teamID int64, discsusionNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments", orgID, teamID, discsusionNumber)
+       req, err := s.client.NewRequest("POST", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       discussionComment := &DiscussionComment{}
+       resp, err := s.client.Do(ctx, req, discussionComment)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return discussionComment, resp, nil
+}
+
+// CreateCommentBySlug creates a new comment on a team discussion by team slug.
+// Authenticated user must grant write:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#create-a-discussion-comment
+func (s *TeamsService) CreateCommentBySlug(ctx context.Context, org, slug string, discsusionNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments", org, slug, discsusionNumber)
+       req, err := s.client.NewRequest("POST", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       discussionComment := &DiscussionComment{}
+       resp, err := s.client.Do(ctx, req, discussionComment)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return discussionComment, resp, nil
+}
+
+// EditCommentByID edits the body text of a discussion comment by team ID.
+// Authenticated user must grant write:discussion scope.
+// User is allowed to edit body of a comment only.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#update-a-discussion-comment
+func (s *TeamsService) EditCommentByID(ctx context.Context, orgID, teamID int64, discussionNumber, commentNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments/%v", orgID, teamID, discussionNumber, commentNumber)
+       req, err := s.client.NewRequest("PATCH", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       discussionComment := &DiscussionComment{}
+       resp, err := s.client.Do(ctx, req, discussionComment)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return discussionComment, resp, nil
+}
+
+// EditCommentBySlug edits the body text of a discussion comment by team slug.
+// Authenticated user must grant write:discussion scope.
+// User is allowed to edit body of a comment only.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#update-a-discussion-comment
+func (s *TeamsService) EditCommentBySlug(ctx context.Context, org, slug string, discussionNumber, commentNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments/%v", org, slug, discussionNumber, commentNumber)
+       req, err := s.client.NewRequest("PATCH", u, comment)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       discussionComment := &DiscussionComment{}
+       resp, err := s.client.Do(ctx, req, discussionComment)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return discussionComment, resp, nil
+}
+
+// DeleteCommentByID deletes a comment on a team discussion by team ID.
+// Authenticated user must grant write:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#delete-a-discussion-comment
+func (s *TeamsService) DeleteCommentByID(ctx context.Context, orgID, teamID int64, discussionNumber, commentNumber int) (*Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments/%v", orgID, teamID, discussionNumber, commentNumber)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeleteCommentBySlug deletes a comment on a team discussion by team slug.
+// Authenticated user must grant write:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#delete-a-discussion-comment
+func (s *TeamsService) DeleteCommentBySlug(ctx context.Context, org, slug string, discussionNumber, commentNumber int) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments/%v", org, slug, discussionNumber, commentNumber)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/teams_discussions.go b/vendor/github.com/google/go-github/v37/github/teams_discussions.go
new file mode 100644 (file)
index 0000000..5678548
--- /dev/null
@@ -0,0 +1,247 @@
+// Copyright 2018 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// TeamDiscussion represents a GitHub dicussion in a team.
+type TeamDiscussion struct {
+       Author        *User      `json:"author,omitempty"`
+       Body          *string    `json:"body,omitempty"`
+       BodyHTML      *string    `json:"body_html,omitempty"`
+       BodyVersion   *string    `json:"body_version,omitempty"`
+       CommentsCount *int       `json:"comments_count,omitempty"`
+       CommentsURL   *string    `json:"comments_url,omitempty"`
+       CreatedAt     *Timestamp `json:"created_at,omitempty"`
+       LastEditedAt  *Timestamp `json:"last_edited_at,omitempty"`
+       HTMLURL       *string    `json:"html_url,omitempty"`
+       NodeID        *string    `json:"node_id,omitempty"`
+       Number        *int       `json:"number,omitempty"`
+       Pinned        *bool      `json:"pinned,omitempty"`
+       Private       *bool      `json:"private,omitempty"`
+       TeamURL       *string    `json:"team_url,omitempty"`
+       Title         *string    `json:"title,omitempty"`
+       UpdatedAt     *Timestamp `json:"updated_at,omitempty"`
+       URL           *string    `json:"url,omitempty"`
+       Reactions     *Reactions `json:"reactions,omitempty"`
+}
+
+func (d TeamDiscussion) String() string {
+       return Stringify(d)
+}
+
+// DiscussionListOptions specifies optional parameters to the
+// TeamServices.ListDiscussions method.
+type DiscussionListOptions struct {
+       // Sorts the discussion by the date they were created.
+       // Accepted values are asc and desc. Default is desc.
+       Direction string `url:"direction,omitempty"`
+
+       ListOptions
+}
+
+// ListDiscussionsByID lists all discussions on team's page given Organization and Team ID.
+// Authenticated user must grant read:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-discussions
+func (s *TeamsService) ListDiscussionsByID(ctx context.Context, orgID, teamID int64, opts *DiscussionListOptions) ([]*TeamDiscussion, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/discussions", orgID, teamID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var teamDiscussions []*TeamDiscussion
+       resp, err := s.client.Do(ctx, req, &teamDiscussions)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teamDiscussions, resp, nil
+}
+
+// ListDiscussionsBySlug lists all discussions on team's page given Organization name and Team's slug.
+// Authenticated user must grant read:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-discussions
+func (s *TeamsService) ListDiscussionsBySlug(ctx context.Context, org, slug string, opts *DiscussionListOptions) ([]*TeamDiscussion, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/discussions", org, slug)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var teamDiscussions []*TeamDiscussion
+       resp, err := s.client.Do(ctx, req, &teamDiscussions)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teamDiscussions, resp, nil
+}
+
+// GetDiscussionByID gets a specific discussion on a team's page given Organization and Team ID.
+// Authenticated user must grant read:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#get-a-discussion
+func (s *TeamsService) GetDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int) (*TeamDiscussion, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       teamDiscussion := &TeamDiscussion{}
+       resp, err := s.client.Do(ctx, req, teamDiscussion)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teamDiscussion, resp, nil
+}
+
+// GetDiscussionBySlug gets a specific discussion on a team's page given Organization name and Team's slug.
+// Authenticated user must grant read:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#get-a-discussion
+func (s *TeamsService) GetDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int) (*TeamDiscussion, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       teamDiscussion := &TeamDiscussion{}
+       resp, err := s.client.Do(ctx, req, teamDiscussion)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teamDiscussion, resp, nil
+}
+
+// CreateDiscussionByID creates a new discussion post on a team's page given Organization and Team ID.
+// Authenticated user must grant write:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#create-a-discussion
+func (s *TeamsService) CreateDiscussionByID(ctx context.Context, orgID, teamID int64, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/discussions", orgID, teamID)
+       req, err := s.client.NewRequest("POST", u, discussion)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       teamDiscussion := &TeamDiscussion{}
+       resp, err := s.client.Do(ctx, req, teamDiscussion)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teamDiscussion, resp, nil
+}
+
+// CreateDiscussionBySlug creates a new discussion post on a team's page given Organization name and Team's slug.
+// Authenticated user must grant write:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#create-a-discussion
+func (s *TeamsService) CreateDiscussionBySlug(ctx context.Context, org, slug string, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/discussions", org, slug)
+       req, err := s.client.NewRequest("POST", u, discussion)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       teamDiscussion := &TeamDiscussion{}
+       resp, err := s.client.Do(ctx, req, teamDiscussion)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teamDiscussion, resp, nil
+}
+
+// EditDiscussionByID edits the title and body text of a discussion post given Organization and Team ID.
+// Authenticated user must grant write:discussion scope.
+// User is allowed to change Title and Body of a discussion only.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#update-a-discussion
+func (s *TeamsService) EditDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber)
+       req, err := s.client.NewRequest("PATCH", u, discussion)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       teamDiscussion := &TeamDiscussion{}
+       resp, err := s.client.Do(ctx, req, teamDiscussion)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teamDiscussion, resp, nil
+}
+
+// EditDiscussionBySlug edits the title and body text of a discussion post given Organization name and Team's slug.
+// Authenticated user must grant write:discussion scope.
+// User is allowed to change Title and Body of a discussion only.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#update-a-discussion
+func (s *TeamsService) EditDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber)
+       req, err := s.client.NewRequest("PATCH", u, discussion)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       teamDiscussion := &TeamDiscussion{}
+       resp, err := s.client.Do(ctx, req, teamDiscussion)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return teamDiscussion, resp, nil
+}
+
+// DeleteDiscussionByID deletes a discussion from team's page given Organization and Team ID.
+// Authenticated user must grant write:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#delete-a-discussion
+func (s *TeamsService) DeleteDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int) (*Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeleteDiscussionBySlug deletes a discussion from team's page given Organization name and Team's slug.
+// Authenticated user must grant write:discussion scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#delete-a-discussion
+func (s *TeamsService) DeleteDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/teams_members.go b/vendor/github.com/google/go-github/v37/github/teams_members.go
new file mode 100644 (file)
index 0000000..e6ad448
--- /dev/null
@@ -0,0 +1,243 @@
+// Copyright 2018 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// TeamListTeamMembersOptions specifies the optional parameters to the
+// TeamsService.ListTeamMembers method.
+type TeamListTeamMembersOptions struct {
+       // Role filters members returned by their role in the team. Possible
+       // values are "all", "member", "maintainer". Default is "all".
+       Role string `url:"role,omitempty"`
+
+       ListOptions
+}
+
+// ListTeamMembersByID lists all of the users who are members of a team, given a specified
+// organization ID, by team ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-team-members
+func (s *TeamsService) ListTeamMembersByID(ctx context.Context, orgID, teamID int64, opts *TeamListTeamMembersOptions) ([]*User, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/members", orgID, teamID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var members []*User
+       resp, err := s.client.Do(ctx, req, &members)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return members, resp, nil
+}
+
+// ListTeamMembersBySlug lists all of the users who are members of a team, given a specified
+// organization name, by team slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-team-members
+func (s *TeamsService) ListTeamMembersBySlug(ctx context.Context, org, slug string, opts *TeamListTeamMembersOptions) ([]*User, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/members", org, slug)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var members []*User
+       resp, err := s.client.Do(ctx, req, &members)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return members, resp, nil
+}
+
+// GetTeamMembershipByID returns the membership status for a user in a team, given a specified
+// organization ID, by team ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#get-team-membership-for-a-user
+func (s *TeamsService) GetTeamMembershipByID(ctx context.Context, orgID, teamID int64, user string) (*Membership, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/memberships/%v", orgID, teamID, user)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Membership)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// GetTeamMembershipBySlug returns the membership status for a user in a team, given a specified
+// organization name, by team slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#get-team-membership-for-a-user
+func (s *TeamsService) GetTeamMembershipBySlug(ctx context.Context, org, slug, user string) (*Membership, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/memberships/%v", org, slug, user)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Membership)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// TeamAddTeamMembershipOptions specifies the optional
+// parameters to the TeamsService.AddTeamMembership method.
+type TeamAddTeamMembershipOptions struct {
+       // Role specifies the role the user should have in the team. Possible
+       // values are:
+       //     member - a normal member of the team
+       //     maintainer - a team maintainer. Able to add/remove other team
+       //                  members, promote other team members to team
+       //                  maintainer, and edit the team’s name and description
+       //
+       // Default value is "member".
+       Role string `json:"role,omitempty"`
+}
+
+// AddTeamMembershipByID adds or invites a user to a team, given a specified
+// organization ID, by team ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#add-or-update-team-membership-for-a-user
+func (s *TeamsService) AddTeamMembershipByID(ctx context.Context, orgID, teamID int64, user string, opts *TeamAddTeamMembershipOptions) (*Membership, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/memberships/%v", orgID, teamID, user)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Membership)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// AddTeamMembershipBySlug adds or invites a user to a team, given a specified
+// organization name, by team slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#add-or-update-team-membership-for-a-user
+func (s *TeamsService) AddTeamMembershipBySlug(ctx context.Context, org, slug, user string, opts *TeamAddTeamMembershipOptions) (*Membership, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/memberships/%v", org, slug, user)
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       t := new(Membership)
+       resp, err := s.client.Do(ctx, req, t)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return t, resp, nil
+}
+
+// RemoveTeamMembershipByID removes a user from a team, given a specified
+// organization ID, by team ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#remove-team-membership-for-a-user
+func (s *TeamsService) RemoveTeamMembershipByID(ctx context.Context, orgID, teamID int64, user string) (*Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/memberships/%v", orgID, teamID, user)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// RemoveTeamMembershipBySlug removes a user from a team, given a specified
+// organization name, by team slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#remove-team-membership-for-a-user
+func (s *TeamsService) RemoveTeamMembershipBySlug(ctx context.Context, org, slug, user string) (*Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/memberships/%v", org, slug, user)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// ListPendingTeamInvitationsByID gets pending invitation list of a team, given a specified
+// organization ID, by team ID.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-pending-team-invitations
+func (s *TeamsService) ListPendingTeamInvitationsByID(ctx context.Context, orgID, teamID int64, opts *ListOptions) ([]*Invitation, *Response, error) {
+       u := fmt.Sprintf("organizations/%v/team/%v/invitations", orgID, teamID)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var pendingInvitations []*Invitation
+       resp, err := s.client.Do(ctx, req, &pendingInvitations)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return pendingInvitations, resp, nil
+}
+
+// ListPendingTeamInvitationsBySlug get pending invitation list of a team, given a specified
+// organization name, by team slug.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/teams/#list-pending-team-invitations
+func (s *TeamsService) ListPendingTeamInvitationsBySlug(ctx context.Context, org, slug string, opts *ListOptions) ([]*Invitation, *Response, error) {
+       u := fmt.Sprintf("orgs/%v/teams/%v/invitations", org, slug)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var pendingInvitations []*Invitation
+       resp, err := s.client.Do(ctx, req, &pendingInvitations)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return pendingInvitations, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/timestamp.go b/vendor/github.com/google/go-github/v37/github/timestamp.go
new file mode 100644 (file)
index 0000000..1061a55
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "strconv"
+       "time"
+)
+
+// Timestamp represents a time that can be unmarshalled from a JSON string
+// formatted as either an RFC3339 or Unix timestamp. This is necessary for some
+// fields since the GitHub API is inconsistent in how it represents times. All
+// exported methods of time.Time can be called on Timestamp.
+type Timestamp struct {
+       time.Time
+}
+
+func (t Timestamp) String() string {
+       return t.Time.String()
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+// Time is expected in RFC3339 or Unix format.
+func (t *Timestamp) UnmarshalJSON(data []byte) (err error) {
+       str := string(data)
+       i, err := strconv.ParseInt(str, 10, 64)
+       if err == nil {
+               t.Time = time.Unix(i, 0)
+               if t.Time.Year() > 3000 {
+                       t.Time = time.Unix(0, i*1e6)
+               }
+       } else {
+               t.Time, err = time.Parse(`"`+time.RFC3339+`"`, str)
+       }
+       return
+}
+
+// Equal reports whether t and u are equal based on time.Equal
+func (t Timestamp) Equal(u Timestamp) bool {
+       return t.Time.Equal(u.Time)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/users.go b/vendor/github.com/google/go-github/v37/github/users.go
new file mode 100644 (file)
index 0000000..f45b1f6
--- /dev/null
@@ -0,0 +1,276 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// UsersService handles communication with the user related
+// methods of the GitHub API.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/
+type UsersService service
+
+// User represents a GitHub user.
+type User struct {
+       Login                   *string    `json:"login,omitempty"`
+       ID                      *int64     `json:"id,omitempty"`
+       NodeID                  *string    `json:"node_id,omitempty"`
+       AvatarURL               *string    `json:"avatar_url,omitempty"`
+       HTMLURL                 *string    `json:"html_url,omitempty"`
+       GravatarID              *string    `json:"gravatar_id,omitempty"`
+       Name                    *string    `json:"name,omitempty"`
+       Company                 *string    `json:"company,omitempty"`
+       Blog                    *string    `json:"blog,omitempty"`
+       Location                *string    `json:"location,omitempty"`
+       Email                   *string    `json:"email,omitempty"`
+       Hireable                *bool      `json:"hireable,omitempty"`
+       Bio                     *string    `json:"bio,omitempty"`
+       TwitterUsername         *string    `json:"twitter_username,omitempty"`
+       PublicRepos             *int       `json:"public_repos,omitempty"`
+       PublicGists             *int       `json:"public_gists,omitempty"`
+       Followers               *int       `json:"followers,omitempty"`
+       Following               *int       `json:"following,omitempty"`
+       CreatedAt               *Timestamp `json:"created_at,omitempty"`
+       UpdatedAt               *Timestamp `json:"updated_at,omitempty"`
+       SuspendedAt             *Timestamp `json:"suspended_at,omitempty"`
+       Type                    *string    `json:"type,omitempty"`
+       SiteAdmin               *bool      `json:"site_admin,omitempty"`
+       TotalPrivateRepos       *int       `json:"total_private_repos,omitempty"`
+       OwnedPrivateRepos       *int       `json:"owned_private_repos,omitempty"`
+       PrivateGists            *int       `json:"private_gists,omitempty"`
+       DiskUsage               *int       `json:"disk_usage,omitempty"`
+       Collaborators           *int       `json:"collaborators,omitempty"`
+       TwoFactorAuthentication *bool      `json:"two_factor_authentication,omitempty"`
+       Plan                    *Plan      `json:"plan,omitempty"`
+       LdapDn                  *string    `json:"ldap_dn,omitempty"`
+
+       // API URLs
+       URL               *string `json:"url,omitempty"`
+       EventsURL         *string `json:"events_url,omitempty"`
+       FollowingURL      *string `json:"following_url,omitempty"`
+       FollowersURL      *string `json:"followers_url,omitempty"`
+       GistsURL          *string `json:"gists_url,omitempty"`
+       OrganizationsURL  *string `json:"organizations_url,omitempty"`
+       ReceivedEventsURL *string `json:"received_events_url,omitempty"`
+       ReposURL          *string `json:"repos_url,omitempty"`
+       StarredURL        *string `json:"starred_url,omitempty"`
+       SubscriptionsURL  *string `json:"subscriptions_url,omitempty"`
+
+       // TextMatches is only populated from search results that request text matches
+       // See: search.go and https://docs.github.com/en/free-pro-team@latest/rest/reference/search/#text-match-metadata
+       TextMatches []*TextMatch `json:"text_matches,omitempty"`
+
+       // Permissions identifies the permissions that a user has on a given
+       // repository. This is only populated when calling Repositories.ListCollaborators.
+       Permissions map[string]bool `json:"permissions,omitempty"`
+}
+
+func (u User) String() string {
+       return Stringify(u)
+}
+
+// Get fetches a user. Passing the empty string will fetch the authenticated
+// user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#get-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#get-a-user
+func (s *UsersService) Get(ctx context.Context, user string) (*User, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v", user)
+       } else {
+               u = "user"
+       }
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       uResp := new(User)
+       resp, err := s.client.Do(ctx, req, uResp)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return uResp, resp, nil
+}
+
+// GetByID fetches a user.
+//
+// Note: GetByID uses the undocumented GitHub API endpoint /user/:id.
+func (s *UsersService) GetByID(ctx context.Context, id int64) (*User, *Response, error) {
+       u := fmt.Sprintf("user/%d", id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       user := new(User)
+       resp, err := s.client.Do(ctx, req, user)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return user, resp, nil
+}
+
+// Edit the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#update-the-authenticated-user
+func (s *UsersService) Edit(ctx context.Context, user *User) (*User, *Response, error) {
+       u := "user"
+       req, err := s.client.NewRequest("PATCH", u, user)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       uResp := new(User)
+       resp, err := s.client.Do(ctx, req, uResp)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return uResp, resp, nil
+}
+
+// HovercardOptions specifies optional parameters to the UsersService.GetHovercard
+// method.
+type HovercardOptions struct {
+       // SubjectType specifies the additional information to be received about the hovercard.
+       // Possible values are: organization, repository, issue, pull_request. (Required when using subject_id.)
+       SubjectType string `url:"subject_type"`
+
+       // SubjectID specifies the ID for the SubjectType. (Required when using subject_type.)
+       SubjectID string `url:"subject_id"`
+}
+
+// Hovercard represents hovercard information about a user.
+type Hovercard struct {
+       Contexts []*UserContext `json:"contexts,omitempty"`
+}
+
+// UserContext represents the contextual information about user.
+type UserContext struct {
+       Message *string `json:"message,omitempty"`
+       Octicon *string `json:"octicon,omitempty"`
+}
+
+// GetHovercard fetches contextual information about user. It requires authentication
+// via Basic Auth or via OAuth with the repo scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#get-contextual-information-for-a-user
+func (s *UsersService) GetHovercard(ctx context.Context, user string, opts *HovercardOptions) (*Hovercard, *Response, error) {
+       u := fmt.Sprintf("users/%v/hovercard", user)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       hc := new(Hovercard)
+       resp, err := s.client.Do(ctx, req, hc)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return hc, resp, nil
+}
+
+// UserListOptions specifies optional parameters to the UsersService.ListAll
+// method.
+type UserListOptions struct {
+       // ID of the last user seen
+       Since int64 `url:"since,omitempty"`
+
+       // Note: Pagination is powered exclusively by the Since parameter,
+       // ListOptions.Page has no effect.
+       // ListOptions.PerPage controls an undocumented GitHub API parameter.
+       ListOptions
+}
+
+// ListAll lists all GitHub users.
+//
+// To paginate through all users, populate 'Since' with the ID of the last user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-users
+func (s *UsersService) ListAll(ctx context.Context, opts *UserListOptions) ([]*User, *Response, error) {
+       u, err := addOptions("users", opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var users []*User
+       resp, err := s.client.Do(ctx, req, &users)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return users, resp, nil
+}
+
+// ListInvitations lists all currently-open repository invitations for the
+// authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#list-repository-invitations-for-the-authenticated-user
+func (s *UsersService) ListInvitations(ctx context.Context, opts *ListOptions) ([]*RepositoryInvitation, *Response, error) {
+       u, err := addOptions("user/repository_invitations", opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       invites := []*RepositoryInvitation{}
+       resp, err := s.client.Do(ctx, req, &invites)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return invites, resp, nil
+}
+
+// AcceptInvitation accepts the currently-open repository invitation for the
+// authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#accept-a-repository-invitation
+func (s *UsersService) AcceptInvitation(ctx context.Context, invitationID int64) (*Response, error) {
+       u := fmt.Sprintf("user/repository_invitations/%v", invitationID)
+       req, err := s.client.NewRequest("PATCH", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DeclineInvitation declines the currently-open repository invitation for the
+// authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#decline-a-repository-invitation
+func (s *UsersService) DeclineInvitation(ctx context.Context, invitationID int64) (*Response, error) {
+       u := fmt.Sprintf("user/repository_invitations/%v", invitationID)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/users_administration.go b/vendor/github.com/google/go-github/v37/github/users_administration.go
new file mode 100644 (file)
index 0000000..aef947e
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright 2014 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// PromoteSiteAdmin promotes a user to a site administrator of a GitHub Enterprise instance.
+//
+// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#promote-an-ordinary-user-to-a-site-administrator
+func (s *UsersService) PromoteSiteAdmin(ctx context.Context, user string) (*Response, error) {
+       u := fmt.Sprintf("users/%v/site_admin", user)
+
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// DemoteSiteAdmin demotes a user from site administrator of a GitHub Enterprise instance.
+//
+// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#demote-a-site-administrator-to-an-ordinary-user
+func (s *UsersService) DemoteSiteAdmin(ctx context.Context, user string) (*Response, error) {
+       u := fmt.Sprintf("users/%v/site_admin", user)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// UserSuspendOptions represents the reason a user is being suspended.
+type UserSuspendOptions struct {
+       Reason *string `json:"reason,omitempty"`
+}
+
+// Suspend a user on a GitHub Enterprise instance.
+//
+// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#suspend-a-user
+func (s *UsersService) Suspend(ctx context.Context, user string, opts *UserSuspendOptions) (*Response, error) {
+       u := fmt.Sprintf("users/%v/suspended", user)
+
+       req, err := s.client.NewRequest("PUT", u, opts)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// Unsuspend a user on a GitHub Enterprise instance.
+//
+// GitHub API docs: https://developer.github.com/enterprise/v3/enterprise-admin/users/#unsuspend-a-user
+func (s *UsersService) Unsuspend(ctx context.Context, user string) (*Response, error) {
+       u := fmt.Sprintf("users/%v/suspended", user)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/users_blocking.go b/vendor/github.com/google/go-github/v37/github/users_blocking.go
new file mode 100644 (file)
index 0000000..cdbc2c2
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ListBlockedUsers lists all the blocked users by the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-users-blocked-by-the-authenticated-user
+func (s *UsersService) ListBlockedUsers(ctx context.Context, opts *ListOptions) ([]*User, *Response, error) {
+       u := "user/blocks"
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
+
+       var blockedUsers []*User
+       resp, err := s.client.Do(ctx, req, &blockedUsers)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return blockedUsers, resp, nil
+}
+
+// IsBlocked reports whether specified user is blocked by the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#check-if-a-user-is-blocked-by-the-authenticated-user
+func (s *UsersService) IsBlocked(ctx context.Context, user string) (bool, *Response, error) {
+       u := fmt.Sprintf("user/blocks/%v", user)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
+
+       resp, err := s.client.Do(ctx, req, nil)
+       isBlocked, err := parseBoolResponse(err)
+       return isBlocked, resp, err
+}
+
+// BlockUser blocks specified user for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#block-a-user
+func (s *UsersService) BlockUser(ctx context.Context, user string) (*Response, error) {
+       u := fmt.Sprintf("user/blocks/%v", user)
+
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// UnblockUser unblocks specified user for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#unblock-a-user
+func (s *UsersService) UnblockUser(ctx context.Context, user string) (*Response, error) {
+       u := fmt.Sprintf("user/blocks/%v", user)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeBlockUsersPreview)
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/users_emails.go b/vendor/github.com/google/go-github/v37/github/users_emails.go
new file mode 100644 (file)
index 0000000..94e7fb8
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import "context"
+
+// UserEmail represents user's email address
+type UserEmail struct {
+       Email      *string `json:"email,omitempty"`
+       Primary    *bool   `json:"primary,omitempty"`
+       Verified   *bool   `json:"verified,omitempty"`
+       Visibility *string `json:"visibility,omitempty"`
+}
+
+// ListEmails lists all email addresses for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-email-addresses-for-the-authenticated-user
+func (s *UsersService) ListEmails(ctx context.Context, opts *ListOptions) ([]*UserEmail, *Response, error) {
+       u := "user/emails"
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var emails []*UserEmail
+       resp, err := s.client.Do(ctx, req, &emails)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return emails, resp, nil
+}
+
+// AddEmails adds email addresses of the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#add-an-email-address-for-the-authenticated-user
+func (s *UsersService) AddEmails(ctx context.Context, emails []string) ([]*UserEmail, *Response, error) {
+       u := "user/emails"
+       req, err := s.client.NewRequest("POST", u, emails)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var e []*UserEmail
+       resp, err := s.client.Do(ctx, req, &e)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return e, resp, nil
+}
+
+// DeleteEmails deletes email addresses from authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#delete-an-email-address-for-the-authenticated-user
+func (s *UsersService) DeleteEmails(ctx context.Context, emails []string) (*Response, error) {
+       u := "user/emails"
+       req, err := s.client.NewRequest("DELETE", u, emails)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/users_followers.go b/vendor/github.com/google/go-github/v37/github/users_followers.go
new file mode 100644 (file)
index 0000000..f26392b
--- /dev/null
@@ -0,0 +1,122 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ListFollowers lists the followers for a user. Passing the empty string will
+// fetch followers for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-followers-of-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-followers-of-a-user
+func (s *UsersService) ListFollowers(ctx context.Context, user string, opts *ListOptions) ([]*User, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v/followers", user)
+       } else {
+               u = "user/followers"
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var users []*User
+       resp, err := s.client.Do(ctx, req, &users)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return users, resp, nil
+}
+
+// ListFollowing lists the people that a user is following. Passing the empty
+// string will list people the authenticated user is following.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-the-people-the-authenticated-user-follows
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-the-people-a-user-follows
+func (s *UsersService) ListFollowing(ctx context.Context, user string, opts *ListOptions) ([]*User, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v/following", user)
+       } else {
+               u = "user/following"
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var users []*User
+       resp, err := s.client.Do(ctx, req, &users)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return users, resp, nil
+}
+
+// IsFollowing checks if "user" is following "target". Passing the empty
+// string for "user" will check if the authenticated user is following "target".
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#check-if-a-person-is-followed-by-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#check-if-a-user-follows-another-user
+func (s *UsersService) IsFollowing(ctx context.Context, user, target string) (bool, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v/following/%v", user, target)
+       } else {
+               u = fmt.Sprintf("user/following/%v", target)
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return false, nil, err
+       }
+
+       resp, err := s.client.Do(ctx, req, nil)
+       following, err := parseBoolResponse(err)
+       return following, resp, err
+}
+
+// Follow will cause the authenticated user to follow the specified user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#follow-a-user
+func (s *UsersService) Follow(ctx context.Context, user string) (*Response, error) {
+       u := fmt.Sprintf("user/following/%v", user)
+       req, err := s.client.NewRequest("PUT", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
+
+// Unfollow will cause the authenticated user to unfollow the specified user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#unfollow-a-user
+func (s *UsersService) Unfollow(ctx context.Context, user string) (*Response, error) {
+       u := fmt.Sprintf("user/following/%v", user)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/users_gpg_keys.go b/vendor/github.com/google/go-github/v37/github/users_gpg_keys.go
new file mode 100644 (file)
index 0000000..3417478
--- /dev/null
@@ -0,0 +1,129 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+       "time"
+)
+
+// GPGKey represents a GitHub user's public GPG key used to verify GPG signed commits and tags.
+//
+// https://developer.github.com/changes/2016-04-04-git-signing-api-preview/
+type GPGKey struct {
+       ID                *int64      `json:"id,omitempty"`
+       PrimaryKeyID      *int64      `json:"primary_key_id,omitempty"`
+       KeyID             *string     `json:"key_id,omitempty"`
+       PublicKey         *string     `json:"public_key,omitempty"`
+       Emails            []*GPGEmail `json:"emails,omitempty"`
+       Subkeys           []*GPGKey   `json:"subkeys,omitempty"`
+       CanSign           *bool       `json:"can_sign,omitempty"`
+       CanEncryptComms   *bool       `json:"can_encrypt_comms,omitempty"`
+       CanEncryptStorage *bool       `json:"can_encrypt_storage,omitempty"`
+       CanCertify        *bool       `json:"can_certify,omitempty"`
+       CreatedAt         *time.Time  `json:"created_at,omitempty"`
+       ExpiresAt         *time.Time  `json:"expires_at,omitempty"`
+}
+
+// String stringifies a GPGKey.
+func (k GPGKey) String() string {
+       return Stringify(k)
+}
+
+// GPGEmail represents an email address associated to a GPG key.
+type GPGEmail struct {
+       Email    *string `json:"email,omitempty"`
+       Verified *bool   `json:"verified,omitempty"`
+}
+
+// ListGPGKeys lists the public GPG keys for a user. Passing the empty
+// string will fetch keys for the authenticated user. It requires authentication
+// via Basic Auth or via OAuth with at least read:gpg_key scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-gpg-keys-for-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-gpg-keys-for-a-user
+func (s *UsersService) ListGPGKeys(ctx context.Context, user string, opts *ListOptions) ([]*GPGKey, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v/gpg_keys", user)
+       } else {
+               u = "user/gpg_keys"
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var keys []*GPGKey
+       resp, err := s.client.Do(ctx, req, &keys)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return keys, resp, nil
+}
+
+// GetGPGKey gets extended details for a single GPG key. It requires authentication
+// via Basic Auth or via OAuth with at least read:gpg_key scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#get-a-gpg-key-for-the-authenticated-user
+func (s *UsersService) GetGPGKey(ctx context.Context, id int64) (*GPGKey, *Response, error) {
+       u := fmt.Sprintf("user/gpg_keys/%v", id)
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       key := &GPGKey{}
+       resp, err := s.client.Do(ctx, req, key)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return key, resp, nil
+}
+
+// CreateGPGKey creates a GPG key. It requires authenticatation via Basic Auth
+// or OAuth with at least write:gpg_key scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#create-a-gpg-key
+func (s *UsersService) CreateGPGKey(ctx context.Context, armoredPublicKey string) (*GPGKey, *Response, error) {
+       gpgKey := &struct {
+               ArmoredPublicKey string `json:"armored_public_key"`
+       }{ArmoredPublicKey: armoredPublicKey}
+       req, err := s.client.NewRequest("POST", "user/gpg_keys", gpgKey)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       key := &GPGKey{}
+       resp, err := s.client.Do(ctx, req, key)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return key, resp, nil
+}
+
+// DeleteGPGKey deletes a GPG key. It requires authentication via Basic Auth or
+// via OAuth with at least admin:gpg_key scope.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#delete-a-gpg-key-for-the-authenticated-user
+func (s *UsersService) DeleteGPGKey(ctx context.Context, id int64) (*Response, error) {
+       u := fmt.Sprintf("user/gpg_keys/%v", id)
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/users_keys.go b/vendor/github.com/google/go-github/v37/github/users_keys.go
new file mode 100644 (file)
index 0000000..b5d4f79
--- /dev/null
@@ -0,0 +1,111 @@
+// Copyright 2013 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// Key represents a public SSH key used to authenticate a user or deploy script.
+type Key struct {
+       ID        *int64     `json:"id,omitempty"`
+       Key       *string    `json:"key,omitempty"`
+       URL       *string    `json:"url,omitempty"`
+       Title     *string    `json:"title,omitempty"`
+       ReadOnly  *bool      `json:"read_only,omitempty"`
+       Verified  *bool      `json:"verified,omitempty"`
+       CreatedAt *Timestamp `json:"created_at,omitempty"`
+}
+
+func (k Key) String() string {
+       return Stringify(k)
+}
+
+// ListKeys lists the verified public keys for a user. Passing the empty
+// string will fetch keys for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-public-ssh-keys-for-the-authenticated-user
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#list-public-keys-for-a-user
+func (s *UsersService) ListKeys(ctx context.Context, user string, opts *ListOptions) ([]*Key, *Response, error) {
+       var u string
+       if user != "" {
+               u = fmt.Sprintf("users/%v/keys", user)
+       } else {
+               u = "user/keys"
+       }
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       var keys []*Key
+       resp, err := s.client.Do(ctx, req, &keys)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return keys, resp, nil
+}
+
+// GetKey fetches a single public key.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#get-a-public-ssh-key-for-the-authenticated-user
+func (s *UsersService) GetKey(ctx context.Context, id int64) (*Key, *Response, error) {
+       u := fmt.Sprintf("user/keys/%v", id)
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       key := new(Key)
+       resp, err := s.client.Do(ctx, req, key)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return key, resp, nil
+}
+
+// CreateKey adds a public key for the authenticated user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#create-a-public-ssh-key-for-the-authenticated-user
+func (s *UsersService) CreateKey(ctx context.Context, key *Key) (*Key, *Response, error) {
+       u := "user/keys"
+
+       req, err := s.client.NewRequest("POST", u, key)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       k := new(Key)
+       resp, err := s.client.Do(ctx, req, k)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return k, resp, nil
+}
+
+// DeleteKey deletes a public key.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/users/#delete-a-public-ssh-key-for-the-authenticated-user
+func (s *UsersService) DeleteKey(ctx context.Context, id int64) (*Response, error) {
+       u := fmt.Sprintf("user/keys/%v", id)
+
+       req, err := s.client.NewRequest("DELETE", u, nil)
+       if err != nil {
+               return nil, err
+       }
+
+       return s.client.Do(ctx, req, nil)
+}
diff --git a/vendor/github.com/google/go-github/v37/github/users_projects.go b/vendor/github.com/google/go-github/v37/github/users_projects.go
new file mode 100644 (file)
index 0000000..dd9ceaf
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2019 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+       "context"
+       "fmt"
+)
+
+// ListProjects lists the projects for the specified user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#list-user-projects
+func (s *UsersService) ListProjects(ctx context.Context, user string, opts *ProjectListOptions) ([]*Project, *Response, error) {
+       u := fmt.Sprintf("users/%v/projects", user)
+       u, err := addOptions(u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       req, err := s.client.NewRequest("GET", u, nil)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       var projects []*Project
+       resp, err := s.client.Do(ctx, req, &projects)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return projects, resp, nil
+}
+
+// CreateUserProjectOptions specifies the parameters to the UsersService.CreateProject method.
+type CreateUserProjectOptions struct {
+       // The name of the project. (Required.)
+       Name string `json:"name"`
+       // The description of the project. (Optional.)
+       Body *string `json:"body,omitempty"`
+}
+
+// CreateProject creates a GitHub Project for the current user.
+//
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/projects/#create-a-user-project
+func (s *UsersService) CreateProject(ctx context.Context, opts *CreateUserProjectOptions) (*Project, *Response, error) {
+       u := "user/projects"
+       req, err := s.client.NewRequest("POST", u, opts)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       // TODO: remove custom Accept header when this API fully launches.
+       req.Header.Set("Accept", mediaTypeProjectsPreview)
+
+       project := &Project{}
+       resp, err := s.client.Do(ctx, req, project)
+       if err != nil {
+               return nil, resp, err
+       }
+
+       return project, resp, nil
+}
diff --git a/vendor/github.com/google/go-github/v37/github/with_appengine.go b/vendor/github.com/google/go-github/v37/github/with_appengine.go
new file mode 100644 (file)
index 0000000..9053ce1
--- /dev/null
@@ -0,0 +1,21 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build appengine
+// +build appengine
+
+// This file provides glue for making github work on App Engine.
+
+package github
+
+import (
+       "context"
+       "net/http"
+)
+
+func withContext(ctx context.Context, req *http.Request) *http.Request {
+       // No-op because App Engine adds context to a request differently.
+       return req
+}
diff --git a/vendor/github.com/google/go-github/v37/github/without_appengine.go b/vendor/github.com/google/go-github/v37/github/without_appengine.go
new file mode 100644 (file)
index 0000000..0024ae4
--- /dev/null
@@ -0,0 +1,20 @@
+// Copyright 2017 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build !appengine
+// +build !appengine
+
+// This file provides glue for making github work without App Engine.
+
+package github
+
+import (
+       "context"
+       "net/http"
+)
+
+func withContext(ctx context.Context, req *http.Request) *http.Request {
+       return req.WithContext(ctx)
+}
index a9eabbbba4c96964386ad34989b7427cc0534fbb..764e645227f69f21d9c8f5e48eb818f27b34122c 100644 (file)
@@ -442,9 +442,9 @@ github.com/golang/protobuf/ptypes/timestamp
 # github.com/golang/snappy v0.0.4
 ## explicit
 github.com/golang/snappy
-# github.com/google/go-github/v32 v32.1.0
+# github.com/google/go-github/v37 v37.0.0
 ## explicit
-github.com/google/go-github/v32/github
+github.com/google/go-github/v37/github
 # github.com/google/go-querystring v1.1.0
 ## explicit
 github.com/google/go-querystring/query
@@ -850,7 +850,7 @@ go.uber.org/zap/internal/bufferpool
 go.uber.org/zap/internal/color
 go.uber.org/zap/internal/exit
 go.uber.org/zap/zapcore
-# golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e
+# golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97
 ## explicit
 golang.org/x/crypto/argon2
 golang.org/x/crypto/bcrypt