Skip to content

Commit 1f12dc8

Browse files
a1012112796lunnylafrikstechknowlogick
authored
Add action feed for new release (#12324)
* Add action feed for new release Signed-off-by: a1012112796 <[email protected]> * fix lint * Apply suggestions from code review * Add ReleaseID to the action table * Remove error message * Fold the attachments download list * remove attchment download list * simplify code * fix create release from existing tag * simplify ui * translation change * fix test Co-authored-by: Lunny Xiao <[email protected]> Co-authored-by: Lauris BH <[email protected]> Co-authored-by: techknowlogick <[email protected]>
1 parent 2fd78c1 commit 1f12dc8

File tree

10 files changed

+49
-15
lines changed

10 files changed

+49
-15
lines changed

models/action.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const (
4949
ActionApprovePullRequest // 21
5050
ActionRejectPullRequest // 22
5151
ActionCommentPull // 23
52+
ActionPublishRelease // 24
5253
)
5354

5455
// Action represents user operation type and other information to

models/repo_watch.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ func notifyWatchers(e Engine, actions ...*Action) error {
252252
act.Repo.Units = nil
253253

254254
switch act.OpType {
255-
case ActionCommitRepo, ActionPushTag, ActionDeleteTag, ActionDeleteBranch:
255+
case ActionCommitRepo, ActionPushTag, ActionDeleteTag, ActionPublishRelease, ActionDeleteBranch:
256256
if !permCode[i] {
257257
continue
258258
}

modules/notification/action/action.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,3 +314,22 @@ func (a *actionNotifier) NotifySyncDeleteRef(doer *models.User, repo *models.Rep
314314
log.Error("notifyWatchers: %v", err)
315315
}
316316
}
317+
318+
func (a *actionNotifier) NotifyNewRelease(rel *models.Release) {
319+
if err := rel.LoadAttributes(); err != nil {
320+
log.Error("NotifyNewRelease: %v", err)
321+
return
322+
}
323+
if err := models.NotifyWatchers(&models.Action{
324+
ActUserID: rel.PublisherID,
325+
ActUser: rel.Publisher,
326+
OpType: models.ActionPublishRelease,
327+
RepoID: rel.RepoID,
328+
Repo: rel.Repo,
329+
IsPrivate: rel.Repo.IsPrivate,
330+
Content: rel.Title,
331+
RefName: rel.TagName,
332+
}); err != nil {
333+
log.Error("notifyWatchers: %v", err)
334+
}
335+
}

modules/templates/helper.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,8 @@ func ActionIcon(opType models.ActionType) string {
640640
return "check"
641641
case models.ActionRejectPullRequest:
642642
return "diff"
643+
case models.ActionPublishRelease:
644+
return "tag"
643645
default:
644646
return "question"
645647
}

options/locale/locale_en-US.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2331,6 +2331,7 @@ mirror_sync_create = synced new reference <a href="%s/src/%s">%[2]s</a> to <a hr
23312331
mirror_sync_delete = synced and deleted reference <code>%[2]s</code> at <a href="%[1]s">%[3]s</a> from mirror
23322332
approve_pull_request = `approved <a href="%s/pulls/%s">%s#%[2]s</a>`
23332333
reject_pull_request = `suggested changes for <a href="%s/pulls/%s">%s#%[2]s</a>`
2334+
publish_release = `released <a href="%s/releases/tag/%s"> "%[4]s" </a> at <a href="%[1]s">%[3]s</a>`
23342335

23352336
[tool]
23362337
ago = %s ago

routers/api/v1/repo/release.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,8 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
194194
rel.Repo = ctx.Repo.Repository
195195
rel.Publisher = ctx.User
196196

197-
if err = releaseservice.UpdateRelease(ctx.User, ctx.Repo.GitRepo, rel, nil); err != nil {
198-
ctx.ServerError("UpdateRelease", err)
197+
if err = releaseservice.UpdateReleaseOrCreatReleaseFromTag(ctx.User, ctx.Repo.GitRepo, rel, nil, true); err != nil {
198+
ctx.ServerError("UpdateReleaseOrCreatReleaseFromTag", err)
199199
return
200200
}
201201
}
@@ -266,8 +266,8 @@ func EditRelease(ctx *context.APIContext, form api.EditReleaseOption) {
266266
if form.IsPrerelease != nil {
267267
rel.IsPrerelease = *form.IsPrerelease
268268
}
269-
if err := releaseservice.UpdateRelease(ctx.User, ctx.Repo.GitRepo, rel, nil); err != nil {
270-
ctx.Error(http.StatusInternalServerError, "UpdateRelease", err)
269+
if err := releaseservice.UpdateReleaseOrCreatReleaseFromTag(ctx.User, ctx.Repo.GitRepo, rel, nil, false); err != nil {
270+
ctx.Error(http.StatusInternalServerError, "UpdateReleaseOrCreatReleaseFromTag", err)
271271
return
272272
}
273273

routers/repo/release.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) {
223223
return
224224
}
225225

226-
rel := &models.Release{
226+
rel = &models.Release{
227227
RepoID: ctx.Repo.Repository.ID,
228228
PublisherID: ctx.User.ID,
229229
Title: form.Title,
@@ -262,9 +262,9 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) {
262262
rel.PublisherID = ctx.User.ID
263263
rel.IsTag = false
264264

265-
if err = releaseservice.UpdateRelease(ctx.User, ctx.Repo.GitRepo, rel, attachmentUUIDs); err != nil {
265+
if err = releaseservice.UpdateReleaseOrCreatReleaseFromTag(ctx.User, ctx.Repo.GitRepo, rel, attachmentUUIDs, true); err != nil {
266266
ctx.Data["Err_TagName"] = true
267-
ctx.ServerError("UpdateRelease", err)
267+
ctx.ServerError("UpdateReleaseOrCreatReleaseFromTag", err)
268268
return
269269
}
270270
}
@@ -341,7 +341,7 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) {
341341
rel.Note = form.Content
342342
rel.IsDraft = len(form.Draft) > 0
343343
rel.IsPrerelease = form.Prerelease
344-
if err = releaseservice.UpdateRelease(ctx.User, ctx.Repo.GitRepo, rel, attachmentUUIDs); err != nil {
344+
if err = releaseservice.UpdateReleaseOrCreatReleaseFromTag(ctx.User, ctx.Repo.GitRepo, rel, attachmentUUIDs, false); err != nil {
345345
ctx.ServerError("UpdateRelease", err)
346346
return
347347
}

services/release/release.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ func CreateRelease(gitRepo *git.Repository, rel *models.Release, attachmentUUIDs
9595
return nil
9696
}
9797

98-
// UpdateRelease updates information of a release.
99-
func UpdateRelease(doer *models.User, gitRepo *git.Repository, rel *models.Release, attachmentUUIDs []string) (err error) {
98+
// UpdateReleaseOrCreatReleaseFromTag updates information of a release or create release from tag.
99+
func UpdateReleaseOrCreatReleaseFromTag(doer *models.User, gitRepo *git.Repository, rel *models.Release, attachmentUUIDs []string, isCreate bool) (err error) {
100100
if err = createTag(gitRepo, rel); err != nil {
101101
return err
102102
}
@@ -110,7 +110,14 @@ func UpdateRelease(doer *models.User, gitRepo *git.Repository, rel *models.Relea
110110
log.Error("AddReleaseAttachments: %v", err)
111111
}
112112

113-
notification.NotifyUpdateRelease(doer, rel)
113+
if !isCreate {
114+
notification.NotifyUpdateRelease(doer, rel)
115+
return
116+
}
117+
118+
if !rel.IsDraft {
119+
notification.NotifyNewRelease(rel)
120+
}
114121

115122
return err
116123
}

services/release/release_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ func TestRelease_Update(t *testing.T) {
131131
releaseCreatedUnix := release.CreatedUnix
132132
time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp
133133
release.Note = "Changed note"
134-
assert.NoError(t, UpdateRelease(user, gitRepo, release, nil))
134+
assert.NoError(t, UpdateReleaseOrCreatReleaseFromTag(user, gitRepo, release, nil, false))
135135
release, err = models.GetReleaseByID(release.ID)
136136
assert.NoError(t, err)
137137
assert.Equal(t, int64(releaseCreatedUnix), int64(release.CreatedUnix))
@@ -153,7 +153,7 @@ func TestRelease_Update(t *testing.T) {
153153
releaseCreatedUnix = release.CreatedUnix
154154
time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp
155155
release.Title = "Changed title"
156-
assert.NoError(t, UpdateRelease(user, gitRepo, release, nil))
156+
assert.NoError(t, UpdateReleaseOrCreatReleaseFromTag(user, gitRepo, release, nil, false))
157157
release, err = models.GetReleaseByID(release.ID)
158158
assert.NoError(t, err)
159159
assert.Less(t, int64(releaseCreatedUnix), int64(release.CreatedUnix))
@@ -176,7 +176,7 @@ func TestRelease_Update(t *testing.T) {
176176
time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp
177177
release.Title = "Changed title"
178178
release.Note = "Changed note"
179-
assert.NoError(t, UpdateRelease(user, gitRepo, release, nil))
179+
assert.NoError(t, UpdateReleaseOrCreatReleaseFromTag(user, gitRepo, release, nil, false))
180180
release, err = models.GetReleaseByID(release.ID)
181181
assert.NoError(t, err)
182182
assert.Equal(t, int64(releaseCreatedUnix), int64(release.CreatedUnix))

templates/user/dashboard/feeds.tmpl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@
7070
{{else if eq .GetOpType 23}}
7171
{{ $index := index .GetIssueInfos 0}}
7272
{{$.i18n.Tr "action.comment_pull" .GetRepoLink $index .ShortRepoPath | Str2html}}
73+
{{else if eq .GetOpType 24}}
74+
{{ $branchLink := .GetBranch | EscapePound | Escape}}
75+
{{ $linkText := .Content | RenderEmoji }}
76+
{{$.i18n.Tr "action.publish_release" .GetRepoLink $branchLink .ShortRepoPath $linkText | Str2html}}
7377
{{end}}
7478
</p>
7579
{{if or (eq .GetOpType 5) (eq .GetOpType 18)}}

0 commit comments

Comments
 (0)