From 92863bb1035530b97609e720a04b62dfe5bd98f0 Mon Sep 17 00:00:00 2001 From: Andreas Ahlenstorf Date: Sat, 9 May 2026 02:31:03 +0200 Subject: [PATCH] feat: expose run_id in ...actions/runners/jobs endpoint (#12480) Include `run_id` in the responses emitted by all `...actions/runners/jobs` endpoints. Helps with correlating pending jobs with other jobs and the runs they belong to. ## Checklist The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. All work and communication must conform to Forgejo's [AI Agreement](https://codeberg.org/forgejo/governance/src/branch/main/AIAgreement.md). There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org). ### Tests for Go changes (can be removed for JavaScript changes) - I added test coverage for Go changes... - [x] in their respective `*_test.go` for unit tests. - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server. - I ran... - [x] `make pr-go` before pushing ### Tests for JavaScript changes (can be removed for Go changes) - I added test coverage for JavaScript changes... - [ ] in `web_src/js/*.test.js` if it can be unit tested. - [ ] in `tests/e2e/*.test.e2e.js` if it requires interactions with a live Forgejo server (see also the [developer guide for JavaScript testing](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md#end-to-end-tests)). ### Documentation - [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change. - [x] I did not document these changes and I do not expect someone else to do it. ### Release notes - [x] This change will be noticed by a Forgejo user or admin (feature, bug fix, performance, etc.). I suggest to include a release note for this change. - [ ] This change is not visible to a Forgejo user or admin (refactor, dependency upgrade, etc.). I think there is no need to add a release note for this change. *The decision if the pull request will be shown in the release notes is up to the mergers / release team.* The content of the `release-notes/.md` file will serve as the basis for the release notes. If the file does not exist, the title of the pull request will be used instead. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12480 Reviewed-by: Mathieu Fenniak --- modules/structs/action.go | 2 ++ services/convert/action.go | 1 + templates/swagger/v1_json.tmpl | 6 ++++++ tests/integration/api_admin_actions_test.go | 1 + tests/integration/api_org_actions_test.go | 1 + tests/integration/api_repo_actions_test.go | 3 +++ tests/integration/api_user_actions_test.go | 1 + 7 files changed, 15 insertions(+) diff --git a/modules/structs/action.go b/modules/structs/action.go index 1f015a08fb..82c530cdf9 100644 --- a/modules/structs/action.go +++ b/modules/structs/action.go @@ -12,6 +12,8 @@ import ( type ActionRunJob struct { // Identifier of this job. ID int64 `json:"id"` + // Identifier of the workflow run this job belongs to. + RunID int64 `json:"run_id"` // How many times the job has been attempted including the current attempt. Attempt int64 `json:"attempt"` // Opaque identifier that uniquely identifies a single attempt of a job. diff --git a/services/convert/action.go b/services/convert/action.go index dd21b9fb87..da40ac7916 100644 --- a/services/convert/action.go +++ b/services/convert/action.go @@ -71,6 +71,7 @@ func ToActionRunJob(job *actions_model.ActionRunJob) *api.ActionRunJob { return &api.ActionRunJob{ ID: job.ID, + RunID: job.RunID, Attempt: job.Attempt, Handle: job.Handle, RepoID: job.RepoID, diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 45159b7c71..e0afb22d54 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -22873,6 +22873,12 @@ "format": "int64", "x-go-name": "RepoID" }, + "run_id": { + "description": "Identifier of the workflow run this job belongs to.", + "type": "integer", + "format": "int64", + "x-go-name": "RunID" + }, "runs_on": { "description": "the action run job labels to run on", "type": "array", diff --git a/tests/integration/api_admin_actions_test.go b/tests/integration/api_admin_actions_test.go index 173e22ca91..67fc643761 100644 --- a/tests/integration/api_admin_actions_test.go +++ b/tests/integration/api_admin_actions_test.go @@ -46,6 +46,7 @@ func TestAPIAdminActionsGetJobs(t *testing.T) { expected := api.ActionRunJob{ ID: 393, + RunID: 891, Attempt: 1, Handle: "18e9cf40-c2f6-409f-b832-b945ea7dc79b", RepoID: 1, diff --git a/tests/integration/api_org_actions_test.go b/tests/integration/api_org_actions_test.go index 08de84cdf2..eb96435a45 100644 --- a/tests/integration/api_org_actions_test.go +++ b/tests/integration/api_org_actions_test.go @@ -37,6 +37,7 @@ func TestActionsAPISearchActionJobs_OrgRunner(t *testing.T) { job395 := api.ActionRunJob{ ID: 395, + RunID: 891, Attempt: 1, Handle: "40317a2f-2f00-4a82-8cc4-57347989a493", RepoID: 1, diff --git a/tests/integration/api_repo_actions_test.go b/tests/integration/api_repo_actions_test.go index ccf333191e..605d55c469 100644 --- a/tests/integration/api_repo_actions_test.go +++ b/tests/integration/api_repo_actions_test.go @@ -52,6 +52,7 @@ func TestActionsAPISearchActionJobs_RepoRunner(t *testing.T) { job393 := api.ActionRunJob{ ID: 393, + RunID: 891, Attempt: 1, Handle: "18e9cf40-c2f6-409f-b832-b945ea7dc79b", RepoID: 1, @@ -713,6 +714,7 @@ func TestActionsAPIListActionRunJobs(t *testing.T) { if expected.ID == 195 { assert.Equal(t, &api.ActionRunJob{ ID: 195, + RunID: 793, Attempt: 1, Handle: "", RepoID: 4, @@ -726,6 +728,7 @@ func TestActionsAPIListActionRunJobs(t *testing.T) { } else if expected.ID == 197 { assert.Equal(t, &api.ActionRunJob{ ID: 197, + RunID: 895, Attempt: 0, Handle: "", RepoID: 4, diff --git a/tests/integration/api_user_actions_test.go b/tests/integration/api_user_actions_test.go index b9a0b16ab4..91bd8c4be1 100644 --- a/tests/integration/api_user_actions_test.go +++ b/tests/integration/api_user_actions_test.go @@ -38,6 +38,7 @@ func TestActionsAPISearchActionJobs_UserRunner(t *testing.T) { job394 := api.ActionRunJob{ ID: 394, + RunID: 891, Attempt: 2, Handle: "a723d3e3-49a1-4e6b-947f-e987e60bfbd6", RepoID: 1,