mirror of
https://gitea.com/gitea/gitea-mirror.git
synced 2026-03-20 11:50:27 +00:00
Exclude cancelled runs from failure-only email notifications (#36569)
The default configuration of `failure-only` added in https://github.com/go-gitea/gitea/pull/34982 included sending mails for cancelled runs which is not what one would expect from a option named like that because a cancelled run is not a failure. This change makes it omit mails for cancelled runs: | Run Status | `failure-only` before | `failure-only` after | |------------|-----------------------|----------------------| | Success | no | no | | Failure | mail | mail | | Cancelled | mail | no | The first commit in this PR is the fix, and there are a few more refactor commits afterwards. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -496,10 +496,10 @@ func (u *User) ShortName(length int) string {
|
|||||||
return util.EllipsisDisplayString(u.Name, length)
|
return util.EllipsisDisplayString(u.Name, length)
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsMailable checks if a user is eligible
|
// IsMailable checks if a user is eligible to receive emails.
|
||||||
// to receive emails.
|
// System users like Ghost and Gitea Actions are excluded.
|
||||||
func (u *User) IsMailable() bool {
|
func (u *User) IsMailable() bool {
|
||||||
return u.IsActive
|
return u.IsActive && !u.IsGiteaActions() && !u.IsGhost()
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsUserExist checks if given username exist,
|
// IsUserExist checks if given username exist,
|
||||||
|
|||||||
@@ -149,30 +149,31 @@ func composeAndSendActionsWorkflowRunStatusEmail(ctx context.Context, repo *repo
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func MailActionsTrigger(ctx context.Context, sender *user_model.User, repo *repo_model.Repository, run *actions_model.ActionRun) error {
|
func MailActionsTrigger(ctx context.Context, recipient *user_model.User, repo *repo_model.Repository, run *actions_model.ActionRun) error {
|
||||||
if setting.MailService == nil {
|
if setting.MailService == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if !run.Status.IsDone() || run.Status.IsSkipped() {
|
if !run.Status.IsDone() || run.Status.IsSkipped() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
if !recipient.IsMailable() {
|
||||||
recipients := make([]*user_model.User, 0)
|
return nil
|
||||||
|
|
||||||
if !sender.IsGiteaActions() && !sender.IsGhost() && sender.IsMailable() {
|
|
||||||
notifyPref, err := user_model.GetUserSetting(ctx, sender.ID,
|
|
||||||
user_model.SettingsKeyEmailNotificationGiteaActions, user_model.SettingEmailNotificationGiteaActionsFailureOnly)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if notifyPref == user_model.SettingEmailNotificationGiteaActionsAll || !run.Status.IsSuccess() && notifyPref != user_model.SettingEmailNotificationGiteaActionsDisabled {
|
|
||||||
recipients = append(recipients, sender)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(recipients) > 0 {
|
notifyPref, err := user_model.GetUserSetting(ctx, recipient.ID,
|
||||||
log.Debug("MailActionsTrigger: Initiate email composition")
|
user_model.SettingsKeyEmailNotificationGiteaActions, user_model.SettingEmailNotificationGiteaActionsFailureOnly)
|
||||||
return composeAndSendActionsWorkflowRunStatusEmail(ctx, repo, run, sender, recipients)
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
// "disabled" never sends
|
||||||
|
if notifyPref == user_model.SettingEmailNotificationGiteaActionsDisabled {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
// "failure-only" skips non-failure runs
|
||||||
|
if notifyPref != user_model.SettingEmailNotificationGiteaActionsAll && !run.Status.IsFailure() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("MailActionsTrigger: Initiate email composition")
|
||||||
|
return composeAndSendActionsWorkflowRunStatusEmail(ctx, repo, run, recipient, []*user_model.User{recipient})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user