From 7dc9163be5d7fc413cefca606bac5b39b20e62f4 Mon Sep 17 00:00:00 2001 From: a1012112796 <1012112796@qq.com> Date: Sun, 9 Aug 2020 09:29:25 +0800 Subject: [PATCH 1/5] Add email notify for new release Signed-off-by: a1012112796 <1012112796@qq.com> --- modules/notification/mail/mail.go | 13 ++++++ services/mailer/mail_release.go | 70 +++++++++++++++++++++++++++++++ templates/mail/release.tmpl | 56 +++++++++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 services/mailer/mail_release.go create mode 100644 templates/mail/release.tmpl diff --git a/modules/notification/mail/mail.go b/modules/notification/mail/mail.go index 795c8af2c803..2028e46b01f6 100644 --- a/modules/notification/mail/mail.go +++ b/modules/notification/mail/mail.go @@ -145,3 +145,16 @@ func (m *mailNotifier) NotifyPullRequestPushCommits(doer *models.User, pr *model m.NotifyCreateIssueComment(doer, comment.Issue.Repo, comment.Issue, comment) } + +func (m *mailNotifier) NotifyNewRelease(rel *models.Release) { + if err := rel.LoadAttributes(); err != nil { + log.Error("NotifyNewRelease: %v", err) + return + } + + if rel.IsDraft || rel.IsPrerelease { + return + } + + mailer.MailNewRelease(rel) +} \ No newline at end of file diff --git a/services/mailer/mail_release.go b/services/mailer/mail_release.go new file mode 100644 index 000000000000..b1b4c5a79789 --- /dev/null +++ b/services/mailer/mail_release.go @@ -0,0 +1,70 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package mailer + +import ( + "bytes" + "fmt" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/markup/markdown" + "code.gitea.io/gitea/modules/setting" +) + +const ( + tplNewReleaseMail base.TplName = "release" +) + +// MailNewRelease send new release notify to all all repo watchers. +func MailNewRelease(rel *models.Release) { + watcherIDList, err := models.GetRepoWatchersIDs(rel.RepoID) + if err != nil { + log.Error("GetRepoWatchersIDs(%d): %v", rel.RepoID, err) + return + } + + recipients, err := models.GetMaileableUsersByIDs(watcherIDList) + if err != nil { + log.Error("models.GetMaileableUsersByIDs: %v", err) + return + } + + tos := make([]string, 0, len(recipients)) + for _, to := range recipients { + if to.ID != rel.PublisherID { + tos = append(tos, to.Email) + } + } + + rel.Note = markdown.RenderString(rel.Note, rel.Repo.Link(), rel.Repo.ComposeMetas()) + subject := fmt.Sprintf("%s in %s released", rel.TagName, rel.Repo.FullName()) + + mailMeta := map[string]interface{}{ + "Release": rel, + "Subject": subject, + } + + var mailBody bytes.Buffer + + if err = bodyTemplates.ExecuteTemplate(&mailBody, string(tplNewReleaseMail), mailMeta); err != nil { + log.Error("ExecuteTemplate [%s]: %v", string(tplNewReleaseMail)+"/body", err) + return + } + + msgs := make([]*Message,0, len(recipients)) + publisherName := rel.Publisher.DisplayName() + relURL := "<" + rel.HTMLURL() + ">" + for _, to := range tos { + msg := NewMessageFrom([]string{to}, publisherName, setting.MailService.FromEmail, subject, mailBody.String()) + msg.Info = subject + msg.SetHeader("Message-ID", relURL) + msgs = append(msgs, msg) + } + + SendAsyncs(msgs) + return +} diff --git a/templates/mail/release.tmpl b/templates/mail/release.tmpl new file mode 100644 index 000000000000..a6a739d59a4d --- /dev/null +++ b/templates/mail/release.tmpl @@ -0,0 +1,56 @@ + + + + + {{.Subject}} + + + + + + +

@{{.Release.Publisher.Name}} released {{.Release.TagName}} + in {{.Release.Repo.FullName}}

+

Title: {{.Release.Title}}

+

+ Note:
+ {{- if eq .Release.Note ""}} + {{else}} + {{.Release.Note | Str2html}} + {{end -}} +

+

+

+ --- +
+ Downloads: +

+

+ + + From 70d77ffd8b7914fe975e9898677a0f51da06ae58 Mon Sep 17 00:00:00 2001 From: a1012112796 <1012112796@qq.com> Date: Sun, 9 Aug 2020 09:48:43 +0800 Subject: [PATCH 2/5] fix lint --- services/mailer/mail_release.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/mailer/mail_release.go b/services/mailer/mail_release.go index b1b4c5a79789..2619154470c9 100644 --- a/services/mailer/mail_release.go +++ b/services/mailer/mail_release.go @@ -55,7 +55,7 @@ func MailNewRelease(rel *models.Release) { return } - msgs := make([]*Message,0, len(recipients)) + msgs := make([]*Message, 0, len(recipients)) publisherName := rel.Publisher.DisplayName() relURL := "<" + rel.HTMLURL() + ">" for _, to := range tos { @@ -66,5 +66,4 @@ func MailNewRelease(rel *models.Release) { } SendAsyncs(msgs) - return } From f836130b38910f0f341e5b60bbd9174ca244806b Mon Sep 17 00:00:00 2001 From: a1012112796 <1012112796@qq.com> Date: Sun, 9 Aug 2020 09:54:10 +0800 Subject: [PATCH 3/5] fmt --- modules/notification/mail/mail.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/notification/mail/mail.go b/modules/notification/mail/mail.go index 2028e46b01f6..9b2c27280f7a 100644 --- a/modules/notification/mail/mail.go +++ b/modules/notification/mail/mail.go @@ -157,4 +157,4 @@ func (m *mailNotifier) NotifyNewRelease(rel *models.Release) { } mailer.MailNewRelease(rel) -} \ No newline at end of file +} From f1ab7495da1908a8436b656698eff03c440c01db Mon Sep 17 00:00:00 2001 From: a1012112796 <1012112796@qq.com> Date: Mon, 10 Aug 2020 09:08:11 +0800 Subject: [PATCH 4/5] fix test --- models/release.go | 1 + services/mailer/mail_release.go | 2 +- templates/mail/release.tmpl | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/models/release.go b/models/release.go index 0c76d17f4b74..f55341b86bb1 100644 --- a/models/release.go +++ b/models/release.go @@ -35,6 +35,7 @@ type Release struct { NumCommits int64 NumCommitsBehind int64 `xorm:"-"` Note string `xorm:"TEXT"` + RenderedNote string `xorm:"-"` IsDraft bool `xorm:"NOT NULL DEFAULT false"` IsPrerelease bool `xorm:"NOT NULL DEFAULT false"` IsTag bool `xorm:"NOT NULL DEFAULT false"` diff --git a/services/mailer/mail_release.go b/services/mailer/mail_release.go index 2619154470c9..55182f55cf5d 100644 --- a/services/mailer/mail_release.go +++ b/services/mailer/mail_release.go @@ -40,7 +40,7 @@ func MailNewRelease(rel *models.Release) { } } - rel.Note = markdown.RenderString(rel.Note, rel.Repo.Link(), rel.Repo.ComposeMetas()) + rel.RenderedNote = markdown.RenderString(rel.Note, rel.Repo.Link(), rel.Repo.ComposeMetas()) subject := fmt.Sprintf("%s in %s released", rel.TagName, rel.Repo.FullName()) mailMeta := map[string]interface{}{ diff --git a/templates/mail/release.tmpl b/templates/mail/release.tmpl index a6a739d59a4d..bb0eb17a56ec 100644 --- a/templates/mail/release.tmpl +++ b/templates/mail/release.tmpl @@ -17,9 +17,9 @@

Title: {{.Release.Title}}

Note:
- {{- if eq .Release.Note ""}} + {{- if eq .Release.RenderedNote ""}} {{else}} - {{.Release.Note | Str2html}} + {{.Release.RenderedNote | Str2html}} {{end -}}



From c6155f0c919c8e14b83d1dc3ef79753cde127d95 Mon Sep 17 00:00:00 2001 From: a1012112796 <1012112796@qq.com> Date: Mon, 10 Aug 2020 18:07:23 +0800 Subject: [PATCH 5/5] restart ci