From 15b20d32927c5a59a0924e2cfa26818838e584c0 Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Mon, 16 May 2022 16:28:58 +0200 Subject: [PATCH] Add 'repository_import' event (#2364) --- github/event.go | 2 + github/event_types.go | 15 ++++- github/event_types_test.go | 86 +++++++++++++++++++++++++++ github/github-accessors.go | 32 ++++++++++ github/github-accessors_test.go | 31 ++++++++++ github/messages.go | 1 + github/messages_test.go | 4 ++ github/repos_hooks_deliveries_test.go | 1 + 8 files changed, 170 insertions(+), 2 deletions(-) diff --git a/github/event.go b/github/event.go index 5c10365970..5a052de09c 100644 --- a/github/event.go +++ b/github/event.go @@ -114,6 +114,8 @@ func (e *Event) ParsePayload() (payload interface{}, err error) { payload = &RepositoryEvent{} case "RepositoryDispatchEvent": payload = &RepositoryDispatchEvent{} + case "RepositoryImportEvent": + payload = &RepositoryImportEvent{} case "RepositoryVulnerabilityAlertEvent": payload = &RepositoryVulnerabilityAlertEvent{} case "SecretScanningAlertEvent": diff --git a/github/event_types.go b/github/event_types.go index 52fc1408ab..7ce312d210 100644 --- a/github/event_types.go +++ b/github/event_types.go @@ -945,8 +945,8 @@ type HeadCommit struct { Modified []string `json:"modified,omitempty"` } -func (p HeadCommit) String() string { - return Stringify(p) +func (h HeadCommit) String() string { + return Stringify(h) } // PushEventRepository represents the repo object in a PushEvent payload. @@ -1051,6 +1051,17 @@ type RepositoryDispatchEvent struct { Installation *Installation `json:"installation,omitempty"` } +// RepositoryImportEvent represents the activity related to a repository being imported to GitHub. +// +// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#repository_import +type RepositoryImportEvent struct { + // Status represents the final state of the import. This can be one of "success", "cancelled", or "failure". + Status *string `json:"status,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Org *Organization `json:"organization,omitempty"` + Sender *User `json:"sender,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 diff --git a/github/event_types_test.go b/github/event_types_test.go index 5d82e3f4da..e74adb3072 100644 --- a/github/event_types_test.go +++ b/github/event_types_test.go @@ -6745,6 +6745,92 @@ func TestRepositoryDispatchEvent_Marshal(t *testing.T) { testJSONMarshal(t, u, want) } +func TestRepositoryImportEvent_Marshal(t *testing.T) { + testJSONMarshal(t, &RepositoryImportEvent{}, "{}") + + u := &RepositoryImportEvent{ + Status: String("success"), + Repo: &Repository{ + ID: Int64(1), + URL: String("s"), + Name: String("n"), + }, + Org: &Organization{ + BillingEmail: String("be"), + Blog: String("b"), + Company: String("c"), + Email: String("e"), + TwitterUsername: String("tu"), + Location: String("loc"), + Name: String("n"), + Description: String("d"), + IsVerified: Bool(true), + HasOrganizationProjects: Bool(true), + HasRepositoryProjects: Bool(true), + DefaultRepoPermission: String("drp"), + MembersCanCreateRepos: Bool(true), + MembersCanCreateInternalRepos: Bool(true), + MembersCanCreatePrivateRepos: Bool(true), + MembersCanCreatePublicRepos: Bool(false), + MembersAllowedRepositoryCreationType: String("marct"), + MembersCanCreatePages: Bool(true), + MembersCanCreatePublicPages: Bool(false), + MembersCanCreatePrivatePages: Bool(true), + }, + Sender: &User{ + Login: String("l"), + ID: Int64(1), + NodeID: String("n"), + URL: String("u"), + ReposURL: String("r"), + EventsURL: String("e"), + AvatarURL: String("a"), + }, + } + + want := `{ + "status": "success", + "repository": { + "id": 1, + "name": "n", + "url": "s" + }, + "organization": { + "name": "n", + "company": "c", + "blog": "b", + "location": "loc", + "email": "e", + "twitter_username": "tu", + "description": "d", + "billing_email": "be", + "is_verified": true, + "has_organization_projects": true, + "has_repository_projects": true, + "default_repository_permission": "drp", + "members_can_create_repositories": true, + "members_can_create_public_repositories": false, + "members_can_create_private_repositories": true, + "members_can_create_internal_repositories": true, + "members_allowed_repository_creation_type": "marct", + "members_can_create_pages": true, + "members_can_create_public_pages": false, + "members_can_create_private_pages": true + }, + "sender": { + "login": "l", + "id": 1, + "node_id": "n", + "avatar_url": "a", + "url": "u", + "events_url": "e", + "repos_url": "r" + } + }` + + testJSONMarshal(t, u, want) +} + func TestRepositoryEvent_Marshal(t *testing.T) { testJSONMarshal(t, &RepositoryEvent{}, "{}") diff --git a/github/github-accessors.go b/github/github-accessors.go index d3e4261779..6da489c2cd 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -15190,6 +15190,38 @@ func (r *RepositoryEvent) GetSender() *User { return r.Sender } +// GetOrg returns the Org field. +func (r *RepositoryImportEvent) GetOrg() *Organization { + if r == nil { + return nil + } + return r.Org +} + +// GetRepo returns the Repo field. +func (r *RepositoryImportEvent) GetRepo() *Repository { + if r == nil { + return nil + } + return r.Repo +} + +// GetSender returns the Sender field. +func (r *RepositoryImportEvent) GetSender() *User { + if r == nil { + return nil + } + return r.Sender +} + +// GetStatus returns the Status field if it's non-nil, zero value otherwise. +func (r *RepositoryImportEvent) GetStatus() string { + if r == nil || r.Status == nil { + return "" + } + return *r.Status +} + // GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. func (r *RepositoryInvitation) GetCreatedAt() Timestamp { if r == nil || r.CreatedAt == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index aadfab90d4..ff018424ca 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -17698,6 +17698,37 @@ func TestRepositoryEvent_GetSender(tt *testing.T) { r.GetSender() } +func TestRepositoryImportEvent_GetOrg(tt *testing.T) { + r := &RepositoryImportEvent{} + r.GetOrg() + r = nil + r.GetOrg() +} + +func TestRepositoryImportEvent_GetRepo(tt *testing.T) { + r := &RepositoryImportEvent{} + r.GetRepo() + r = nil + r.GetRepo() +} + +func TestRepositoryImportEvent_GetSender(tt *testing.T) { + r := &RepositoryImportEvent{} + r.GetSender() + r = nil + r.GetSender() +} + +func TestRepositoryImportEvent_GetStatus(tt *testing.T) { + var zeroValue string + r := &RepositoryImportEvent{Status: &zeroValue} + r.GetStatus() + r = &RepositoryImportEvent{} + r.GetStatus() + r = nil + r.GetStatus() +} + func TestRepositoryInvitation_GetCreatedAt(tt *testing.T) { var zeroValue Timestamp r := &RepositoryInvitation{CreatedAt: &zeroValue} diff --git a/github/messages.go b/github/messages.go index 324d3b80cc..44477ddb0d 100644 --- a/github/messages.go +++ b/github/messages.go @@ -86,6 +86,7 @@ var ( "push": "PushEvent", "repository": "RepositoryEvent", "repository_dispatch": "RepositoryDispatchEvent", + "repository_import": "RepositoryImportEvent", "repository_vulnerability_alert": "RepositoryVulnerabilityAlertEvent", "release": "ReleaseEvent", "secret_scanning_alert": "SecretScanningAlertEvent", diff --git a/github/messages_test.go b/github/messages_test.go index 1d9b7f63a8..1d999c964a 100644 --- a/github/messages_test.go +++ b/github/messages_test.go @@ -457,6 +457,10 @@ func TestParseWebHook(t *testing.T) { payload: &WatchEvent{}, messageType: "watch", }, + { + payload: &RepositoryImportEvent{}, + messageType: "repository_import", + }, { payload: &RepositoryDispatchEvent{}, messageType: "repository_dispatch", diff --git a/github/repos_hooks_deliveries_test.go b/github/repos_hooks_deliveries_test.go index eea17386a0..f136639b2c 100644 --- a/github/repos_hooks_deliveries_test.go +++ b/github/repos_hooks_deliveries_test.go @@ -184,6 +184,7 @@ var hookDeliveryPayloadTypeToStruct = map[string]interface{}{ "release": &ReleaseEvent{}, "repository": &RepositoryEvent{}, "repository_dispatch": &RepositoryDispatchEvent{}, + "repository_import": &RepositoryImportEvent{}, "repository_vulnerability_alert": &RepositoryVulnerabilityAlertEvent{}, "secret_scanning_alert": &SecretScanningAlertEvent{}, "star": &StarEvent{},