diff --git a/services/pull/commit_status.go b/services/pull/commit_status.go index 0bfff21746..ca85d64d09 100644 --- a/services/pull/commit_status.go +++ b/services/pull/commit_status.go @@ -35,15 +35,16 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus, } for _, gp := range requiredContextsGlob { - var targetStatus structs.CommitStatusState + var targetStatuses []*git_model.CommitStatus for _, commitStatus := range commitStatuses { if gp.Match(commitStatus.Context) { - targetStatus = commitStatus.State + targetStatuses = append(targetStatuses, commitStatus) matchedCount++ - break } } + targetStatus := git_model.CalcCommitStatus(targetStatuses).State + // If required rule not match any action, then it is pending if targetStatus == "" { if structs.CommitStatusPending.NoBetterThan(returnedStatus) { diff --git a/services/pull/commit_status_test.go b/services/pull/commit_status_test.go index 592acdd55c..be0c6030c7 100644 --- a/services/pull/commit_status_test.go +++ b/services/pull/commit_status_test.go @@ -30,6 +30,11 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) { {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.CommitStatusFailure}, + }, { {Context: "Build 1", State: structs.CommitStatusSuccess}, {Context: "Build 2", State: structs.CommitStatusSuccess}, @@ -45,6 +50,7 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) { {"Build*"}, {"Build*", "Build 2t*"}, {"Build*", "Build 2t*"}, + {"Build*"}, {"Build*", "Build 2t*", "Build 3*"}, {"Build*", "Build *", "Build 2t*", "Build 1*"}, } @@ -53,6 +59,7 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) { structs.CommitStatusSuccess, structs.CommitStatusPending, structs.CommitStatusFailure, + structs.CommitStatusFailure, structs.CommitStatusPending, structs.CommitStatusSuccess, }