Skip to content

Commit 76b6754

Browse files
GiteaBotcharles7668Zettat123
authored
Fixing the issue when status check per rule matches multiple actions (go-gitea#29631) (go-gitea#29655)
Backport go-gitea#29631 by @charles7668 Close go-gitea#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: charles <[email protected]> Co-authored-by: Zettat123 <[email protected]>
1 parent 0b5a4e7 commit 76b6754

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
@@ -34,26 +34,30 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus,
3434
}
3535
}
3636

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

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

53-
if matchedCount != len(requiredContexts) {
54-
return structs.CommitStatusPending
55-
}
56-
5761
if matchedCount == 0 {
5862
status := git_model.CalcCommitStatus(commitStatuses)
5963
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)