From a0737b1ff45ae4352bf4e16a436c832c55966d2d Mon Sep 17 00:00:00 2001 From: NorthRealm <155140859+NorthRealm@users.noreply.github.com> Date: Tue, 8 Jul 2025 00:33:34 +0800 Subject: [PATCH] Decoration --- services/mailer/mail_workflow_run.go | 44 +++++++++++++++------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/services/mailer/mail_workflow_run.go b/services/mailer/mail_workflow_run.go index c337263b41..1267a380d2 100644 --- a/services/mailer/mail_workflow_run.go +++ b/services/mailer/mail_workflow_run.go @@ -35,9 +35,6 @@ func generateMessageIDForActionsWorkflowRunStatusEmail(repo *repo_model.Reposito } func sendActionsWorkflowRunStatusEmail(ctx context.Context, repo *repo_model.Repository, run *actions_model.ActionRun, sender *user_model.User, recipients []*user_model.User) { - messageID := generateMessageIDForActionsWorkflowRunStatusEmail(repo, run) - headers := generateMetadataHeaders(repo) - subject := "Run" switch run.Status { case actions_model.StatusFailure: @@ -45,17 +42,20 @@ func sendActionsWorkflowRunStatusEmail(ctx context.Context, repo *repo_model.Rep case actions_model.StatusCancelled: subject += " cancelled" case actions_model.StatusSuccess: - subject += " is successful" + subject += " succeeded" } subject = fmt.Sprintf("%s: %s (%s)", subject, run.WorkflowID, base.ShortSha(run.CommitSHA)) + displayName := fromDisplayName(sender) + messageID := generateMessageIDForActionsWorkflowRunStatusEmail(repo, run) + metadataHeaders := generateMetadataHeaders(repo) - jobs0, err := actions_model.GetRunJobsByRunID(ctx, run.ID) + jobs, err := actions_model.GetRunJobsByRunID(ctx, run.ID) if err != nil { log.Error("GetRunJobsByRunID: %v", err) } else { - sort.SliceStable(jobs0, func(i, j int) bool { - si := jobs0[i].Status - sj := jobs0[j].Status + sort.SliceStable(jobs, func(i, j int) bool { + si := jobs[i].Status + sj := jobs[j].Status if si.IsSuccess() { si = 99 } @@ -65,23 +65,21 @@ func sendActionsWorkflowRunStatusEmail(ctx context.Context, repo *repo_model.Rep return si < sj }) } - convertedJobs := make([]convertedWorkflowJob, 0, len(jobs0)) - for _, job := range jobs0 { - c, err := convert.ToActionWorkflowJob(ctx, repo, nil, job) + convertedJobs := make([]convertedWorkflowJob, 0, len(jobs)) + for _, job := range jobs { + converted0, err := convert.ToActionWorkflowJob(ctx, repo, nil, job) if err != nil { log.Error("convert.ToActionWorkflowJob: %v", err) continue } convertedJobs = append(convertedJobs, convertedWorkflowJob{ - HTMLURL: c.HTMLURL, - Name: c.Name, + HTMLURL: converted0.HTMLURL, + Name: converted0.Name, Status: job.Status, - Attempt: c.RunAttempt, + Attempt: converted0.RunAttempt, }) } - displayName := fromDisplayName(sender) - langMap := make(map[string][]*user_model.User) for _, user := range recipients { langMap[user.Language] = append(langMap[user.Language], user) @@ -91,11 +89,17 @@ func sendActionsWorkflowRunStatusEmail(ctx context.Context, repo *repo_model.Rep var runStatusText string switch run.Status { case actions_model.StatusSuccess: - runStatusText = locale.TrString("actions.status.success") + runStatusText = "All jobs have succeeded" case actions_model.StatusFailure: - runStatusText = locale.TrString("actions.status.failure") + runStatusText = "All jobs have failed" + for _, job := range jobs { + if !job.Status.IsFailure() { + runStatusText = "Some jobs were not successful" + break + } + } case actions_model.StatusCancelled: - runStatusText = locale.TrString("actions.status.cancelled") + runStatusText = "All jobs have been cancelled" } var mailBody bytes.Buffer if err := bodyTemplates.ExecuteTemplate(&mailBody, tplWorkflowRun, map[string]any{ @@ -122,7 +126,7 @@ func sendActionsWorkflowRunStatusEmail(ctx context.Context, repo *repo_model.Rep for k, v := range generateSenderRecipientHeaders(sender, rec) { msg.SetHeader(k, v) } - for k, v := range headers { + for k, v := range metadataHeaders { msg.SetHeader(k, v) } msg.SetHeader("Message-ID", messageID)