Skip to content

Commit 0def155

Browse files
feat: add /versions endpoint
1 parent d025d9e commit 0def155

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

internal/plugin/plugin.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ func (p *Plugin) Update(ctx context.Context, db *firestore.Client, ghClient *git
153153
return err
154154
}
155155

156-
func (p *Plugin) getVersions(ctx context.Context, db *firestore.Client) ([]string, error) {
156+
func (p *Plugin) GetVersions(ctx context.Context, db *firestore.Client) ([]string, error) {
157157
versionRefs, err := p.getVersionsColRef(db).DocumentRefs(ctx).GetAll()
158158
if err != nil {
159159
return nil, err
@@ -195,7 +195,7 @@ func (p *Plugin) Get(ctx context.Context, db *firestore.Client) (*registry.Plugi
195195
if err != nil {
196196
return nil, fmt.Errorf("failed to get plugin: %w", err)
197197
}
198-
versions, err := p.getVersions(ctx, db)
198+
versions, err := p.GetVersions(ctx, db)
199199
if err != nil {
200200
return nil, fmt.Errorf("failed to get versions: %w", err)
201201
}
@@ -234,7 +234,7 @@ func (p *Plugin) GetReleaseWithVersionConstraint(ctx context.Context, db *firest
234234
return nil, fmt.Errorf("failed to parse version constraint: %w", err)
235235
}
236236

237-
versions, err := p.getVersions(ctx, db)
237+
versions, err := p.GetVersions(ctx, db)
238238
if err != nil {
239239
return nil, fmt.Errorf("failed to get versions: %w", err)
240240
}

internal/server/handlers.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,20 @@ func (s *Server) getPlugin(w http.ResponseWriter, r *http.Request) {
7474
s.setInCache(s.getCacheKeyFromRequest(r), res)
7575
s.writeJSON(w, res)
7676
}
77+
78+
func (s *Server) listPluginVersions(w http.ResponseWriter, r *http.Request) {
79+
pluginName := chi.URLParam(r, "plugin")
80+
p := config.Plugins.Find(pluginName)
81+
if p == nil {
82+
s.writeJSONError(w, r, 404, fmt.Errorf("plugin %s not found", pluginName))
83+
return
84+
}
85+
86+
versions, err := p.GetVersions(r.Context(), s.db)
87+
if err != nil {
88+
s.writeJSONError(w, r, http.StatusInternalServerError, err, "could not get plugin versions")
89+
return
90+
}
91+
s.setInCache(s.getCacheKeyFromRequest(r), versions)
92+
s.writeJSON(w, versions)
93+
}

internal/server/server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ func New(log *logrus.Logger, db *firestore.Client, ghClient *github.Client, stor
7979
r.With(server.cacheMiddleware).Group(func(r chi.Router) {
8080
r.Get("/", server.listPlugins)
8181
r.Get("/{plugin}", server.getPlugin)
82+
r.Get("/{plugin}/versions", server.listPluginVersions)
8283
r.Get("/{plugin}/versions/{version}", server.getPlugin)
8384
})
8485
r.Post("/_batch", server.batchGetPlugins)

0 commit comments

Comments
 (0)