@@ -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
0 commit comments