diff --git a/github/event.go b/github/event.go index 4b87142a8c7..8f1a0f2eeae 100644 --- a/github/event.go +++ b/github/event.go @@ -124,6 +124,8 @@ func (e *Event) ParsePayload() (payload interface{}, err error) { payload = &WatchEvent{} case "WorkflowDispatchEvent": payload = &WorkflowDispatchEvent{} + case "WorkflowJobEvent": + payload = &WorkflowJobEvent{} case "WorkflowRunEvent": payload = &WorkflowRunEvent{} } diff --git a/github/event_types.go b/github/event_types.go index f99a1296a09..384aa3a1e5f 100644 --- a/github/event_types.go +++ b/github/event_types.go @@ -1083,6 +1083,20 @@ type WorkflowDispatchEvent struct { Sender *User `json:"sender,omitempty"` } +// WorkflowJobEvent is triggered when a job is queued, started or completed. +// +// GitHub API docs: pending +type WorkflowJobEvent struct { + WorkflowJob *WorkflowJob `json:"workflow_job,omitempty"` + + Action *string `json:"action,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"` +} + // 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 diff --git a/github/github-accessors.go b/github/github-accessors.go index 37a22830e61..c4b88ae3bd6 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -17452,6 +17452,46 @@ func (w *WorkflowJob) GetURL() string { return *w.URL } +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (w *WorkflowJobEvent) GetAction() string { + if w == nil || w.Action == nil { + return "" + } + return *w.Action +} + +// GetOrg returns the Org field. +func (w *WorkflowJobEvent) GetOrg() *Organization { + if w == nil { + return nil + } + return w.Org +} + +// GetRepo returns the Repo field. +func (w *WorkflowJobEvent) GetRepo() *Repository { + if w == nil { + return nil + } + return w.Repo +} + +// GetSender returns the Sender field. +func (w *WorkflowJobEvent) GetSender() *User { + if w == nil { + return nil + } + return w.Sender +} + +// GetWorkflowJob returns the WorkflowJob field. +func (w *WorkflowJobEvent) GetWorkflowJob() *WorkflowJob { + if w == nil { + return nil + } + return w.WorkflowJob +} + // GetArtifactsURL returns the ArtifactsURL field if it's non-nil, zero value otherwise. func (w *WorkflowRun) GetArtifactsURL() string { if w == nil || w.ArtifactsURL == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index 04bf837a1f7..8d3f800eb9c 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -20448,6 +20448,44 @@ func TestWorkflowJob_GetURL(tt *testing.T) { w.GetURL() } +func TestWorkflowJobEvent_GetAction(tt *testing.T) { + var zeroValue string + w := &WorkflowJobEvent{Action: &zeroValue} + w.GetAction() + w = &WorkflowJobEvent{} + w.GetAction() + w = nil + w.GetAction() +} + +func TestWorkflowJobEvent_GetOrg(tt *testing.T) { + w := &WorkflowJobEvent{} + w.GetOrg() + w = nil + w.GetOrg() +} + +func TestWorkflowJobEvent_GetRepo(tt *testing.T) { + w := &WorkflowJobEvent{} + w.GetRepo() + w = nil + w.GetRepo() +} + +func TestWorkflowJobEvent_GetSender(tt *testing.T) { + w := &WorkflowJobEvent{} + w.GetSender() + w = nil + w.GetSender() +} + +func TestWorkflowJobEvent_GetWorkflowJob(tt *testing.T) { + w := &WorkflowJobEvent{} + w.GetWorkflowJob() + w = nil + w.GetWorkflowJob() +} + func TestWorkflowRun_GetArtifactsURL(tt *testing.T) { var zeroValue string w := &WorkflowRun{ArtifactsURL: &zeroValue} diff --git a/github/messages.go b/github/messages.go index caa596a2172..e46435c9a04 100644 --- a/github/messages.go +++ b/github/messages.go @@ -92,6 +92,7 @@ var ( "user": "UserEvent", "watch": "WatchEvent", "workflow_dispatch": "WorkflowDispatchEvent", + "workflow_job": "WorkflowJobEvent", "workflow_run": "WorkflowRunEvent", } ) diff --git a/github/messages_test.go b/github/messages_test.go index 9880a2a5081..da8c3331564 100644 --- a/github/messages_test.go +++ b/github/messages_test.go @@ -450,6 +450,10 @@ func TestParseWebHook(t *testing.T) { payload: &WorkflowDispatchEvent{}, messageType: "workflow_dispatch", }, + { + payload: &WorkflowJobEvent{}, + messageType: "workflow_job", + }, { payload: &WorkflowRunEvent{}, messageType: "workflow_run", diff --git a/github/repos_hooks_deliveries_test.go b/github/repos_hooks_deliveries_test.go index 5c6fb86d7eb..b970eb49840 100644 --- a/github/repos_hooks_deliveries_test.go +++ b/github/repos_hooks_deliveries_test.go @@ -155,6 +155,7 @@ var hookDeliveryPayloadTypeToStruct = map[string]interface{}{ "user": &UserEvent{}, "watch": &WatchEvent{}, "workflow_dispatch": &WorkflowDispatchEvent{}, + "workflow_job": &WorkflowJobEvent{}, "workflow_run": &WorkflowRunEvent{}, }