feat(inputs.webhooks): Add support for GitHub workflow events (#16355)

Co-authored-by: dmitriy.krapivenko <dmitriy.krapivenko@aliexpress.ru>
This commit is contained in:
DmitryK 2025-02-05 22:17:08 +03:00 committed by GitHub
parent 417a55ff0a
commit 00106c9abb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 707 additions and 21 deletions

View File

@ -28,7 +28,7 @@ The format is as follows:
The tag values and field values show the place on the incoming JSON object
where the data is sourced from.
### [`commit_comment` event](https://developer.github.com/v3/activity/events/types/#commitcommentevent)
### [`commit_comment` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#commit_comment)
**Tags:**
@ -46,7 +46,7 @@ where the data is sourced from.
* 'commit' = `event.comment.commit_id` string
* 'comment' = `event.comment.body` string
### [`create` event](https://developer.github.com/v3/activity/events/types/#createevent)
### [`create` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#create)
**Tags:**
@ -64,7 +64,7 @@ where the data is sourced from.
* 'ref' = `event.ref` string
* 'refType' = `event.ref_type` string
### [`delete` event](https://developer.github.com/v3/activity/events/types/#deleteevent)
### [`delete` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#delete)
**Tags:**
@ -82,7 +82,7 @@ where the data is sourced from.
* 'ref' = `event.ref` string
* 'refType' = `event.ref_type` string
### [`deployment` event](https://developer.github.com/v3/activity/events/types/#deploymentevent)
### [`deployment` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#deployment)
**Tags:**
@ -102,7 +102,7 @@ where the data is sourced from.
* 'environment' = `event.deployment.environment` string
* 'description' = `event.deployment.description` string
### [`deployment_status` event](https://developer.github.com/v3/activity/events/types/#deploymentstatusevent)
### [`deployment_status` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#deployment_status)
**Tags:**
@ -124,7 +124,7 @@ where the data is sourced from.
* 'depState' = `event.deployment_status.state` string
* 'depDescription' = `event.deployment_status.description` string
### [`fork` event](https://developer.github.com/v3/activity/events/types/#forkevent)
### [`fork` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#fork)
**Tags:**
@ -141,7 +141,7 @@ where the data is sourced from.
* 'issues' = `event.repository.open_issues_count` int
* 'forkee' = `event.forkee.repository` string
### [`gollum` event](https://developer.github.com/v3/activity/events/types/#gollumevent)
### [`gollum` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#gollum)
**Tags:**
@ -157,7 +157,7 @@ where the data is sourced from.
* 'forks' = `event.repository.forks_count` int
* 'issues' = `event.repository.open_issues_count` int
### [`issue_comment` event](https://developer.github.com/v3/activity/events/types/#issuecommentevent)
### [`issue_comment` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#issue_comment)
**Tags:**
@ -177,7 +177,7 @@ where the data is sourced from.
* 'comments' = `event.issue.comments` int
* 'body' = `event.comment.body` string
### [`issues` event](https://developer.github.com/v3/activity/events/types/#issuesevent)
### [`issues` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#issues)
**Tags:**
@ -197,7 +197,7 @@ where the data is sourced from.
* 'title' = `event.issue.title` string
* 'comments' = `event.issue.comments` int
### [`member` event](https://developer.github.com/v3/activity/events/types/#memberevent)
### [`member` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#member)
**Tags:**
@ -215,7 +215,7 @@ where the data is sourced from.
* 'newMember' = `event.sender.login` string
* 'newMemberStatus' = `event.sender.site_admin` bool
### [`membership` event](https://developer.github.com/v3/activity/events/types/#membershipevent)
### [`membership` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#membership)
**Tags:**
@ -229,7 +229,7 @@ where the data is sourced from.
* 'newMember' = `event.sender.login` string
* 'newMemberStatus' = `event.sender.site_admin` bool
### [`page_build` event](https://developer.github.com/v3/activity/events/types/#pagebuildevent)
### [`page_build` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#page_build)
**Tags:**
@ -245,7 +245,7 @@ where the data is sourced from.
* 'forks' = `event.repository.forks_count` int
* 'issues' = `event.repository.open_issues_count` int
### [`public` event](https://developer.github.com/v3/activity/events/types/#publicevent)
### [`public` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#public)
**Tags:**
@ -261,7 +261,7 @@ where the data is sourced from.
* 'forks' = `event.repository.forks_count` int
* 'issues' = `event.repository.open_issues_count` int
### [`pull_request_review_comment` event](https://developer.github.com/v3/activity/events/types/#pullrequestreviewcommentevent)
### [`pull_request_review_comment` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#pull_request_review_comment)
**Tags:**
@ -288,7 +288,7 @@ where the data is sourced from.
* 'commentFile' = `event.comment.file` string
* 'comment' = `event.comment.body` string
### [`pull_request` event](https://developer.github.com/v3/activity/events/types/#pullrequestevent)
### [`pull_request` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#pull_request)
**Tags:**
@ -313,7 +313,7 @@ where the data is sourced from.
* 'deletions' = `event.pull_request.deletions` int
* 'changedFiles' = `event.pull_request.changed_files` int
### [`push` event](https://developer.github.com/v3/activity/events/types/#pushevent)
### [`push` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#push)
**Tags:**
@ -332,7 +332,7 @@ where the data is sourced from.
* 'before' = `event.before` string
* 'after' = `event.after` string
### [`repository` event](https://developer.github.com/v3/activity/events/types/#repositoryevent)
### [`repository` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#repository)
**Tags:**
@ -348,7 +348,7 @@ where the data is sourced from.
* 'forks' = `event.repository.forks_count` int
* 'issues' = `event.repository.open_issues_count` int
### [`release` event](https://developer.github.com/v3/activity/events/types/#releaseevent)
### [`release` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#release)
**Tags:**
@ -365,7 +365,7 @@ where the data is sourced from.
* 'issues' = `event.repository.open_issues_count` int
* 'tagName' = `event.release.tag_name` string
### [`status` event](https://developer.github.com/v3/activity/events/types/#statusevent)
### [`status` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#status)
**Tags:**
@ -383,7 +383,7 @@ where the data is sourced from.
* 'commit' = `event.sha` string
* 'state' = `event.state` string
### [`team_add` event](https://developer.github.com/v3/activity/events/types/#teamaddevent)
### [`team_add` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#team_add)
**Tags:**
@ -400,7 +400,7 @@ where the data is sourced from.
* 'issues' = `event.repository.open_issues_count` int
* 'teamName' = `event.team.name` string
### [`watch` event](https://developer.github.com/v3/activity/events/types/#watchevent)
### [`watch` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#watch)
**Tags:**
@ -415,3 +415,42 @@ where the data is sourced from.
* 'stars' = `event.repository.stargazers_count` int
* 'forks' = `event.repository.forks_count` int
* 'issues' = `event.repository.open_issues_count` int
### [`workflow_job` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#workflow_job)
**Tags:**
* 'event' = `headers[X-Github-Event]` string
* 'action' = `event.action` string
* 'repository' = `event.repository.full_name` string
* 'private' = `event.repository.private` bool
* 'user' = `event.sender.login` string
* 'admin' = `event.sender.site_admin` bool
* 'name' = `event.workflow_job.name` string
* 'conclusion' = `event.workflow_job.conclusion` string
**Fields:**
* 'run_attempt' = `event.workflow_job.run_attempt` int
* 'queue_time' = `event.workflow_job.started_at - event.workflow_job.created_at at event.action = in_progress in milliseconds` int
* 'run_time' = `event.workflow_job.completed_at - event.workflow_job.started_at at event.action = completed in milliseconds` int
* 'head_branch' = `event.workflow_job.head_branch` string
### [`workflow_run` event](https://docs.github.com/en/webhooks/webhook-events-and-payloads#workflow_run)
**Tags:**
* 'event' = `headers[X-Github-Event]` string
* 'action' = `event.action` string
* 'repository' = `event.repository.full_name` string
* 'private' = `event.repository.private` bool
* 'user' = `event.sender.login` string
* 'admin' = `event.sender.site_admin` bool
* 'name' = `event.workflow_run.name` string
* 'conclusion' = `event.workflow_run.conclusion` string
**Fields:**
* 'run_attempt' = `event.workflow_run.run_attempt` int
* 'run_time' = `event.workflow_run.completed_at - event.workflow_run.run_started_at at event.action = completed in milliseconds` int
* 'head_branch' = `event.workflow_run.head_branch` string

View File

@ -128,6 +128,10 @@ func (gh *Webhook) newEvent(data []byte, name string) (event, error) {
return generateEvent(data, &teamAddEvent{})
case "watch":
return generateEvent(data, &watchEvent{})
case "workflow_job":
return generateEvent(data, &workflowJobEvent{})
case "workflow_run":
return generateEvent(data, &workflowRunEvent{})
}
return nil, &newEventError{"Not a recognized event type"}
}

View File

@ -3026,3 +3026,547 @@ func watchEventJSON() string {
}
}`
}
func WorkflowJobJSON() string {
return `{
"action": "completed",
"workflow_job": {
"id": 34960636490,
"run_id": 12537003369,
"workflow_name": ".NET",
"head_branch": "feature/test",
"run_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/actions/runs/12537003369",
"run_attempt": 1,
"node_id": "CR_kwDONd0bVc8AAAAII9D6Sg",
"head_sha": "2c4f2526866d85e29bd7caea0791d861a0c713aa",
"url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/actions/jobs/34960636490",
"html_url": "https://github.com/DeusDeorum1/yhome-controller/actions/runs/12537003369/job/34960636490",
"status": "completed",
"conclusion": "success",
"created_at": "2024-12-29T16:28:44Z",
"started_at": "2024-12-29T16:28:50Z",
"completed_at": "2024-12-29T16:29:17Z",
"name": "Run build",
"steps": [
{
"name": "Set up job",
"status": "completed",
"conclusion": "success",
"number": 1,
"started_at": "2024-12-29T16:28:49Z",
"completed_at": "2024-12-29T16:28:50Z"
},
{
"name": "Checkout",
"status": "completed",
"conclusion": "success",
"number": 2,
"started_at": "2024-12-29T16:28:50Z",
"completed_at": "2024-12-29T16:28:51Z"
}
],
"check_run_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/check-runs/34960636490",
"labels": [
"ubuntu-latest"
],
"runner_id": 3,
"runner_name": "GitHub Actions 3",
"runner_group_id": 2,
"runner_group_name": "GitHub Actions"
},
"repository": {
"id": 903682901,
"node_id": "R_kgDONd0bVQ",
"name": "yhome-controller",
"full_name": "DeusDeorum1/yhome-controller",
"private": true,
"owner": {
"login": "DeusDeorum1",
"id": 23059354,
"node_id": "MDQ6VXNlcjIzMDU5MzU0",
"avatar_url": "https://avatars.githubusercontent.com/u/23059354?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/DeusDeorum1",
"html_url": "https://github.com/DeusDeorum1",
"followers_url": "https://api.github.com/users/DeusDeorum1/followers",
"following_url": "https://api.github.com/users/DeusDeorum1/following{/other_user}",
"gists_url": "https://api.github.com/users/DeusDeorum1/gists{/gist_id}",
"starred_url": "https://api.github.com/users/DeusDeorum1/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/DeusDeorum1/subscriptions",
"organizations_url": "https://api.github.com/users/DeusDeorum1/orgs",
"repos_url": "https://api.github.com/users/DeusDeorum1/repos",
"events_url": "https://api.github.com/users/DeusDeorum1/events{/privacy}",
"received_events_url": "https://api.github.com/users/DeusDeorum1/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"html_url": "https://github.com/DeusDeorum1/yhome-controller",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/DeusDeorum1/yhome-controller",
"forks_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/forks",
"keys_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/teams",
"hooks_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/hooks",
"issue_events_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues/events{/number}",
"events_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/events",
"assignees_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/assignees{/user}",
"branches_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/branches{/branch}",
"tags_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/tags",
"blobs_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/statuses/{sha}",
"languages_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/languages",
"stargazers_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/stargazers",
"contributors_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/contributors",
"subscribers_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/subscribers",
"subscription_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/subscription",
"commits_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/contents/{+path}",
"compare_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/merges",
"archive_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/downloads",
"issues_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues{/number}",
"pulls_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/pulls{/number}",
"milestones_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/milestones{/number}",
"notifications_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/labels{/name}",
"releases_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/releases{/id}",
"deployments_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/deployments",
"created_at": "2024-12-15T09:23:35Z",
"updated_at": "2024-12-22T14:25:20Z",
"pushed_at": "2024-12-29T16:28:40Z",
"git_url": "git://github.com/DeusDeorum1/yhome-controller.git",
"ssh_url": "git@github.com:DeusDeorum1/yhome-controller.git",
"clone_url": "https://github.com/DeusDeorum1/yhome-controller.git",
"svn_url": "https://github.com/DeusDeorum1/yhome-controller",
"homepage": null,
"size": 813,
"stargazers_count": 0,
"watchers_count": 0,
"language": "C#",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": false,
"has_pages": false,
"has_discussions": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 0,
"license": null,
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [
],
"visibility": "private",
"forks": 0,
"open_issues": 0,
"watchers": 0,
"default_branch": "develop"
},
"sender": {
"login": "DeusDeorum1",
"id": 23059354,
"node_id": "MDQ6VXNlcjIzMDU5MzU0",
"avatar_url": "https://avatars.githubusercontent.com/u/23059354?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/DeusDeorum1",
"html_url": "https://github.com/DeusDeorum1",
"followers_url": "https://api.github.com/users/DeusDeorum1/followers",
"following_url": "https://api.github.com/users/DeusDeorum1/following{/other_user}",
"gists_url": "https://api.github.com/users/DeusDeorum1/gists{/gist_id}",
"starred_url": "https://api.github.com/users/DeusDeorum1/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/DeusDeorum1/subscriptions",
"organizations_url": "https://api.github.com/users/DeusDeorum1/orgs",
"repos_url": "https://api.github.com/users/DeusDeorum1/repos",
"events_url": "https://api.github.com/users/DeusDeorum1/events{/privacy}",
"received_events_url": "https://api.github.com/users/DeusDeorum1/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
}
}`
}
func WorkflowRunJSON() string {
return `{
"action": "completed",
"workflow_run": {
"id": 12537003369,
"name": ".NET",
"node_id": "WFR_kwLONd0bVc8AAAAC60N9aQ",
"head_branch": "feature/test",
"head_sha": "2c4f2526866d85e29bd7caea0791d861a0c713aa",
"path": ".github/workflows/dotnet.yml",
"display_title": "fix step name (#15)",
"run_number": 52,
"event": "push",
"status": "completed",
"conclusion": "success",
"workflow_id": 133367596,
"check_suite_id": 32519948712,
"check_suite_node_id": "CS_kwDONd0bVc8AAAAHklcJqA",
"url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/actions/runs/12537003369",
"html_url": "https://github.com/DeusDeorum1/yhome-controller/actions/runs/12537003369",
"pull_requests": [
],
"created_at": "2024-12-29T16:28:42Z",
"updated_at": "2024-12-29T16:30:08Z",
"actor": {
"login": "DeusDeorum1",
"id": 23059354,
"node_id": "MDQ6VXNlcjIzMDU5MzU0",
"avatar_url": "https://avatars.githubusercontent.com/u/23059354?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/DeusDeorum1",
"html_url": "https://github.com/DeusDeorum1",
"followers_url": "https://api.github.com/users/DeusDeorum1/followers",
"following_url": "https://api.github.com/users/DeusDeorum1/following{/other_user}",
"gists_url": "https://api.github.com/users/DeusDeorum1/gists{/gist_id}",
"starred_url": "https://api.github.com/users/DeusDeorum1/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/DeusDeorum1/subscriptions",
"organizations_url": "https://api.github.com/users/DeusDeorum1/orgs",
"repos_url": "https://api.github.com/users/DeusDeorum1/repos",
"events_url": "https://api.github.com/users/DeusDeorum1/events{/privacy}",
"received_events_url": "https://api.github.com/users/DeusDeorum1/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"run_attempt": 1,
"referenced_workflows": [
],
"run_started_at": "2024-12-29T16:28:42Z",
"triggering_actor": {
"login": "DeusDeorum1",
"id": 23059354,
"node_id": "MDQ6VXNlcjIzMDU5MzU0",
"avatar_url": "https://avatars.githubusercontent.com/u/23059354?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/DeusDeorum1",
"html_url": "https://github.com/DeusDeorum1",
"followers_url": "https://api.github.com/users/DeusDeorum1/followers",
"following_url": "https://api.github.com/users/DeusDeorum1/following{/other_user}",
"gists_url": "https://api.github.com/users/DeusDeorum1/gists{/gist_id}",
"starred_url": "https://api.github.com/users/DeusDeorum1/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/DeusDeorum1/subscriptions",
"organizations_url": "https://api.github.com/users/DeusDeorum1/orgs",
"repos_url": "https://api.github.com/users/DeusDeorum1/repos",
"events_url": "https://api.github.com/users/DeusDeorum1/events{/privacy}",
"received_events_url": "https://api.github.com/users/DeusDeorum1/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"jobs_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/actions/runs/12537003369/jobs",
"logs_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/actions/runs/12537003369/logs",
"check_suite_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/check-suites/32519948712",
"artifacts_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/actions/runs/12537003369/artifacts",
"cancel_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/actions/runs/12537003369/cancel",
"rerun_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/actions/runs/12537003369/rerun",
"previous_attempt_url": null,
"workflow_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/actions/workflows/133367596",
"head_commit": {
"id": "2c4f2526866d85e29bd7caea0791d861a0c713aa",
"tree_id": "332883d5db0e30b010eac21edf512ba6f005eb92",
"message": "fix step name (#15)",
"timestamp": "2024-12-22T14:25:16Z",
"author": {
"name": "Arina2106",
"email": "77919706+Arina2106@users.noreply.github.com"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com"
}
},
"repository": {
"id": 903682901,
"node_id": "R_kgDONd0bVQ",
"name": "yhome-controller",
"full_name": "DeusDeorum1/yhome-controller",
"private": true,
"owner": {
"login": "DeusDeorum1",
"id": 23059354,
"node_id": "MDQ6VXNlcjIzMDU5MzU0",
"avatar_url": "https://avatars.githubusercontent.com/u/23059354?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/DeusDeorum1",
"html_url": "https://github.com/DeusDeorum1",
"followers_url": "https://api.github.com/users/DeusDeorum1/followers",
"following_url": "https://api.github.com/users/DeusDeorum1/following{/other_user}",
"gists_url": "https://api.github.com/users/DeusDeorum1/gists{/gist_id}",
"starred_url": "https://api.github.com/users/DeusDeorum1/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/DeusDeorum1/subscriptions",
"organizations_url": "https://api.github.com/users/DeusDeorum1/orgs",
"repos_url": "https://api.github.com/users/DeusDeorum1/repos",
"events_url": "https://api.github.com/users/DeusDeorum1/events{/privacy}",
"received_events_url": "https://api.github.com/users/DeusDeorum1/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"html_url": "https://github.com/DeusDeorum1/yhome-controller",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/DeusDeorum1/yhome-controller",
"forks_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/forks",
"keys_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/teams",
"hooks_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/hooks",
"issue_events_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues/events{/number}",
"events_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/events",
"assignees_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/assignees{/user}",
"branches_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/branches{/branch}",
"tags_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/tags",
"blobs_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/statuses/{sha}",
"languages_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/languages",
"stargazers_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/stargazers",
"contributors_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/contributors",
"subscribers_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/subscribers",
"subscription_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/subscription",
"commits_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/contents/{+path}",
"compare_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/merges",
"archive_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/downloads",
"issues_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues{/number}",
"pulls_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/pulls{/number}",
"milestones_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/milestones{/number}",
"notifications_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/labels{/name}",
"releases_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/releases{/id}",
"deployments_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/deployments"
},
"head_repository": {
"id": 903682901,
"node_id": "R_kgDONd0bVQ",
"name": "yhome-controller",
"full_name": "DeusDeorum1/yhome-controller",
"private": true,
"owner": {
"login": "DeusDeorum1",
"id": 23059354,
"node_id": "MDQ6VXNlcjIzMDU5MzU0",
"avatar_url": "https://avatars.githubusercontent.com/u/23059354?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/DeusDeorum1",
"html_url": "https://github.com/DeusDeorum1",
"followers_url": "https://api.github.com/users/DeusDeorum1/followers",
"following_url": "https://api.github.com/users/DeusDeorum1/following{/other_user}",
"gists_url": "https://api.github.com/users/DeusDeorum1/gists{/gist_id}",
"starred_url": "https://api.github.com/users/DeusDeorum1/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/DeusDeorum1/subscriptions",
"organizations_url": "https://api.github.com/users/DeusDeorum1/orgs",
"repos_url": "https://api.github.com/users/DeusDeorum1/repos",
"events_url": "https://api.github.com/users/DeusDeorum1/events{/privacy}",
"received_events_url": "https://api.github.com/users/DeusDeorum1/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"html_url": "https://github.com/DeusDeorum1/yhome-controller",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/DeusDeorum1/yhome-controller",
"forks_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/forks",
"keys_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/teams",
"hooks_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/hooks",
"issue_events_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues/events{/number}",
"events_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/events",
"assignees_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/assignees{/user}",
"branches_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/branches{/branch}",
"tags_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/tags",
"blobs_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/statuses/{sha}",
"languages_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/languages",
"stargazers_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/stargazers",
"contributors_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/contributors",
"subscribers_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/subscribers",
"subscription_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/subscription",
"commits_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/contents/{+path}",
"compare_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/merges",
"archive_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/downloads",
"issues_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues{/number}",
"pulls_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/pulls{/number}",
"milestones_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/milestones{/number}",
"notifications_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/labels{/name}",
"releases_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/releases{/id}",
"deployments_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/deployments"
}
},
"workflow": {
"id": 133367596,
"node_id": "W_kwDONd0bVc4H8wcs",
"name": ".NET",
"path": ".github/workflows/dotnet.yml",
"state": "active",
"created_at": "2024-12-15T09:57:52.000Z",
"updated_at": "2024-12-15T12:11:31.000Z",
"url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/actions/workflows/133367596",
"html_url": "https://github.com/DeusDeorum1/yhome-controller/blob/develop/.github/workflows/dotnet.yml",
"badge_url": "https://github.com/DeusDeorum1/yhome-controller/workflows/.NET/badge.svg"
},
"repository": {
"id": 903682901,
"node_id": "R_kgDONd0bVQ",
"name": "yhome-controller",
"full_name": "DeusDeorum1/yhome-controller",
"private": true,
"owner": {
"login": "DeusDeorum1",
"id": 23059354,
"node_id": "MDQ6VXNlcjIzMDU5MzU0",
"avatar_url": "https://avatars.githubusercontent.com/u/23059354?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/DeusDeorum1",
"html_url": "https://github.com/DeusDeorum1",
"followers_url": "https://api.github.com/users/DeusDeorum1/followers",
"following_url": "https://api.github.com/users/DeusDeorum1/following{/other_user}",
"gists_url": "https://api.github.com/users/DeusDeorum1/gists{/gist_id}",
"starred_url": "https://api.github.com/users/DeusDeorum1/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/DeusDeorum1/subscriptions",
"organizations_url": "https://api.github.com/users/DeusDeorum1/orgs",
"repos_url": "https://api.github.com/users/DeusDeorum1/repos",
"events_url": "https://api.github.com/users/DeusDeorum1/events{/privacy}",
"received_events_url": "https://api.github.com/users/DeusDeorum1/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"html_url": "https://github.com/DeusDeorum1/yhome-controller",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/DeusDeorum1/yhome-controller",
"forks_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/forks",
"keys_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/teams",
"hooks_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/hooks",
"issue_events_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues/events{/number}",
"events_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/events",
"assignees_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/assignees{/user}",
"branches_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/branches{/branch}",
"tags_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/tags",
"blobs_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/statuses/{sha}",
"languages_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/languages",
"stargazers_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/stargazers",
"contributors_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/contributors",
"subscribers_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/subscribers",
"subscription_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/subscription",
"commits_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/contents/{+path}",
"compare_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/merges",
"archive_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/downloads",
"issues_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/issues{/number}",
"pulls_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/pulls{/number}",
"milestones_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/milestones{/number}",
"notifications_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/labels{/name}",
"releases_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/releases{/id}",
"deployments_url": "https://api.github.com/repos/DeusDeorum1/yhome-controller/deployments",
"created_at": "2024-12-15T09:23:35Z",
"updated_at": "2024-12-22T14:25:20Z",
"pushed_at": "2024-12-29T16:28:40Z",
"git_url": "git://github.com/DeusDeorum1/yhome-controller.git",
"ssh_url": "git@github.com:DeusDeorum1/yhome-controller.git",
"clone_url": "https://github.com/DeusDeorum1/yhome-controller.git",
"svn_url": "https://github.com/DeusDeorum1/yhome-controller",
"homepage": null,
"size": 813,
"stargazers_count": 0,
"watchers_count": 0,
"language": "C#",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": false,
"has_pages": false,
"has_discussions": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 0,
"license": null,
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [
],
"visibility": "private",
"forks": 0,
"open_issues": 0,
"watchers": 0,
"default_branch": "develop"
},
"sender": {
"login": "DeusDeorum1",
"id": 23059354,
"node_id": "MDQ6VXNlcjIzMDU5MzU0",
"avatar_url": "https://avatars.githubusercontent.com/u/23059354?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/DeusDeorum1",
"html_url": "https://github.com/DeusDeorum1",
"followers_url": "https://api.github.com/users/DeusDeorum1/followers",
"following_url": "https://api.github.com/users/DeusDeorum1/following{/other_user}",
"gists_url": "https://api.github.com/users/DeusDeorum1/gists{/gist_id}",
"starred_url": "https://api.github.com/users/DeusDeorum1/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/DeusDeorum1/subscriptions",
"organizations_url": "https://api.github.com/users/DeusDeorum1/orgs",
"repos_url": "https://api.github.com/users/DeusDeorum1/repos",
"events_url": "https://api.github.com/users/DeusDeorum1/events{/privacy}",
"received_events_url": "https://api.github.com/users/DeusDeorum1/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
}
}`
}

View File

@ -75,6 +75,26 @@ type pullRequestReviewComment struct {
Comment string `json:"body"`
}
type workflowJob struct {
RunAttempt int `json:"run_attempt"`
HeadBranch string `json:"head_branch"`
CreatedAt time.Time `json:"created_at"`
StartedAt time.Time `json:"started_at"`
CompletedAt time.Time `json:"completed_at"`
Name string `json:"name"`
Conclusion string `json:"conclusion"`
}
type workflowRun struct {
HeadBranch string `json:"head_branch"`
CreatedAt time.Time `json:"created_at"`
RunStartedAt time.Time `json:"run_started_at"`
UpdatedAt time.Time `json:"updated_at"`
RunAttempt int `json:"run_attempt"`
Name string `json:"name"`
Conclusion string `json:"conclusion"`
}
type release struct {
TagName string `json:"tag_name"`
}
@ -646,3 +666,74 @@ func (s watchEvent) newMetric() telegraf.Metric {
m := metric.New(meas, t, f, time.Now())
return m
}
type workflowJobEvent struct {
Action string `json:"action"`
WorkflowJob workflowJob `json:"workflow_job"`
Repository repository `json:"repository"`
Sender sender `json:"sender"`
}
func (s workflowJobEvent) newMetric() telegraf.Metric {
event := "workflow_job"
t := map[string]string{
"event": event,
"action": s.Action,
"repository": s.Repository.Repository,
"private": strconv.FormatBool(s.Repository.Private),
"user": s.Sender.User,
"admin": strconv.FormatBool(s.Sender.Admin),
"name": s.WorkflowJob.Name,
"conclusion": s.WorkflowJob.Conclusion,
}
var runTimeMs int64
var queueTimeMs int64
if s.Action == "in_progress" {
queueTimeMs = s.WorkflowJob.StartedAt.Sub(s.WorkflowJob.CreatedAt).Milliseconds()
}
if s.Action == "completed" {
runTimeMs = s.WorkflowJob.CompletedAt.Sub(s.WorkflowJob.StartedAt).Milliseconds()
}
f := map[string]interface{}{
"run_attempt": s.WorkflowJob.RunAttempt,
"queue_time": queueTimeMs,
"run_time": runTimeMs,
"head_branch": s.WorkflowJob.HeadBranch,
}
m := metric.New(meas, t, f, time.Now())
return m
}
type workflowRunEvent struct {
Action string `json:"action"`
WorkflowRun workflowRun `json:"workflow_run"`
Repository repository `json:"repository"`
Sender sender `json:"sender"`
}
func (s workflowRunEvent) newMetric() telegraf.Metric {
event := "workflow_run"
t := map[string]string{
"event": event,
"action": s.Action,
"repository": s.Repository.Repository,
"private": strconv.FormatBool(s.Repository.Private),
"user": s.Sender.User,
"admin": strconv.FormatBool(s.Sender.Admin),
"name": s.WorkflowRun.Name,
"conclusion": s.WorkflowRun.Conclusion,
}
var runTimeMs int64
if s.Action == "completed" {
runTimeMs = s.WorkflowRun.UpdatedAt.Sub(s.WorkflowRun.RunStartedAt).Milliseconds()
}
f := map[string]interface{}{
"run_attempt": s.WorkflowRun.RunAttempt,
"run_time": runTimeMs,
"head_branch": s.WorkflowRun.HeadBranch,
}
m := metric.New(meas, t, f, time.Now())
return m
}

View File

@ -126,6 +126,14 @@ func TestEventWithSignatureSuccess(t *testing.T) {
githubWebhookRequestWithSignature(t, "watch", watchEventJSON(), generateSignature("signature", []byte(watchEventJSON())), http.StatusOK)
}
func TestWorkflowJob(t *testing.T) {
githubWebhookRequest(t, "workflow_job", WorkflowJobJSON())
}
func TestWorkflowRun(t *testing.T) {
githubWebhookRequest(t, "workflow_run", WorkflowRunJSON())
}
func TestCheckSignatureSuccess(t *testing.T) {
if !checkSignature("my_little_secret", []byte("random-signature-body"), "sha1=3dca279e731c97c38e3019a075dee9ebbd0a99f0") {
t.Errorf("check signature failed")