aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/db/release.go6
-rw-r--r--internal/route/api/v1/api.go1
-rw-r--r--internal/route/api/v1/repo/repo.go23
3 files changed, 30 insertions, 0 deletions
diff --git a/internal/db/release.go b/internal/db/release.go
index 71a72dae..7ec558b8 100644
--- a/internal/db/release.go
+++ b/internal/db/release.go
@@ -267,6 +267,12 @@ func GetPublishedReleasesByRepoID(repoID int64, matches ...string) ([]*Release,
return releases, sess.Find(&releases, new(Release))
}
+// GetReleasesByRepoID returns a list of all releases (including drafts) of given repository.
+func GetReleasesByRepoID(repoID int64) ([]*Release, error) {
+ releases := make([]*Release, 0)
+ return releases, x.Where("repo_id = ?", repoID).Find(&releases)
+}
+
// GetDraftReleasesByRepoID returns all draft releases of repository.
func GetDraftReleasesByRepoID(repoID int64) ([]*Release, error) {
releases := make([]*Release, 0)
diff --git a/internal/route/api/v1/api.go b/internal/route/api/v1/api.go
index b56d640b..01f23d42 100644
--- a/internal/route/api/v1/api.go
+++ b/internal/route/api/v1/api.go
@@ -245,6 +245,7 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Get("/search", repo.Search)
m.Get("/:username/:reponame", repoAssignment(), repo.Get)
+ m.Get("/:username/:reponame/releases", repoAssignment(), repo.Releases)
})
m.Group("/repos", func() {
diff --git a/internal/route/api/v1/repo/repo.go b/internal/route/api/v1/repo/repo.go
index e198dffc..71b94d75 100644
--- a/internal/route/api/v1/repo/repo.go
+++ b/internal/route/api/v1/repo/repo.go
@@ -403,3 +403,26 @@ func MirrorSync(c *context.APIContext) {
go db.MirrorQueue.Add(repo.ID)
c.Status(http.StatusAccepted)
}
+
+func Releases(c *context.APIContext) {
+ _, repo := parseOwnerAndRepo(c)
+ releases, err := db.GetReleasesByRepoID(repo.ID)
+ if err != nil {
+ c.Error(err, "get releases by repository ID")
+ return
+ }
+ apiReleases := make([]*api.Release, 0, len(releases))
+ for _, r := range releases {
+ publisher, err := db.GetUserByID(r.PublisherID)
+ if err != nil {
+ c.Error(err, "get release publisher")
+ return
+ }
+ r.Publisher = publisher
+ }
+ for _, r := range releases {
+ apiReleases = append(apiReleases, r.APIFormat())
+ }
+
+ c.JSONSuccess(&apiReleases)
+}