Skip to content

Commit a57e2c4

Browse files
authored
Fix required contexts and commit status matching bug (#34815) (#34829)
Backport #34815 Fix #34504 Since one required context can match more than one commit statuses, we should not directly compare the lengths of `requiredCommitStatuses` and `requiredContexts`
1 parent acd4e10 commit a57e2c4

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

services/pull/commit_status.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,16 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus,
3535
}
3636

3737
for _, gp := range requiredContextsGlob {
38-
var targetStatus structs.CommitStatusState
38+
var targetStatuses []*git_model.CommitStatus
3939
for _, commitStatus := range commitStatuses {
4040
if gp.Match(commitStatus.Context) {
41-
targetStatus = commitStatus.State
41+
targetStatuses = append(targetStatuses, commitStatus)
4242
matchedCount++
43-
break
4443
}
4544
}
4645

46+
targetStatus := git_model.CalcCommitStatus(targetStatuses).State
47+
4748
// If required rule not match any action, then it is pending
4849
if targetStatus == "" {
4950
if structs.CommitStatusPending.NoBetterThan(returnedStatus) {

services/pull/commit_status_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) {
3030
{Context: "Build 2", State: structs.CommitStatusSuccess},
3131
{Context: "Build 2t", State: structs.CommitStatusFailure},
3232
},
33+
{
34+
{Context: "Build 1", State: structs.CommitStatusSuccess},
35+
{Context: "Build 2", State: structs.CommitStatusSuccess},
36+
{Context: "Build 2t", State: structs.CommitStatusFailure},
37+
},
3338
{
3439
{Context: "Build 1", State: structs.CommitStatusSuccess},
3540
{Context: "Build 2", State: structs.CommitStatusSuccess},
@@ -45,6 +50,7 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) {
4550
{"Build*"},
4651
{"Build*", "Build 2t*"},
4752
{"Build*", "Build 2t*"},
53+
{"Build*"},
4854
{"Build*", "Build 2t*", "Build 3*"},
4955
{"Build*", "Build *", "Build 2t*", "Build 1*"},
5056
}
@@ -53,6 +59,7 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) {
5359
structs.CommitStatusSuccess,
5460
structs.CommitStatusPending,
5561
structs.CommitStatusFailure,
62+
structs.CommitStatusFailure,
5663
structs.CommitStatusPending,
5764
structs.CommitStatusSuccess,
5865
}

0 commit comments

Comments
 (0)