Select Git revision
server_releases.go
Forked from
flow3r / API
Source project has a limited visibility.
server_releases.go 2.42 KiB
package main
import (
"context"
"encoding/json"
"fmt"
"net/http"
"net/url"
"time"
)
type GLAssetLink struct {
ID int64 `json:"id"`
Name string `json:"name"`
TagName string `json:"tag_name"`
URL string `json:"url"`
}
type GLRelease struct {
Name string `json:"name"`
TagName string `json:"tag_name"`
ReleasedAt time.Time `json:"released_at"`
Assets struct {
Links []GLAssetLink `json:"links"`
} `json:"assets"`
}
func getReleases(ctx context.Context) ([]GLRelease, error) {
path := fmt.Sprintf("https://%s/api/v4/projects/%s/releases?order_by=created_at", flagGitlabHost, url.PathEscape(flagGitlabProject))
req, err := http.NewRequestWithContext(ctx, "GET", path, nil)
if err != nil {
return nil, fmt.Errorf("when building request: %w", err)
}
res, err := http.DefaultTransport.RoundTrip(req)
if err != nil {
return nil, fmt.Errorf("when performing request: %w", err)
}
defer res.Body.Close()
if res.StatusCode != 200 {
return nil, fmt.Errorf("invalid response code %d", res.StatusCode)
}
var releases []GLRelease
j := json.NewDecoder(res.Body)
err = j.Decode(&releases)
if err != nil {
return nil, fmt.Errorf("when performing request: %w", err)
}
return releases, nil
}
func (s *server) handleReleases(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
releases, err := s.getReleases(ctx)
if err != nil {
return
}
type partition struct {
Name string `json:"name"`
URL string `json:"url"`
Offset string `json:"offset"`
}
type release struct {
Name string `json:"name"`
Tag string `json:"tag"`
Partitions []partition `json:"partitions"`
}