-
-
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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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