Skip to content

Commit 8e9fb4d

Browse files
Enzimewxiaoguang
andauthored
Indicate when only optional checks failed (#36367)
Currently it's not clear that you can merge a PR when only optional checks failed: <img width="922" height="447" alt="Screenshot 2026-01-14 at 4 08 17 pm" src="https://github.com/user-attachments/assets/e11670c7-5ab9-42d7-af09-2d8a8fd532d3" /> This PR changes the text to say "Some optional checks failed" when only optional checks failed: <img width="922" height="443" alt="Screenshot 2026-01-14 at 3 59 08 pm" src="https://github.com/user-attachments/assets/9ea69b13-38d6-4cfc-b4f7-952eff58e546" /> When a required check fails it'll still say "Some checks failed": <img width="928" height="343" alt="Screenshot 2026-01-14 at 3 59 20 pm" src="https://github.com/user-attachments/assets/d3764a95-9737-4482-851e-d3406b1e4d76" /> --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
1 parent 14e8c9b commit 8e9fb4d

4 files changed

Lines changed: 42 additions & 27 deletions

File tree

options/locale/locale_en-US.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1847,7 +1847,8 @@
18471847
"repo.pulls.status_checking": "Some checks are pending",
18481848
"repo.pulls.status_checks_success": "All checks were successful",
18491849
"repo.pulls.status_checks_warning": "Some checks reported warnings",
1850-
"repo.pulls.status_checks_failure": "Some checks failed",
1850+
"repo.pulls.status_checks_failure_required": "Some required checks failed",
1851+
"repo.pulls.status_checks_failure_optional": "Some optional checks failed",
18511852
"repo.pulls.status_checks_error": "Some checks reported errors",
18521853
"repo.pulls.status_checks_requested": "Required",
18531854
"repo.pulls.status_checks_details": "Details",

routers/web/repo/pull.go

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
repo_model "code.gitea.io/gitea/models/repo"
2424
"code.gitea.io/gitea/models/unit"
2525
user_model "code.gitea.io/gitea/models/user"
26+
"code.gitea.io/gitea/modules/commitstatus"
2627
"code.gitea.io/gitea/modules/emoji"
2728
"code.gitea.io/gitea/modules/fileicon"
2829
"code.gitea.io/gitea/modules/git"
@@ -35,6 +36,7 @@ import (
3536
"code.gitea.io/gitea/modules/optional"
3637
"code.gitea.io/gitea/modules/setting"
3738
"code.gitea.io/gitea/modules/templates"
39+
"code.gitea.io/gitea/modules/translation"
3840
"code.gitea.io/gitea/modules/util"
3941
"code.gitea.io/gitea/modules/web"
4042
"code.gitea.io/gitea/routers/utils"
@@ -320,6 +322,26 @@ type pullCommitStatusCheckData struct {
320322
RequireApprovalRunCount int // number of workflow runs that require approval
321323
CanApprove bool // whether the user can approve workflow runs
322324
ApproveLink string // link to approve all checks
325+
RequiredChecksState commitstatus.CommitStatusState
326+
LatestCommitStatus *git_model.CommitStatus
327+
}
328+
329+
func (d *pullCommitStatusCheckData) CommitStatusCheckPrompt(locale translation.Locale) string {
330+
if d.RequiredChecksState.IsPending() || len(d.MissingRequiredChecks) > 0 {
331+
return locale.TrString("repo.pulls.status_checking")
332+
} else if d.RequiredChecksState.IsSuccess() {
333+
if d.LatestCommitStatus != nil && d.LatestCommitStatus.State.IsFailure() {
334+
return locale.TrString("repo.pulls.status_checks_failure_optional")
335+
}
336+
return locale.TrString("repo.pulls.status_checks_success")
337+
} else if d.RequiredChecksState.IsWarning() {
338+
return locale.TrString("repo.pulls.status_checks_warning")
339+
} else if d.RequiredChecksState.IsFailure() {
340+
return locale.TrString("repo.pulls.status_checks_failure_required")
341+
} else if d.RequiredChecksState.IsError() {
342+
return locale.TrString("repo.pulls.status_checks_error")
343+
}
344+
return locale.TrString("repo.pulls.status_checking")
323345
}
324346

325347
// prepareViewPullInfo show meta information for a pull request preview page
@@ -360,6 +382,8 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git_s
360382
defer baseGitRepo.Close()
361383
}
362384

385+
statusCheckData := &pullCommitStatusCheckData{}
386+
363387
if exist, _ := git_model.IsBranchExist(ctx, pull.BaseRepo.ID, pull.BaseBranch); !exist {
364388
ctx.Data["BaseBranchNotExist"] = true
365389
ctx.Data["IsPullRequestBroken"] = true
@@ -380,9 +404,10 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git_s
380404
git_model.CommitStatusesHideActionsURL(ctx, commitStatuses)
381405
}
382406

407+
statusCheckData.LatestCommitStatus = git_model.CalcCommitStatus(commitStatuses)
383408
if len(commitStatuses) > 0 {
384409
ctx.Data["LatestCommitStatuses"] = commitStatuses
385-
ctx.Data["LatestCommitStatus"] = git_model.CalcCommitStatus(commitStatuses)
410+
ctx.Data["LatestCommitStatus"] = statusCheckData.LatestCommitStatus
386411
}
387412

388413
compareInfo, err := git_service.GetCompareInfo(ctx, pull.BaseRepo, pull.BaseRepo, baseGitRepo,
@@ -467,10 +492,8 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git_s
467492
return nil
468493
}
469494

470-
statusCheckData := &pullCommitStatusCheckData{
471-
ApproveLink: fmt.Sprintf("%s/actions/approve-all-checks?commit_id=%s", repo.Link(), sha),
472-
}
473495
ctx.Data["StatusCheckData"] = statusCheckData
496+
statusCheckData.ApproveLink = fmt.Sprintf("%s/actions/approve-all-checks?commit_id=%s", repo.Link(), sha)
474497

475498
commitStatuses, err := git_model.GetLatestCommitStatus(ctx, repo.ID, sha, db.ListOptionsAll)
476499
if err != nil {
@@ -495,9 +518,10 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git_s
495518
statusCheckData.CanApprove = ctx.Repo.CanWrite(unit.TypeActions)
496519
}
497520

521+
statusCheckData.LatestCommitStatus = git_model.CalcCommitStatus(commitStatuses)
498522
if len(commitStatuses) > 0 {
499523
ctx.Data["LatestCommitStatuses"] = commitStatuses
500-
ctx.Data["LatestCommitStatus"] = git_model.CalcCommitStatus(commitStatuses)
524+
ctx.Data["LatestCommitStatus"] = statusCheckData.LatestCommitStatus
501525
}
502526

503527
if pb != nil && pb.EnableStatusCheck {
@@ -534,7 +558,7 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git_s
534558
}
535559
return false
536560
}
537-
ctx.Data["RequiredStatusCheckState"] = pull_service.MergeRequiredContextsCommitStatus(commitStatuses, pb.StatusCheckContexts)
561+
statusCheckData.RequiredChecksState = pull_service.MergeRequiredContextsCommitStatus(commitStatuses, pb.StatusCheckContexts)
538562
}
539563

540564
ctx.Data["HeadBranchMovedOn"] = headBranchSha != sha

templates/repo/issue/view_content/pull_merge_box.tmpl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
data-pull-link="{{.Issue.Link}}"
99
{{end}}
1010
>
11+
{{$statusCheckData := .StatusCheckData}}
12+
{{$requiredStatusCheckState := $statusCheckData.RequiredChecksState}}
1113
<div class="timeline-avatar text {{if .Issue.PullRequest.HasMerged}}purple
1214
{{- else if .Issue.IsClosed}}grey
1315
{{- else if .IsPullWorkInProgress}}grey
@@ -18,8 +20,8 @@
1820
{{- else if .IsBlockedByOfficialReviewRequests}}red
1921
{{- else if .IsBlockedByOutdatedBranch}}red
2022
{{- else if .IsBlockedByChangedProtectedFiles}}red
21-
{{- else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsFailure .RequiredStatusCheckState.IsError)}}red
22-
{{- else if and .EnableStatusCheck (or (not $.LatestCommitStatus) .RequiredStatusCheckState.IsPending .RequiredStatusCheckState.IsWarning)}}yellow
23+
{{- else if and .EnableStatusCheck (or $requiredStatusCheckState.IsFailure $requiredStatusCheckState.IsError)}}red
24+
{{- else if and .EnableStatusCheck (or (not $.LatestCommitStatus) $requiredStatusCheckState.IsPending $requiredStatusCheckState.IsWarning)}}yellow
2325
{{- else if and .AllowMerge .RequireSigned (not .WillSign)}}red
2426
{{- else if .Issue.PullRequest.IsChecking}}yellow
2527
{{- else if .Issue.PullRequest.IsEmpty}}grey
@@ -32,7 +34,7 @@
3234
"CommitStatus" .LatestCommitStatus
3335
"CommitStatuses" .LatestCommitStatuses
3436
"ShowHideChecks" true
35-
"StatusCheckData" .StatusCheckData
37+
"StatusCheckData" $statusCheckData
3638
)}}
3739
</div>
3840
{{end}}
@@ -145,12 +147,12 @@
145147
<li>{{.}}</li>
146148
{{end}}
147149
</ul>
148-
{{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsError .RequiredStatusCheckState.IsFailure)}}
150+
{{else if and .EnableStatusCheck (or $requiredStatusCheckState.IsError $requiredStatusCheckState.IsFailure)}}
149151
<div class="item">
150152
{{svg "octicon-x"}}
151153
{{ctx.Locale.Tr "repo.pulls.required_status_check_failed"}}
152154
</div>
153-
{{else if and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess)}}
155+
{{else if and .EnableStatusCheck (not $requiredStatusCheckState.IsSuccess)}}
154156
<div class="item">
155157
{{svg "octicon-x"}}
156158
{{ctx.Locale.Tr "repo.pulls.required_status_check_missing"}}
@@ -166,7 +168,7 @@
166168
</div>
167169
{{end}}
168170

169-
{{$notAllOverridableChecksOk := or .IsBlockedByApprovals .IsBlockedByRejection .IsBlockedByOfficialReviewRequests .IsBlockedByOutdatedBranch .IsBlockedByChangedProtectedFiles (and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess))}}
171+
{{$notAllOverridableChecksOk := or .IsBlockedByApprovals .IsBlockedByRejection .IsBlockedByOfficialReviewRequests .IsBlockedByOutdatedBranch .IsBlockedByChangedProtectedFiles (and .EnableStatusCheck (not $requiredStatusCheckState.IsSuccess))}}
170172

171173
{{/* admin can merge without checks, writer can merge when checks succeed */}}
172174
{{$canMergeNow := and (or (and (not $.ProtectedBranch.BlockAdminMergeOverride) $.IsRepoAdmin) (not $notAllOverridableChecksOk)) (or (not .AllowMerge) (not .RequireSigned) .WillSign)}}
@@ -351,7 +353,7 @@
351353
<li>{{.}}</li>
352354
{{end}}
353355
</ul>
354-
{{else if and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess)}}
356+
{{else if and .EnableStatusCheck (not $requiredStatusCheckState.IsSuccess)}}
355357
<div class="item text red">
356358
{{svg "octicon-x"}}
357359
{{ctx.Locale.Tr "repo.pulls.required_status_check_failed"}}

templates/repo/pulls/status.tmpl

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,7 @@
88
{{if .CommitStatus}}
99
<div class="commit-status-panel">
1010
<div class="ui top attached header commit-status-header">
11-
{{if or (eq .CommitStatus.State "pending") (.MissingRequiredChecks)}}
12-
{{ctx.Locale.Tr "repo.pulls.status_checking"}}
13-
{{else if eq .CommitStatus.State "success"}}
14-
{{ctx.Locale.Tr "repo.pulls.status_checks_success"}}
15-
{{else if eq .CommitStatus.State "warning"}}
16-
{{ctx.Locale.Tr "repo.pulls.status_checks_warning"}}
17-
{{else if eq .CommitStatus.State "failure"}}
18-
{{ctx.Locale.Tr "repo.pulls.status_checks_failure"}}
19-
{{else if eq .CommitStatus.State "error"}}
20-
{{ctx.Locale.Tr "repo.pulls.status_checks_error"}}
21-
{{else}}
22-
{{ctx.Locale.Tr "repo.pulls.status_checking"}}
23-
{{end}}
11+
{{$statusCheckData.CommitStatusCheckPrompt ctx.Locale}}
2412

2513
{{if .ShowHideChecks}}
2614
<div class="ui right">

0 commit comments

Comments
 (0)