0
0
mirror of https://github.com/go-gitea/gitea.git synced 2025-11-04 23:35:34 +01:00
This commit is contained in:
NorthRealm 2025-07-07 15:46:43 +08:00
parent 1f6c68d572
commit bf468fee21
2 changed files with 35 additions and 12 deletions

View File

@ -5,6 +5,8 @@ package mailer
import ( import (
"bytes" "bytes"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/services/convert"
"context" "context"
"fmt" "fmt"
"sort" "sort"
@ -45,13 +47,13 @@ func sendActionsWorkflowRunStatusEmail(ctx context.Context, repo *repo_model.Rep
} }
subject = fmt.Sprintf("%s: %s (%s)", subject, run.WorkflowID, base.ShortSha(run.CommitSHA)) subject = fmt.Sprintf("%s: %s (%s)", subject, run.WorkflowID, base.ShortSha(run.CommitSHA))
jobs, err := actions_model.GetRunJobsByRunID(ctx, run.ID) jobs0, err := actions_model.GetRunJobsByRunID(ctx, run.ID)
if err != nil { if err != nil {
log.Error("GetRunJobsByRunID: %v", err) log.Error("GetRunJobsByRunID: %v", err)
} else { } else {
sort.SliceStable(jobs, func(i, j int) bool { sort.SliceStable(jobs0, func(i, j int) bool {
si := jobs[i].Status si := jobs0[i].Status
sj := jobs[j].Status sj := jobs0[j].Status
if si.IsSuccess() { if si.IsSuccess() {
si = 99 si = 99
} }
@ -61,6 +63,15 @@ func sendActionsWorkflowRunStatusEmail(ctx context.Context, repo *repo_model.Rep
return si < sj return si < sj
}) })
} }
convertedJobs0 := make([]*api.ActionWorkflowJob, 0, len(jobs0))
for _, job := range jobs0 {
c, err := convert.ToActionWorkflowJob(ctx, repo, nil, job)
if err != nil {
log.Error("convert.ToActionWorkflowJob: %v", err)
continue
}
convertedJobs0 = append(convertedJobs0, c)
}
displayName := fromDisplayName(sender) displayName := fromDisplayName(sender)
@ -70,12 +81,22 @@ func sendActionsWorkflowRunStatusEmail(ctx context.Context, repo *repo_model.Rep
} }
for lang, tos := range langMap { for lang, tos := range langMap {
locale := translation.NewLocale(lang) locale := translation.NewLocale(lang)
var runStatusText string
switch run.Status {
case actions_model.StatusSuccess:
runStatusText = locale.TrString("actions.status.success")
case actions_model.StatusFailure:
runStatusText = locale.TrString("actions.status.failure")
case actions_model.StatusCancelled:
runStatusText = locale.TrString("actions.status.cancelled")
}
var mailBody bytes.Buffer var mailBody bytes.Buffer
if err := bodyTemplates.ExecuteTemplate(&mailBody, tplWorkflowRun, map[string]any{ if err := bodyTemplates.ExecuteTemplate(&mailBody, tplWorkflowRun, map[string]any{
"Subject": subject, "Subject": subject,
"Repo": repo, "Repo": repo,
"Run": run, "Run": run,
"Jobs": jobs, "RunStatusText": runStatusText,
"Jobs": convertedJobs0,
"locale": locale, "locale": locale,
"Language": locale.Language(), "Language": locale.Language(),
}); err != nil { }); err != nil {

View File

@ -10,12 +10,14 @@
</head> </head>
<body> <body>
<h4> <h4>
{{.Repo.FullName}} {{.Run.WorkflowID}}: {{if .Run.Status.IsSuccess}}{{.locale.Tr "actions.status.success"}}{{else if .Run.Status.IsFailure}}{{.locale.Tr "actions.status.failure"}}{{else if .Run.Status.IsCancelled}}{{.locale.Tr "actions.status.cancelled"}}{{else}}{{.locale.Tr "actions.status.skipped"}}{{end}} {{.Repo.FullName}} {{.Run.WorkflowID}}: {{.RunStatusText}}
</h4> </h4>
<ul> <ul>
{{range $job := .Jobs}} {{range $job := .Jobs}}
<li> <li>
{{if $job.Status.IsSuccess}}{{.locale.Tr "actions.status.success"}}{{else if $job.Status.IsFailure}}{{.locale.Tr "actions.status.failure"}}{{else if $job.Status.IsCancelled}}{{.locale.Tr "actions.status.cancelled"}}{{else}}{{.locale.Tr "actions.status.skipped"}}{{end}}: {{$job.Name}}{{if gt $job.Attempt 1}}, Attempt #{{$job.Attempt}}{{end}} <a href="{{$job.HTMLURL}}">
{{$job.Status}}: {{$job.Name}}{{if gt $job.RunAttempt 1}}, Attempt #{{$job.RunAttempt}}{{end}}
</a>
</li> </li>
{{end}} {{end}}
</ul> </ul>