Skip to content

Commit 7cf7a49

Browse files
Fixing the issue when status check per rule matches multiple actions (#29631)
Close #29628 rule ``` Test / Build* Test / Build * Test / Build 2* Test / Build 1* ``` ![image](https://github.com/go-gitea/gitea/assets/30816317/19bef0a9-fa97-43c5-887b-dece76064aa8) rule2 ``` Test / Build* Test / Build 1* ``` ![image](https://github.com/go-gitea/gitea/assets/30816317/19bef0a9-fa97-43c5-887b-dece76064aa8) rule3 ``` Test / Build* Test / Build 1* NotExist* ``` ![image](https://github.com/go-gitea/gitea/assets/30816317/f6a5e832-2e1b-4049-915b-45bec5ef070c) --------- Co-authored-by: Zettat123 <[email protected]>
1 parent ce8a98f commit 7cf7a49

File tree

2 files changed

+76
-7
lines changed

2 files changed

+76
-7
lines changed

services/pull/commit_status.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,30 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus,
3535
}
3636
}
3737

38-
for _, commitStatus := range commitStatuses {
38+
for _, gp := range requiredContextsGlob {
3939
var targetStatus structs.CommitStatusState
40-
for _, gp := range requiredContextsGlob {
40+
for _, commitStatus := range commitStatuses {
4141
if gp.Match(commitStatus.Context) {
4242
targetStatus = commitStatus.State
4343
matchedCount++
4444
break
4545
}
4646
}
4747

48-
if targetStatus != "" && targetStatus.NoBetterThan(returnedStatus) {
48+
// If required rule not match any action, then it is pending
49+
if targetStatus == "" {
50+
if structs.CommitStatusPending.NoBetterThan(returnedStatus) {
51+
returnedStatus = structs.CommitStatusPending
52+
}
53+
break
54+
}
55+
56+
if targetStatus.NoBetterThan(returnedStatus) {
4957
returnedStatus = targetStatus
5058
}
5159
}
5260
}
5361

54-
if matchedCount != len(requiredContexts) {
55-
return structs.CommitStatusPending
56-
}
57-
5862
if matchedCount == 0 {
5963
status := git_model.CalcCommitStatus(commitStatuses)
6064
if status != nil {

services/pull/commit_status_test.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// Copyright 2024 The Gitea Authors.
2+
// All rights reserved.
3+
// SPDX-License-Identifier: MIT
4+
5+
package pull
6+
7+
import (
8+
"testing"
9+
10+
git_model "code.gitea.io/gitea/models/git"
11+
"code.gitea.io/gitea/modules/structs"
12+
13+
"github.com/stretchr/testify/assert"
14+
)
15+
16+
func TestMergeRequiredContextsCommitStatus(t *testing.T) {
17+
testCases := [][]*git_model.CommitStatus{
18+
{
19+
{Context: "Build 1", State: structs.CommitStatusSuccess},
20+
{Context: "Build 2", State: structs.CommitStatusSuccess},
21+
{Context: "Build 3", State: structs.CommitStatusSuccess},
22+
},
23+
{
24+
{Context: "Build 1", State: structs.CommitStatusSuccess},
25+
{Context: "Build 2", State: structs.CommitStatusSuccess},
26+
{Context: "Build 2t", State: structs.CommitStatusPending},
27+
},
28+
{
29+
{Context: "Build 1", State: structs.CommitStatusSuccess},
30+
{Context: "Build 2", State: structs.CommitStatusSuccess},
31+
{Context: "Build 2t", State: structs.CommitStatusFailure},
32+
},
33+
{
34+
{Context: "Build 1", State: structs.CommitStatusSuccess},
35+
{Context: "Build 2", State: structs.CommitStatusSuccess},
36+
{Context: "Build 2t", State: structs.CommitStatusSuccess},
37+
},
38+
{
39+
{Context: "Build 1", State: structs.CommitStatusSuccess},
40+
{Context: "Build 2", State: structs.CommitStatusSuccess},
41+
{Context: "Build 2t", State: structs.CommitStatusSuccess},
42+
},
43+
}
44+
testCasesRequiredContexts := [][]string{
45+
{"Build*"},
46+
{"Build*", "Build 2t*"},
47+
{"Build*", "Build 2t*"},
48+
{"Build*", "Build 2t*", "Build 3*"},
49+
{"Build*", "Build *", "Build 2t*", "Build 1*"},
50+
}
51+
52+
testCasesExpected := []structs.CommitStatusState{
53+
structs.CommitStatusSuccess,
54+
structs.CommitStatusPending,
55+
structs.CommitStatusFailure,
56+
structs.CommitStatusPending,
57+
structs.CommitStatusSuccess,
58+
}
59+
60+
for i, commitStatuses := range testCases {
61+
if MergeRequiredContextsCommitStatus(commitStatuses, testCasesRequiredContexts[i]) != testCasesExpected[i] {
62+
assert.Fail(t, "Test case failed", "Test case %d failed", i+1)
63+
}
64+
}
65+
}

0 commit comments

Comments
 (0)