0
0
mirror of https://github.com/go-gitea/gitea.git synced 2026-05-08 08:04:01 +02:00

fix: use TriggerEvent instead of Event in workflow runs API response for scheduled runs (#37288)

## Summary

Fixes #37252

The `/api/v1/repos/{owner}/{repo}/actions/runs` endpoint was returning
`event: "push"` for workflow runs triggered by `schedule:` (cron),
instead
of `event: "schedule"`.

## Root Cause

`ActionRun` has two separate fields:
- `Event` — the workflow registration event (e.g. `push`, set when the
workflow file was first pushed)
- `TriggerEvent` — the actual event that triggered the run (e.g.
`schedule`)

`ToActionWorkflowRun` in `services/convert/action.go` was serializing
`run.Event` into the API response instead of `run.TriggerEvent`, causing
scheduled runs to be indistinguishable from push events via the API.

This was already asymmetric — the tasks/jobs API correctly used
`TriggerEvent`.

## Fix

Changed `ToActionWorkflowRun` to use `run.TriggerEvent` for the `event`
field in the API response, consistent with how the jobs API works.

## Before

`event: "push"` returned for all scheduled runs:

<img width="1112" height="191" alt="Screenshot 2026-04-19 115642"
src="https://github.com/user-attachments/assets/c0a169f5-bbd9-4f5d-9474-e4c3795110e4"
/>

## After

`event: "schedule"` correctly returned for scheduled runs:

<img width="890" height="166" alt="Screenshot 2026-04-19 121723"
src="https://github.com/user-attachments/assets/860e99ac-0935-4a43-86a1-7b60f8113480"
/>


## Testing

- Added unit test `TestToActionWorkflowRun_UsesTriggerEvent` in
  `services/convert/action_test.go` that explicitly verifies the API
  returns `TriggerEvent` and not `Event` for a scheduled run.
- Manually verified via the API against a live Gitea instance with a
  `cron: "* * * * *"` workflow.

---------

Co-authored-by: Nicolas <bircni@icloud.com>
This commit is contained in:
Kalash Thakare ☯︎ 2026-04-22 02:44:34 +05:30 committed by GitHub
parent f1644fc5e2
commit c69cbb75bf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 23 additions and 2 deletions

View File

@ -89,7 +89,7 @@
ref: "refs/heads/test" ref: "refs/heads/test"
commit_sha: "c2d72f548424103f01ee1dc02889c1e2bff816b0" commit_sha: "c2d72f548424103f01ee1dc02889c1e2bff816b0"
event: "push" event: "push"
trigger_event: "push" trigger_event: "schedule"
is_fork_pull_request: 0 is_fork_pull_request: 0
status: 1 status: 1
started: 1683636528 started: 1683636528

View File

@ -8,8 +8,10 @@ import (
"strings" "strings"
"testing" "testing"
actions_model "code.gitea.io/gitea/models/actions"
repo_model "code.gitea.io/gitea/models/repo" repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unit" "code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/git/gitcmd" "code.gitea.io/gitea/modules/git/gitcmd"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
@ -107,3 +109,18 @@ func TestGetActionWorkflow_FallbackRef(t *testing.T) {
assert.ErrorIs(t, err, util.ErrNotExist) assert.ErrorIs(t, err, util.ErrNotExist)
}) })
} }
func TestToActionWorkflowRun_UsesTriggerEvent(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
run := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionRun{ID: 803})
// Scheduled runs keep Event as the registration event (push) and use TriggerEvent as the real trigger.
run.Event = "push"
run.TriggerEvent = "schedule"
apiRun, err := ToActionWorkflowRun(t.Context(), repo, run)
require.NoError(t, err)
assert.Equal(t, "schedule", apiRun.Event)
}

View File

@ -260,7 +260,7 @@ func ToActionWorkflowRun(ctx context.Context, repo *repo_model.Repository, run *
RunNumber: run.Index, RunNumber: run.Index,
StartedAt: run.Started.AsLocalTime(), StartedAt: run.Started.AsLocalTime(),
CompletedAt: run.Stopped.AsLocalTime(), CompletedAt: run.Stopped.AsLocalTime(),
Event: string(run.Event), Event: run.TriggerEvent,
DisplayTitle: run.Title, DisplayTitle: run.Title,
HeadBranch: git.RefName(run.Ref).BranchName(), HeadBranch: git.RefName(run.Ref).BranchName(),
HeadSha: run.CommitSHA, HeadSha: run.CommitSHA,

View File

@ -44,6 +44,10 @@ func testAPIWorkflowRunBasic(t *testing.T, apiRootURL, userUsername string, runI
foundRun := false foundRun := false
for _, run := range runnerList.Entries { for _, run := range runnerList.Entries {
if run.ID == 802 {
// Fixture stores registration event (push) and schedule as trigger; API must expose the trigger as Event.
assert.Equal(t, "schedule", run.Event)
}
// Verify filtering works // Verify filtering works
verifyWorkflowRunCanbeFoundWithStatusFilter(t, apiRunsURL, token, run.ID, "", run.Status, "", "", "", "") verifyWorkflowRunCanbeFoundWithStatusFilter(t, apiRunsURL, token, run.ID, "", run.Status, "", "", "", "")
verifyWorkflowRunCanbeFoundWithStatusFilter(t, apiRunsURL, token, run.ID, run.Conclusion, "", "", "", "", "") verifyWorkflowRunCanbeFoundWithStatusFilter(t, apiRunsURL, token, run.ID, run.Conclusion, "", "", "", "", "")