Skip to content

Commit 7e8ff70

Browse files
authored
1 parent a11ccc9 commit 7e8ff70

File tree

4 files changed

+168
-165
lines changed

4 files changed

+168
-165
lines changed

routers/web/repo/release.go

Lines changed: 87 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"code.gitea.io/gitea/models"
1414
"code.gitea.io/gitea/models/db"
15+
git_model "code.gitea.io/gitea/models/git"
1516
repo_model "code.gitea.io/gitea/models/repo"
1617
"code.gitea.io/gitea/models/unit"
1718
user_model "code.gitea.io/gitea/models/user"
@@ -67,50 +68,24 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *repo_model
6768
return nil
6869
}
6970

70-
// Releases render releases list page
71-
func Releases(ctx *context.Context) {
72-
ctx.Data["PageIsReleaseList"] = true
73-
ctx.Data["Title"] = ctx.Tr("repo.release.releases")
74-
ctx.Data["IsViewBranch"] = false
75-
ctx.Data["IsViewTag"] = true
76-
// Disable the showCreateNewBranch form in the dropdown on this page.
77-
ctx.Data["CanCreateBranch"] = false
78-
ctx.Data["HideBranchesInDropdown"] = true
79-
80-
listOptions := db.ListOptions{
81-
Page: ctx.FormInt("page"),
82-
PageSize: ctx.FormInt("limit"),
83-
}
84-
if listOptions.PageSize == 0 {
85-
listOptions.PageSize = setting.Repository.Release.DefaultPagingNum
86-
}
87-
if listOptions.PageSize > setting.API.MaxResponseItems {
88-
listOptions.PageSize = setting.API.MaxResponseItems
89-
}
90-
91-
writeAccess := ctx.Repo.CanWrite(unit.TypeReleases)
92-
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived
93-
94-
opts := repo_model.FindReleasesOptions{
95-
ListOptions: listOptions,
96-
// only show draft releases for users who can write, read-only users shouldn't see draft releases.
97-
IncludeDrafts: writeAccess,
98-
RepoID: ctx.Repo.Repository.ID,
99-
}
71+
type ReleaseInfo struct {
72+
Release *repo_model.Release
73+
CommitStatus *git_model.CommitStatus
74+
CommitStatuses []*git_model.CommitStatus
75+
}
10076

77+
func getReleaseInfos(ctx *context.Context, opts *repo_model.FindReleasesOptions) ([]*ReleaseInfo, error) {
10178
releases, err := db.Find[repo_model.Release](ctx, opts)
10279
if err != nil {
103-
ctx.ServerError("GetReleasesByRepoID", err)
104-
return
80+
return nil, err
10581
}
10682

10783
for _, release := range releases {
10884
release.Repo = ctx.Repo.Repository
10985
}
11086

11187
if err = repo_model.GetReleaseAttachments(ctx, releases...); err != nil {
112-
ctx.ServerError("GetReleaseAttachments", err)
113-
return
88+
return nil, err
11489
}
11590

11691
// Temporary cache commits count of used branches to speed up.
@@ -121,15 +96,17 @@ func Releases(ctx *context.Context) {
12196
}
12297
var ok bool
12398

99+
canReadActions := ctx.Repo.CanRead(unit.TypeActions)
100+
101+
releaseInfos := make([]*ReleaseInfo, 0, len(releases))
124102
for _, r := range releases {
125103
if r.Publisher, ok = cacheUsers[r.PublisherID]; !ok {
126104
r.Publisher, err = user_model.GetUserByID(ctx, r.PublisherID)
127105
if err != nil {
128106
if user_model.IsErrUserNotExist(err) {
129107
r.Publisher = user_model.NewGhostUser()
130108
} else {
131-
ctx.ServerError("GetUserByID", err)
132-
return
109+
return nil, err
133110
}
134111
}
135112
cacheUsers[r.PublisherID] = r.Publisher
@@ -144,24 +121,74 @@ func Releases(ctx *context.Context) {
144121
Ctx: ctx,
145122
}, r.Note)
146123
if err != nil {
147-
ctx.ServerError("RenderString", err)
148-
return
124+
return nil, err
149125
}
150126

151-
if r.IsDraft {
152-
continue
127+
if !r.IsDraft {
128+
if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil {
129+
return nil, err
130+
}
153131
}
154132

155-
if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil {
156-
ctx.ServerError("calReleaseNumCommitsBehind", err)
157-
return
133+
info := &ReleaseInfo{
134+
Release: r,
158135
}
136+
137+
if canReadActions {
138+
statuses, _, err := git_model.GetLatestCommitStatus(ctx, r.Repo.ID, r.Sha1, db.ListOptions{ListAll: true})
139+
if err != nil {
140+
return nil, err
141+
}
142+
143+
info.CommitStatus = git_model.CalcCommitStatus(statuses)
144+
info.CommitStatuses = statuses
145+
}
146+
147+
releaseInfos = append(releaseInfos, info)
148+
}
149+
150+
return releaseInfos, nil
151+
}
152+
153+
// Releases render releases list page
154+
func Releases(ctx *context.Context) {
155+
ctx.Data["PageIsReleaseList"] = true
156+
ctx.Data["Title"] = ctx.Tr("repo.release.releases")
157+
ctx.Data["IsViewBranch"] = false
158+
ctx.Data["IsViewTag"] = true
159+
// Disable the showCreateNewBranch form in the dropdown on this page.
160+
ctx.Data["CanCreateBranch"] = false
161+
ctx.Data["HideBranchesInDropdown"] = true
162+
163+
listOptions := db.ListOptions{
164+
Page: ctx.FormInt("page"),
165+
PageSize: ctx.FormInt("limit"),
166+
}
167+
if listOptions.PageSize == 0 {
168+
listOptions.PageSize = setting.Repository.Release.DefaultPagingNum
169+
}
170+
if listOptions.PageSize > setting.API.MaxResponseItems {
171+
listOptions.PageSize = setting.API.MaxResponseItems
172+
}
173+
174+
writeAccess := ctx.Repo.CanWrite(unit.TypeReleases)
175+
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived
176+
177+
releases, err := getReleaseInfos(ctx, &repo_model.FindReleasesOptions{
178+
ListOptions: listOptions,
179+
// only show draft releases for users who can write, read-only users shouldn't see draft releases.
180+
IncludeDrafts: writeAccess,
181+
RepoID: ctx.Repo.Repository.ID,
182+
})
183+
if err != nil {
184+
ctx.ServerError("getReleaseInfos", err)
185+
return
159186
}
160187

161188
ctx.Data["Releases"] = releases
162189

163190
numReleases := ctx.Data["NumReleases"].(int64)
164-
pager := context.NewPagination(int(numReleases), opts.PageSize, opts.Page, 5)
191+
pager := context.NewPagination(int(numReleases), listOptions.PageSize, listOptions.Page, 5)
165192
pager.SetDefaultParams(ctx)
166193
ctx.Data["Page"] = pager
167194

@@ -249,59 +276,32 @@ func SingleRelease(ctx *context.Context) {
249276
writeAccess := ctx.Repo.CanWrite(unit.TypeReleases)
250277
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived
251278

252-
release, err := repo_model.GetRelease(ctx, ctx.Repo.Repository.ID, ctx.Params("*"))
279+
releases, err := getReleaseInfos(ctx, &repo_model.FindReleasesOptions{
280+
ListOptions: db.ListOptions{Page: 1, PageSize: 1},
281+
RepoID: ctx.Repo.Repository.ID,
282+
TagNames: []string{ctx.Params("*")},
283+
// only show draft releases for users who can write, read-only users shouldn't see draft releases.
284+
IncludeDrafts: writeAccess,
285+
})
253286
if err != nil {
254-
if repo_model.IsErrReleaseNotExist(err) {
255-
ctx.NotFound("GetRelease", err)
256-
return
257-
}
258-
ctx.ServerError("GetReleasesByRepoID", err)
287+
ctx.ServerError("getReleaseInfos", err)
288+
return
289+
}
290+
if len(releases) != 1 {
291+
ctx.NotFound("SingleRelease", err)
259292
return
260293
}
294+
295+
release := releases[0].Release
296+
261297
ctx.Data["PageIsSingleTag"] = release.IsTag
262298
if release.IsTag {
263299
ctx.Data["Title"] = release.TagName
264300
} else {
265301
ctx.Data["Title"] = release.Title
266302
}
267303

268-
release.Repo = ctx.Repo.Repository
269-
270-
err = repo_model.GetReleaseAttachments(ctx, release)
271-
if err != nil {
272-
ctx.ServerError("GetReleaseAttachments", err)
273-
return
274-
}
275-
276-
release.Publisher, err = user_model.GetUserByID(ctx, release.PublisherID)
277-
if err != nil {
278-
if user_model.IsErrUserNotExist(err) {
279-
release.Publisher = user_model.NewGhostUser()
280-
} else {
281-
ctx.ServerError("GetUserByID", err)
282-
return
283-
}
284-
}
285-
if !release.IsDraft {
286-
if err := calReleaseNumCommitsBehind(ctx.Repo, release, make(map[string]int64)); err != nil {
287-
ctx.ServerError("calReleaseNumCommitsBehind", err)
288-
return
289-
}
290-
}
291-
release.Note, err = markdown.RenderString(&markup.RenderContext{
292-
Links: markup.Links{
293-
Base: ctx.Repo.RepoLink,
294-
},
295-
Metas: ctx.Repo.Repository.ComposeMetas(ctx),
296-
GitRepo: ctx.Repo.GitRepo,
297-
Ctx: ctx,
298-
}, release.Note)
299-
if err != nil {
300-
ctx.ServerError("RenderString", err)
301-
return
302-
}
303-
304-
ctx.Data["Releases"] = []*repo_model.Release{release}
304+
ctx.Data["Releases"] = releases
305305
ctx.HTML(http.StatusOK, tplReleasesList)
306306
}
307307

services/actions/commit_status.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ func createCommitStatus(ctx context.Context, job *actions_model.ActionRunJob) er
6464
return fmt.Errorf("head of pull request is missing in event payload")
6565
}
6666
sha = payload.PullRequest.Head.Sha
67+
case webhook_module.HookEventRelease:
68+
event = string(run.Event)
69+
sha = run.CommitSHA
6770
default:
6871
return nil
6972
}

templates/repo/commit_statuses.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{{if .Statuses}}
22
{{if and (eq (len .Statuses) 1) .Status.TargetURL}}
3-
<a class="gt-vm gt-no-underline" data-tippy="commit-statuses" href="{{.Status.TargetURL}}">
3+
<a class="gt-vm {{.AdditionalClasses}} gt-no-underline" data-tippy="commit-statuses" href="{{.Status.TargetURL}}">
44
{{template "repo/commit_status" .Status}}
55
</a>
66
{{else}}
7-
<span class="gt-vm" data-tippy="commit-statuses" tabindex="0">
7+
<span class="gt-vm {{.AdditionalClasses}}" data-tippy="commit-statuses" tabindex="0">
88
{{template "repo/commit_status" .Status}}
99
</span>
1010
{{end}}

0 commit comments

Comments
 (0)