-
-
Notifications
You must be signed in to change notification settings - Fork 5.8k
Add workflow_job webhook #33694
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add workflow_job webhook #33694
Conversation
fixup initial working draft Add more fields More Complete
BTW, I might need help write tests these for webhooks. This can get complex for me. Example Webhooks (two jobs, one depends on the other){
"action": "queued",
"workflow_job": {
"id": 344,
"run_id": 825,
"run_url": "http://localhost:3000/test/private-repo/actions/runs/10",
"name": "download",
"labels": [
"ephemeral"
],
"run_attempt": 2,
"head_sha": "a33e70fae58cce6ddf3a3e4c33e7be4fe5ea1533",
"head_branch": "ephemeral",
"runner_id": 0,
"runner_name": "",
"steps": null,
"created_at": "2025-02-23T14:51:50Z",
"started_at": "1970-01-01T00:00:00Z",
"completed_at": "1970-01-01T00:00:00Z"
},
"repository": {
"id": 65,
"owner": {
"id": 43,
"login": "test",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "test@test.com",
"avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
"html_url": "http://localhost:3000/test",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2025-02-10T13:25:00+01:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test"
},
"name": "private-repo",
"full_name": "test/private-repo",
"description": "",
"empty": false,
"private": true,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 33,
"language": "",
"languages_url": "http://localhost:3000/api/v1/repos/test/private-repo/languages",
"html_url": "http://localhost:3000/test/private-repo",
"url": "http://localhost:3000/api/v1/repos/test/private-repo",
"link": "",
"ssh_url": "christopher@localhost:test/private-repo.git",
"clone_url": "http://localhost:3000/test/private-repo.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2025-02-10T20:40:44+01:00",
"updated_at": "2025-02-23T19:37:50+01:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": [],
"licenses": null
},
"sender": {
"id": 43,
"login": "test",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "test@noreply.localhost",
"avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
"html_url": "http://localhost:3000/test",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2025-02-10T13:25:00+01:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test"
}
} {
"action": "completed",
"workflow_job": {
"id": 343,
"run_id": 825,
"run_url": "http://localhost:3000/test/private-repo/actions/runs/10",
"name": "_",
"labels": [
"ephemeral"
],
"run_attempt": 3,
"head_sha": "a33e70fae58cce6ddf3a3e4c33e7be4fe5ea1533",
"head_branch": "ephemeral",
"conclusion": "success",
"runner_id": 194,
"runner_name": "",
"steps": [
{
"name": "christopherhx/gitea-upload-artifact@v4",
"number": 0,
"conclusion": "success",
"started_at": "2025-02-23T18:37:48Z",
"completed_at": "2025-02-23T18:37:49Z"
}
],
"created_at": "2025-02-23T14:51:50Z",
"started_at": "2025-02-23T18:37:48Z",
"completed_at": "2025-02-23T18:37:49Z"
},
"repository": {
"id": 65,
"owner": {
"id": 43,
"login": "test",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "test@test.com",
"avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
"html_url": "http://localhost:3000/test",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2025-02-10T13:25:00+01:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test"
},
"name": "private-repo",
"full_name": "test/private-repo",
"description": "",
"empty": false,
"private": true,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 33,
"language": "",
"languages_url": "http://localhost:3000/api/v1/repos/test/private-repo/languages",
"html_url": "http://localhost:3000/test/private-repo",
"url": "http://localhost:3000/api/v1/repos/test/private-repo",
"link": "",
"ssh_url": "christopher@localhost:test/private-repo.git",
"clone_url": "http://localhost:3000/test/private-repo.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2025-02-10T20:40:44+01:00",
"updated_at": "2025-02-23T19:37:49+01:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": [],
"licenses": null
},
"sender": {
"id": 43,
"login": "test",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "test@noreply.localhost",
"avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
"html_url": "http://localhost:3000/test",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2025-02-10T13:25:00+01:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test"
}
} {
"action": "in_progress",
"workflow_job": {
"id": 343,
"run_id": 825,
"run_url": "http://localhost:3000/test/private-repo/actions/runs/10",
"name": "_",
"labels": [
"ephemeral"
],
"run_attempt": 3,
"head_sha": "a33e70fae58cce6ddf3a3e4c33e7be4fe5ea1533",
"head_branch": "ephemeral",
"runner_id": 194,
"runner_name": "",
"steps": [
{
"name": "christopherhx/gitea-upload-artifact@v4",
"number": 0,
"started_at": "1970-01-01T00:00:00Z",
"completed_at": "1970-01-01T00:00:00Z"
}
],
"created_at": "2025-02-23T14:51:50Z",
"started_at": "2025-02-23T18:37:48Z",
"completed_at": "1970-01-01T00:00:00Z"
},
"repository": {
"id": 65,
"owner": {
"id": 43,
"login": "test",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "test@test.com",
"avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
"html_url": "http://localhost:3000/test",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2025-02-10T13:25:00+01:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test"
},
"name": "private-repo",
"full_name": "test/private-repo",
"description": "",
"empty": false,
"private": true,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 33,
"language": "",
"languages_url": "http://localhost:3000/api/v1/repos/test/private-repo/languages",
"html_url": "http://localhost:3000/test/private-repo",
"url": "http://localhost:3000/api/v1/repos/test/private-repo",
"link": "",
"ssh_url": "christopher@localhost:test/private-repo.git",
"clone_url": "http://localhost:3000/test/private-repo.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2025-02-10T20:40:44+01:00",
"updated_at": "2025-02-23T19:37:46+01:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": [],
"licenses": null
},
"sender": {
"id": 43,
"login": "test",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "test@noreply.localhost",
"avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
"html_url": "http://localhost:3000/test",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2025-02-10T13:25:00+01:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test"
}
} {
"action": "waiting",
"workflow_job": {
"id": 344,
"run_id": 825,
"run_url": "http://localhost:3000/test/private-repo/actions/runs/10",
"name": "download",
"labels": [
"ephemeral"
],
"run_attempt": 2,
"head_sha": "a33e70fae58cce6ddf3a3e4c33e7be4fe5ea1533",
"head_branch": "ephemeral",
"runner_id": 0,
"runner_name": "",
"steps": null,
"created_at": "2025-02-23T14:51:50Z",
"started_at": "1970-01-01T00:00:00Z",
"completed_at": "1970-01-01T00:00:00Z"
},
"repository": {
"id": 65,
"owner": {
"id": 43,
"login": "test",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "test@test.com",
"avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
"html_url": "http://localhost:3000/test",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2025-02-10T13:25:00+01:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test"
},
"name": "private-repo",
"full_name": "test/private-repo",
"description": "",
"empty": false,
"private": true,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 33,
"language": "",
"languages_url": "http://localhost:3000/api/v1/repos/test/private-repo/languages",
"html_url": "http://localhost:3000/test/private-repo",
"url": "http://localhost:3000/api/v1/repos/test/private-repo",
"link": "",
"ssh_url": "christopher@localhost:test/private-repo.git",
"clone_url": "http://localhost:3000/test/private-repo.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2025-02-10T20:40:44+01:00",
"updated_at": "2025-02-23T16:38:21+01:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": [],
"licenses": null
},
"sender": {
"id": 43,
"login": "test",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "test@noreply.localhost",
"avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
"html_url": "http://localhost:3000/test",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2025-02-10T13:25:00+01:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test"
}
} {
"action": "queued",
"workflow_job": {
"id": 343,
"run_id": 825,
"run_url": "http://localhost:3000/test/private-repo/actions/runs/10",
"name": "_",
"labels": [
"ephemeral"
],
"run_attempt": 2,
"head_sha": "a33e70fae58cce6ddf3a3e4c33e7be4fe5ea1533",
"head_branch": "ephemeral",
"runner_id": 0,
"runner_name": "",
"steps": null,
"created_at": "2025-02-23T14:51:50Z",
"started_at": "1970-01-01T00:00:00Z",
"completed_at": "1970-01-01T00:00:00Z"
},
"repository": {
"id": 65,
"owner": {
"id": 43,
"login": "test",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "test@test.com",
"avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
"html_url": "http://localhost:3000/test",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2025-02-10T13:25:00+01:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test"
},
"name": "private-repo",
"full_name": "test/private-repo",
"description": "",
"empty": false,
"private": true,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 33,
"language": "",
"languages_url": "http://localhost:3000/api/v1/repos/test/private-repo/languages",
"html_url": "http://localhost:3000/test/private-repo",
"url": "http://localhost:3000/api/v1/repos/test/private-repo",
"link": "",
"ssh_url": "christopher@localhost:test/private-repo.git",
"clone_url": "http://localhost:3000/test/private-repo.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2025-02-10T20:40:44+01:00",
"updated_at": "2025-02-23T16:38:21+01:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": [],
"licenses": null
},
"sender": {
"id": 43,
"login": "test",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "test@noreply.localhost",
"avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
"html_url": "http://localhost:3000/test",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2025-02-10T13:25:00+01:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test"
}
} |
There are some examples in |
* add URL field * add HTMLURL field * fix run_url to return api url instead of html url
Notice for myself: Possible missing completed event for scenario: CancelPreviousJobs Hmm, adding code to this method creates an import cycle if I call the webhook not so easy than I expected. |
This comment was marked as outdated.
This comment was marked as outdated.
Pull request was converted to draft
yes this should be done, I made it a draft until I can update this PR by merging main. The order doesn't matter, but either PR should account the change of the other one to avoid a needless commit |
@ChristopherHX please fix the merge conflicts. 🍵 |
…w_job_webhook_bp
Applied bug fix to this PR, so auto concurrency cancellation invokes the workflow_job event as well |
* giteaofficial/main: Fix various Fomantic UI and htmx problems (go-gitea#33851) Add workflow_job webhook (go-gitea#33694) Fix file icon mapping (go-gitea#33855) Drop fomantic build (go-gitea#33845) Fix auto concurrency cancellation skips commit status updates (go-gitea#33764) Fix test code (go-gitea#33829) Remove "noscript" tag from html head (go-gitea#33846) Fix material icon & diff highlight (go-gitea#33844) Fix LFS URL (go-gitea#33840) Add material icons for file list (go-gitea#33837)
Provide external Integration information about the Queue lossly based on https://docs.github.com/en/webhooks/webhook-events-and-payloads?actionType=completed#workflow_job
Naming conflicts between GitHub & Gitea are here, Blocked => Waiting, Waiting => Queued
Rationale Enhancement for ephemeral runners management #33570