From 8726113e455eddac1f8370f60013dfdce831c51c Mon Sep 17 00:00:00 2001 From: nienjiuntai Date: Sun, 22 Jun 2025 21:25:24 +0800 Subject: [PATCH 1/3] Enhance job status aggregation logic - Updated the condition for returning `StatusFailure` to ensure it only occurs when all jobs are done. --- models/actions/run_job.go | 4 ++-- models/actions/run_job_status_test.go | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/models/actions/run_job.go b/models/actions/run_job.go index c0df19b020c2a..bad895036d16f 100644 --- a/models/actions/run_job.go +++ b/models/actions/run_job.go @@ -185,10 +185,10 @@ func AggregateJobStatus(jobs []*ActionRunJob) Status { return StatusSuccess case hasCancelled: return StatusCancelled - case hasFailure: - return StatusFailure case hasRunning: return StatusRunning + case hasFailure: + return StatusFailure case hasWaiting: return StatusWaiting case hasBlocked: diff --git a/models/actions/run_job_status_test.go b/models/actions/run_job_status_test.go index 523d38327e4cc..3dd35bd54be24 100644 --- a/models/actions/run_job_status_test.go +++ b/models/actions/run_job_status_test.go @@ -59,13 +59,12 @@ func TestAggregateJobStatus(t *testing.T) { {[]Status{StatusCancelled, StatusBlocked}, StatusCancelled}, // failure with other status, fail fast - // Should "running" win? Maybe no: old code does make "running" win, but GitHub does fail fast. {[]Status{StatusFailure}, StatusFailure}, {[]Status{StatusFailure, StatusSuccess}, StatusFailure}, {[]Status{StatusFailure, StatusSkipped}, StatusFailure}, {[]Status{StatusFailure, StatusCancelled}, StatusCancelled}, {[]Status{StatusFailure, StatusWaiting}, StatusFailure}, - {[]Status{StatusFailure, StatusRunning}, StatusFailure}, + {[]Status{StatusFailure, StatusRunning}, StatusRunning}, {[]Status{StatusFailure, StatusBlocked}, StatusFailure}, // skipped with other status From d7179b6d6debf1f7dee54f33f3df3c43b2f3abb3 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Tue, 24 Jun 2025 10:47:38 +0800 Subject: [PATCH 2/3] Update models/actions/run_job_status_test.go Signed-off-by: wxiaoguang --- models/actions/run_job_status_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/actions/run_job_status_test.go b/models/actions/run_job_status_test.go index 3dd35bd54be24..fde0daf378e6d 100644 --- a/models/actions/run_job_status_test.go +++ b/models/actions/run_job_status_test.go @@ -58,7 +58,8 @@ func TestAggregateJobStatus(t *testing.T) { {[]Status{StatusCancelled, StatusRunning}, StatusCancelled}, {[]Status{StatusCancelled, StatusBlocked}, StatusCancelled}, - // failure with other status, fail fast + // failure with other status, usually fail fast, but "running" wins to match GitHub's behavior + // anther reason that we can't make "failure" wins over "running": it would cause a weird behavior that user cannot cancel a workflow or get current running workflows correctly by filter after a job fail. {[]Status{StatusFailure}, StatusFailure}, {[]Status{StatusFailure, StatusSuccess}, StatusFailure}, {[]Status{StatusFailure, StatusSkipped}, StatusFailure}, From 0161c4a6a4693e7250d5c4fd36c344edccd9dff7 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Tue, 24 Jun 2025 14:26:27 +0800 Subject: [PATCH 3/3] Update models/actions/run_job_status_test.go Co-authored-by: Lunny Xiao Signed-off-by: wxiaoguang --- models/actions/run_job_status_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/actions/run_job_status_test.go b/models/actions/run_job_status_test.go index fde0daf378e6d..2a5eb00a6f808 100644 --- a/models/actions/run_job_status_test.go +++ b/models/actions/run_job_status_test.go @@ -59,7 +59,7 @@ func TestAggregateJobStatus(t *testing.T) { {[]Status{StatusCancelled, StatusBlocked}, StatusCancelled}, // failure with other status, usually fail fast, but "running" wins to match GitHub's behavior - // anther reason that we can't make "failure" wins over "running": it would cause a weird behavior that user cannot cancel a workflow or get current running workflows correctly by filter after a job fail. + // another reason that we can't make "failure" wins over "running": it would cause a weird behavior that user cannot cancel a workflow or get current running workflows correctly by filter after a job fail. {[]Status{StatusFailure}, StatusFailure}, {[]Status{StatusFailure, StatusSuccess}, StatusFailure}, {[]Status{StatusFailure, StatusSkipped}, StatusFailure},