Skip to content
This repository was archived by the owner on Sep 30, 2024. It is now read-only.

Commit 4641bc5

Browse files
author
Craig Furman
authored
chore(sg): extract releaseregistry client package (#63382)
In preparation for reuse elsewhere.
1 parent 4b3cfa3 commit 4641bc5

File tree

5 files changed

+85
-65
lines changed

5 files changed

+85
-65
lines changed

dev/sg/internal/release/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ go_library(
2121
"//dev/sg/internal/repo",
2222
"//dev/sg/internal/std",
2323
"//internal/jsonc",
24+
"//internal/releaseregistry",
2425
"//lib/errors",
2526
"//lib/output",
2627
"@com_github_grafana_regexp//:regexp",

dev/sg/internal/release/list_release.go

Lines changed: 2 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,18 @@
11
package release
22

33
import (
4-
"context"
54
"encoding/json"
6-
"net/http"
7-
"net/url"
85
"os"
96
"time"
107

118
"github.com/urfave/cli/v2"
129

1310
"github.com/sourcegraph/sourcegraph/dev/sg/internal/category"
1411
"github.com/sourcegraph/sourcegraph/dev/sg/internal/std"
12+
"github.com/sourcegraph/sourcegraph/internal/releaseregistry"
1513
"github.com/sourcegraph/sourcegraph/lib/output"
1614
)
1715

18-
const releaseRegistryEndpoint = "https://releaseregistry.sourcegraph.com/v1/"
19-
20-
type RegistryVersion struct {
21-
ID int32 `json:"id"`
22-
Name string `json:"name"`
23-
Public bool `json:"public"`
24-
CreatedAt time.Time `json:"created_at"`
25-
PromotedAt *time.Time `json:"promoted_at"`
26-
Version string `json:"version"`
27-
GitSHA string `json:"git_sha"`
28-
IsDevelopment bool `json:"is_development"`
29-
}
30-
31-
type releaseRegistryClient struct {
32-
endpoint string
33-
client http.Client
34-
}
35-
36-
func newReleaseRegistryClient(endpoint string) *releaseRegistryClient {
37-
return &releaseRegistryClient{
38-
endpoint: endpoint,
39-
client: http.Client{},
40-
}
41-
}
42-
43-
func (r *releaseRegistryClient) newRequest(method, path string) (*http.Request, error) {
44-
urlPath, err := url.JoinPath(r.endpoint, path)
45-
if err != nil {
46-
return nil, err
47-
}
48-
49-
req, err := http.NewRequest(method, urlPath, nil)
50-
if err != nil {
51-
return nil, err
52-
}
53-
req.Header.Set("Accept", "application/json")
54-
return req, nil
55-
}
56-
57-
func (r *releaseRegistryClient) ListVersions(ctx context.Context) ([]RegistryVersion, error) {
58-
req, err := r.newRequest(http.MethodGet, "releases")
59-
if err != nil {
60-
return nil, err
61-
}
62-
63-
resp, err := r.client.Do(req)
64-
if err != nil {
65-
return nil, err
66-
}
67-
defer resp.Body.Close()
68-
69-
results := []RegistryVersion{}
70-
71-
err = json.NewDecoder(resp.Body).Decode(&results)
72-
if err != nil {
73-
return nil, err
74-
}
75-
76-
return results, nil
77-
}
78-
7916
var listReleaseCommand = &cli.Command{
8017
Name: "list",
8118
Usage: "list versions from the release registry",
@@ -92,7 +29,7 @@ var listReleaseCommand = &cli.Command{
9229
}
9330

9431
func listRegistryVersions(cmd *cli.Context) error {
95-
client := newReleaseRegistryClient(releaseRegistryEndpoint)
32+
client := releaseregistry.NewClient(releaseregistry.Endpoint)
9633

9734
out := std.NewOutput(os.Stderr, false)
9835
pending := out.Pending(output.Line("", output.StylePending, "Fetching versions from the release registry..."))

internal/releaseregistry/BUILD.bazel

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
load("@io_bazel_rules_go//go:def.bzl", "go_library")
2+
3+
go_library(
4+
name = "releaseregistry",
5+
srcs = ["client.go"],
6+
importpath = "github.com/sourcegraph/sourcegraph/internal/releaseregistry",
7+
visibility = ["//:__subpackages__"],
8+
)

internal/releaseregistry/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# releaseregistry
2+
3+
A go client for <https://github.com/sourcegraph/releaseregistry>. Please see
4+
that repository for more details.

internal/releaseregistry/client.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package releaseregistry
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"net/http"
7+
"net/url"
8+
"time"
9+
)
10+
11+
const Endpoint = "https://releaseregistry.sourcegraph.com/v1/"
12+
13+
type ReleaseInfo struct {
14+
ID int32 `json:"id"`
15+
Name string `json:"name"`
16+
Public bool `json:"public"`
17+
CreatedAt time.Time `json:"created_at"`
18+
PromotedAt *time.Time `json:"promoted_at"`
19+
Version string `json:"version"`
20+
GitSHA string `json:"git_sha"`
21+
IsDevelopment bool `json:"is_development"`
22+
}
23+
24+
type Client struct {
25+
endpoint string
26+
client http.Client
27+
}
28+
29+
func NewClient(endpoint string) *Client {
30+
return &Client{
31+
endpoint: endpoint,
32+
client: http.Client{},
33+
}
34+
}
35+
36+
func (r *Client) newRequest(ctx context.Context, method, path string) (*http.Request, error) {
37+
urlPath, err := url.JoinPath(r.endpoint, path)
38+
if err != nil {
39+
return nil, err
40+
}
41+
42+
req, err := http.NewRequestWithContext(ctx, method, urlPath, nil)
43+
if err != nil {
44+
return nil, err
45+
}
46+
req.Header.Set("Accept", "application/json")
47+
return req, nil
48+
}
49+
50+
func (r *Client) ListVersions(ctx context.Context) ([]ReleaseInfo, error) {
51+
req, err := r.newRequest(ctx, http.MethodGet, "releases")
52+
if err != nil {
53+
return nil, err
54+
}
55+
56+
resp, err := r.client.Do(req)
57+
if err != nil {
58+
return nil, err
59+
}
60+
defer resp.Body.Close()
61+
62+
results := []ReleaseInfo{}
63+
64+
err = json.NewDecoder(resp.Body).Decode(&results)
65+
if err != nil {
66+
return nil, err
67+
}
68+
69+
return results, nil
70+
}

0 commit comments

Comments
 (0)