Disallow merge when required checked are missing (#29143)
fixes #21892 This PR disallows merging a PR when not all commit status contexts configured in the branch protection are met. Previously, the PR was happy to merge when one commit status was successful and the other contexts weren't reported. Any feedback is welcome, first time Go :-) I'm also not sure if the changes in the template break something else Given the following branch protection:  This was shown before the change:  With the change, it is now shown as this:  --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> (cherry picked from commit a11ccc9fcd61fb25ffb1c37b87a0df4ee9efd84e)
This commit is contained in:
parent
e96e1beded
commit
b1d66f50fb
4 changed files with 44 additions and 1 deletions
|
@ -662,6 +662,24 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
|
|||
}
|
||||
|
||||
if pb != nil && pb.EnableStatusCheck {
|
||||
|
||||
var missingRequiredChecks []string
|
||||
for _, requiredContext := range pb.StatusCheckContexts {
|
||||
contextFound := false
|
||||
matchesRequiredContext := createRequiredContextMatcher(requiredContext)
|
||||
for _, presentStatus := range commitStatuses {
|
||||
if matchesRequiredContext(presentStatus.Context) {
|
||||
contextFound = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !contextFound {
|
||||
missingRequiredChecks = append(missingRequiredChecks, requiredContext)
|
||||
}
|
||||
}
|
||||
ctx.Data["MissingRequiredChecks"] = missingRequiredChecks
|
||||
|
||||
ctx.Data["is_context_required"] = func(context string) bool {
|
||||
for _, c := range pb.StatusCheckContexts {
|
||||
if c == context {
|
||||
|
@ -730,6 +748,18 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
|
|||
return compareInfo
|
||||
}
|
||||
|
||||
func createRequiredContextMatcher(requiredContext string) func(string) bool {
|
||||
if gp, err := glob.Compile(requiredContext); err == nil {
|
||||
return func(contextToCheck string) bool {
|
||||
return gp.Match(contextToCheck)
|
||||
}
|
||||
}
|
||||
|
||||
return func(contextToCheck string) bool {
|
||||
return requiredContext == contextToCheck
|
||||
}
|
||||
}
|
||||
|
||||
type pullCommitList struct {
|
||||
Commits []pull_service.CommitInfo `json:"commits"`
|
||||
LastReviewCommitSha string `json:"last_review_commit_sha"`
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue