From d46d0540d074d34ed2a9808ff2be25514e4c2132 Mon Sep 17 00:00:00 2001 From: bircni Date: Tue, 30 Jun 2026 21:59:30 +0200 Subject: [PATCH] fix(actions): include all aggregable run statuses in status filter (#38280) The **Status** filter dropdown on the repository Actions run list does not let you filter for **Blocked** runs (nor **Cancelled** or **Skipped**). These statuses are missing from the dropdown even though a run can legitimately end up in any of them. A run's status is computed by `aggregateJobStatus`, which can return `Blocked`, `Cancelled` and `Skipped`. Because the filter dropdown only offered Success, Failure, Waiting, Running and Cancelling, runs in those other states existed but were impossible to filter for. --- models/actions/run_list.go | 4 ++-- models/actions/run_list_test.go | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/models/actions/run_list.go b/models/actions/run_list.go index 6f836d3e114..e0f70f626d3 100644 --- a/models/actions/run_list.go +++ b/models/actions/run_list.go @@ -135,8 +135,8 @@ type StatusInfo struct { // GetStatusInfoList returns a slice of StatusInfo func GetStatusInfoList(ctx context.Context, lang translation.Locale) []StatusInfo { - // same as those in aggregateJobStatus - allStatus := []Status{StatusSuccess, StatusFailure, StatusWaiting, StatusRunning, StatusCancelling} + // same as those in aggregateJobStatus (StatusUnknown excluded; it's the "shouldn't happen" fallback) + allStatus := []Status{StatusSuccess, StatusFailure, StatusCancelled, StatusSkipped, StatusWaiting, StatusRunning, StatusBlocked, StatusCancelling} statusInfoList := make([]StatusInfo, 0, len(allStatus)) for _, s := range allStatus { statusInfoList = append(statusInfoList, StatusInfo{ diff --git a/models/actions/run_list_test.go b/models/actions/run_list_test.go index 556896d1074..ce8d23182f0 100644 --- a/models/actions/run_list_test.go +++ b/models/actions/run_list_test.go @@ -73,8 +73,11 @@ func TestGetStatusInfoList(t *testing.T) { assert.Equal(t, []StatusInfo{ {Status: int(StatusSuccess), StatusName: StatusSuccess.String(), DisplayedStatus: "actions.status.success"}, {Status: int(StatusFailure), StatusName: StatusFailure.String(), DisplayedStatus: "actions.status.failure"}, + {Status: int(StatusCancelled), StatusName: StatusCancelled.String(), DisplayedStatus: "actions.status.cancelled"}, + {Status: int(StatusSkipped), StatusName: StatusSkipped.String(), DisplayedStatus: "actions.status.skipped"}, {Status: int(StatusWaiting), StatusName: StatusWaiting.String(), DisplayedStatus: "actions.status.waiting"}, {Status: int(StatusRunning), StatusName: StatusRunning.String(), DisplayedStatus: "actions.status.running"}, + {Status: int(StatusBlocked), StatusName: StatusBlocked.String(), DisplayedStatus: "actions.status.blocked"}, {Status: int(StatusCancelling), StatusName: StatusCancelling.String(), DisplayedStatus: "actions.status.cancelling"}, }, statusInfoList) }