Skip to content

Commit 9c11690

Browse files
committed
fix(actions): ensure step status reflects individual task step status in workflow jobs
1 parent 3e69d6a commit 9c11690

2 files changed

Lines changed: 60 additions & 1 deletion

File tree

services/convert/action_test.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"testing"
1010

1111
actions_model "code.gitea.io/gitea/models/actions"
12+
db "code.gitea.io/gitea/models/db"
1213
repo_model "code.gitea.io/gitea/models/repo"
1314
"code.gitea.io/gitea/models/unit"
1415
"code.gitea.io/gitea/models/unittest"
@@ -124,3 +125,61 @@ func TestToActionWorkflowRun_UsesTriggerEvent(t *testing.T) {
124125
require.NoError(t, err)
125126
assert.Equal(t, "schedule", apiRun.Event)
126127
}
128+
129+
func TestToActionWorkflowJob_StepStatusIsIndependentOfJobStatus(t *testing.T) {
130+
assert.NoError(t, unittest.PrepareTestDatabase())
131+
ctx := t.Context()
132+
133+
run := &actions_model.ActionRun{
134+
ID: 9001,
135+
RepoID: 2,
136+
TriggerUserID: 1,
137+
WorkflowID: "test.yaml",
138+
Index: 9001,
139+
Ref: "refs/heads/main",
140+
CommitSHA: "c2d72f548424103f01ee1dc02889c1e2bff816b0",
141+
Event: "push",
142+
TriggerEvent: "push",
143+
Status: actions_model.StatusFailure,
144+
}
145+
require.NoError(t, db.Insert(ctx, run))
146+
147+
task := &actions_model.ActionTask{
148+
ID: 9001,
149+
JobID: 9001,
150+
RepoID: 2,
151+
Status: actions_model.StatusFailure,
152+
TokenHash: "test_token_hash_9001_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
153+
TokenSalt: "testsalt",
154+
TokenLastEight: "testlst1",
155+
}
156+
require.NoError(t, db.Insert(ctx, task))
157+
158+
job := &actions_model.ActionRunJob{
159+
ID: 9001,
160+
RunID: 9001,
161+
RepoID: 2,
162+
Name: "test-job",
163+
Attempt: 1,
164+
JobID: "test-job",
165+
TaskID: 9001,
166+
Status: actions_model.StatusFailure,
167+
}
168+
require.NoError(t, db.Insert(ctx, job))
169+
170+
require.NoError(t, db.Insert(ctx,
171+
&actions_model.ActionTaskStep{TaskID: 9001, RepoID: 2, Index: 0, Name: "step-success", Status: actions_model.StatusSuccess},
172+
&actions_model.ActionTaskStep{TaskID: 9001, RepoID: 2, Index: 1, Name: "step-failure", Status: actions_model.StatusFailure},
173+
))
174+
175+
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
176+
177+
apiJob, err := ToActionWorkflowJob(ctx, repo, task, job)
178+
require.NoError(t, err)
179+
require.Len(t, apiJob.Steps, 2)
180+
181+
assert.Equal(t, "completed", apiJob.Steps[0].Status, "step 0 status")
182+
assert.Equal(t, "success", apiJob.Steps[0].Conclusion, "step 0 conclusion (succeeded before the failure)")
183+
assert.Equal(t, "completed", apiJob.Steps[1].Status, "step 1 status")
184+
assert.Equal(t, "failure", apiJob.Steps[1].Conclusion, "step 1 conclusion")
185+
}

services/convert/convert.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ func ToActionWorkflowJob(ctx context.Context, repo *repo_model.Repository, task
390390
runnerName = runner.Name
391391
}
392392
for i, step := range task.Steps {
393-
stepStatus, stepConclusion := ToActionsStatus(job.Status)
393+
stepStatus, stepConclusion := ToActionsStatus(step.Status)
394394
steps = append(steps, &api.ActionWorkflowStep{
395395
Name: step.Name,
396396
Number: int64(i),

0 commit comments

Comments
 (0)