From 6b0a767a66334a8ac3e94a3be928b10971876be8 Mon Sep 17 00:00:00 2001 From: charles7668 Date: Thu, 7 Mar 2024 23:51:27 +0800 Subject: [PATCH 1/3] Fixing the issue when status check per rule matches multiple actions. (#29628) --- services/pull/commit_status.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/services/pull/commit_status.go b/services/pull/commit_status.go index 3282f4f379a01..ad88030fe8489 100644 --- a/services/pull/commit_status.go +++ b/services/pull/commit_status.go @@ -35,9 +35,9 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus, } } - for _, commitStatus := range commitStatuses { + for _, gp := range requiredContextsGlob { var targetStatus structs.CommitStatusState - for _, gp := range requiredContextsGlob { + for _, commitStatus := range commitStatuses { if gp.Match(commitStatus.Context) { targetStatus = commitStatus.State matchedCount++ @@ -45,16 +45,20 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus, } } + // If required rule not match any action, then it is pending + if targetStatus == "" { + if structs.CommitStatusPending.NoBetterThan(returnedStatus) { + returnedStatus = structs.CommitStatusPending + } + break + } + if targetStatus != "" && targetStatus.NoBetterThan(returnedStatus) { returnedStatus = targetStatus } } } - if matchedCount != len(requiredContexts) { - return structs.CommitStatusPending - } - if matchedCount == 0 { status := git_model.CalcCommitStatus(commitStatuses) if status != nil { From 1b0a814c91f44f06384a40bccb725c1213802de8 Mon Sep 17 00:00:00 2001 From: charles7668 Date: Wed, 6 Mar 2024 23:50:08 +0800 Subject: [PATCH 2/3] Add test for commit_status_test.go in services/pull/ --- services/pull/commit_status_test.go | 65 +++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 services/pull/commit_status_test.go diff --git a/services/pull/commit_status_test.go b/services/pull/commit_status_test.go new file mode 100644 index 0000000000000..592acdd55cd43 --- /dev/null +++ b/services/pull/commit_status_test.go @@ -0,0 +1,65 @@ +// Copyright 2024 The Gitea Authors. +// All rights reserved. +// SPDX-License-Identifier: MIT + +package pull + +import ( + "testing" + + git_model "code.gitea.io/gitea/models/git" + "code.gitea.io/gitea/modules/structs" + + "github.com/stretchr/testify/assert" +) + +func TestMergeRequiredContextsCommitStatus(t *testing.T) { + testCases := [][]*git_model.CommitStatus{ + { + {Context: "Build 1", State: structs.CommitStatusSuccess}, + {Context: "Build 2", State: structs.CommitStatusSuccess}, + {Context: "Build 3", State: structs.CommitStatusSuccess}, + }, + { + {Context: "Build 1", State: structs.CommitStatusSuccess}, + {Context: "Build 2", State: structs.CommitStatusSuccess}, + {Context: "Build 2t", State: structs.CommitStatusPending}, + }, + { + {Context: "Build 1", State: structs.CommitStatusSuccess}, + {Context: "Build 2", State: structs.CommitStatusSuccess}, + {Context: "Build 2t", State: structs.CommitStatusFailure}, + }, + { + {Context: "Build 1", State: structs.CommitStatusSuccess}, + {Context: "Build 2", State: structs.CommitStatusSuccess}, + {Context: "Build 2t", State: structs.CommitStatusSuccess}, + }, + { + {Context: "Build 1", State: structs.CommitStatusSuccess}, + {Context: "Build 2", State: structs.CommitStatusSuccess}, + {Context: "Build 2t", State: structs.CommitStatusSuccess}, + }, + } + testCasesRequiredContexts := [][]string{ + {"Build*"}, + {"Build*", "Build 2t*"}, + {"Build*", "Build 2t*"}, + {"Build*", "Build 2t*", "Build 3*"}, + {"Build*", "Build *", "Build 2t*", "Build 1*"}, + } + + testCasesExpected := []structs.CommitStatusState{ + structs.CommitStatusSuccess, + structs.CommitStatusPending, + structs.CommitStatusFailure, + structs.CommitStatusPending, + structs.CommitStatusSuccess, + } + + for i, commitStatuses := range testCases { + if MergeRequiredContextsCommitStatus(commitStatuses, testCasesRequiredContexts[i]) != testCasesExpected[i] { + assert.Fail(t, "Test case failed", "Test case %d failed", i+1) + } + } +} From f038035a49ea0a514ffbe98e36c70b1dd1750d63 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 8 Mar 2024 12:32:56 +0800 Subject: [PATCH 3/3] Update services/pull/commit_status.go Co-authored-by: Zettat123 --- services/pull/commit_status.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/pull/commit_status.go b/services/pull/commit_status.go index ad88030fe8489..07e9eb7959362 100644 --- a/services/pull/commit_status.go +++ b/services/pull/commit_status.go @@ -53,7 +53,7 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus, break } - if targetStatus != "" && targetStatus.NoBetterThan(returnedStatus) { + if targetStatus.NoBetterThan(returnedStatus) { returnedStatus = targetStatus } }