Skip to content

Commit f685b9d

Browse files
committed
Retrieve the latest release using the HTTP client
This avoids a dependency on go-github, which drops a few transitive dependencies that were only used to retrieve the latest release from the GitHub API. This helps our dependency tree... Signed-off-by: Stephen Kitt <[email protected]>
1 parent 42af559 commit f685b9d

File tree

3 files changed

+40
-23
lines changed

3 files changed

+40
-23
lines changed

cmd/subctl/upgrade.go

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,18 @@ package subctl
2222

2323
import (
2424
"context"
25+
"encoding/json"
26+
goerrors "errors"
27+
"fmt"
28+
"io"
29+
"net/http"
2530
"os"
2631
"os/exec"
2732
"path/filepath"
2833
"strings"
34+
"time"
2935

3036
"github.com/coreos/go-semver/semver"
31-
"github.com/google/go-github/v54/github"
3237
"github.com/spf13/cobra"
3338
"github.com/submariner-io/admiral/pkg/names"
3439
"github.com/submariner-io/admiral/pkg/reporter"
@@ -107,12 +112,9 @@ func upgradeSubctl(status reporter.Interface) (string, error) {
107112

108113
// If the user hasn't specified a version, try to find the latest release on GitHub
109114
if upgradeSubctlVersion == "" {
110-
client := github.NewClient(nil)
111-
latestRelease, _, err := client.Repositories.GetLatestRelease(context.TODO(), "submariner-io", "releases")
112-
113-
// If we can't determine the latest release, we'll force a download and delegate to get.submariner.io
114-
if err == nil {
115-
upgradeSubctlVersion = *latestRelease.TagName
115+
tag, err := retrieveLatestReleaseTag()
116+
if err != nil {
117+
upgradeSubctlVersion = tag
116118
}
117119
}
118120

@@ -165,6 +167,37 @@ func upgradeSubctl(status reporter.Interface) (string, error) {
165167
return absolutePath, nil
166168
}
167169

170+
func retrieveLatestReleaseTag() (string, error) {
171+
// Retrieve the latest release tag from https://api.github.com/repos/submariner-io/releases/releases/latest
172+
// (the duplicate "releases" portion is normal, it points to the releases of the Submariner releases project)
173+
httpClient := &http.Client{Timeout: 10 * time.Second}
174+
175+
r, err := httpClient.Get("https://api.github.com/repos/submariner-io/releases/releases/latest")
176+
if err != nil {
177+
return "", fmt.Errorf("error accessing GitHub: %w", err)
178+
}
179+
defer r.Body.Close()
180+
181+
response, err := io.ReadAll(r.Body)
182+
if err != nil {
183+
return "", fmt.Errorf("error reading from GitHub: %w", err)
184+
}
185+
186+
var unstructured map[string]any
187+
188+
err = json.Unmarshal(response, &unstructured)
189+
if err != nil {
190+
return "", fmt.Errorf("error unmarshaling the JSON response from GitHub: %w", err)
191+
}
192+
193+
tagName, ok := unstructured["tag_name"]
194+
if ok {
195+
return tagName.(string), nil
196+
}
197+
198+
return "", goerrors.New("no tag name found in the latest release data")
199+
}
200+
168201
func upgradeSubmariner(clusterInfo *cluster.Info, _ string, status reporter.Interface) error {
169202
ctx := context.TODO()
170203

go.mod

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ require (
77
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.0
88
github.com/coreos/go-semver v0.3.1
99
github.com/go-logr/logr v1.4.3
10-
github.com/google/go-github/v54 v54.0.0
1110
github.com/gophercloud/utils v0.0.0-20210909165623-d7085207ff6d
1211
github.com/mattn/go-isatty v0.0.20
1312
github.com/onsi/ginkgo/v2 v2.26.0
@@ -46,7 +45,6 @@ require (
4645
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 // indirect
4746
github.com/AzureAD/microsoft-authentication-library-for-go v1.5.0 // indirect
4847
github.com/Masterminds/semver/v3 v3.4.0 // indirect
49-
github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect
5048
github.com/aws/aws-sdk-go-v2 v1.39.2 // indirect
5149
github.com/aws/aws-sdk-go-v2/config v1.31.12 // indirect
5250
github.com/aws/aws-sdk-go-v2/credentials v1.18.16 // indirect
@@ -61,7 +59,6 @@ require (
6159
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 // indirect
6260
github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 // indirect
6361
github.com/aws/smithy-go v1.23.0 // indirect
64-
github.com/cloudflare/circl v1.6.1 // indirect
6562
github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
6663
github.com/creack/pty v1.1.18 // indirect
6764
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
@@ -78,7 +75,6 @@ require (
7875
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
7976
github.com/google/gnostic-models v0.7.0 // indirect
8077
github.com/google/go-cmp v0.7.0 // indirect
81-
github.com/google/go-querystring v1.1.0 // indirect
8278
github.com/google/licenseclassifier v0.0.0-20201113175434-78a70215ca36 // indirect
8379
github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6 // indirect
8480
github.com/google/s2a-go v0.1.9 // indirect

go.sum

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1
3131
github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
3232
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
3333
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
34-
github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA=
35-
github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g=
3634
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
3735
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
3836
github.com/aws/aws-sdk-go-v2 v1.39.2 h1:EJLg8IdbzgeD7xgvZ+I8M1e0fL0ptn/M47lianzth0I=
@@ -65,12 +63,8 @@ github.com/aws/smithy-go v1.23.0 h1:8n6I3gXzWJB2DxBDnfxgBaSX6oe0d/t10qGz7OKqMCE=
6563
github.com/aws/smithy-go v1.23.0/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
6664
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
6765
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
68-
github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
6966
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
7067
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
71-
github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I=
72-
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
73-
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
7468
github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
7569
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
7670
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
@@ -125,13 +119,8 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6
125119
github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
126120
github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
127121
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
128-
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
129122
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
130123
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
131-
github.com/google/go-github/v54 v54.0.0 h1:OZdXwow4EAD5jEo5qg+dGFH2DpkyZvVsAehjvJuUL/c=
132-
github.com/google/go-github/v54 v54.0.0/go.mod h1:Sw1LXWHhXRZtzJ9LI5fyJg9wbQzYvFhW8W5P2yaAQ7s=
133-
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
134-
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
135124
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
136125
github.com/google/licenseclassifier v0.0.0-20201113175434-78a70215ca36 h1:YGB3wNLUTvq+lbIwdNRsaMJvoX4mCKkwzHlmlT1V+ow=
137126
github.com/google/licenseclassifier v0.0.0-20201113175434-78a70215ca36/go.mod h1:qsqn2hxC+vURpyBRygGUuinTO42MFRLcsmQ/P8v94+M=
@@ -365,7 +354,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
365354
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
366355
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
367356
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
368-
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
369357
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
370358
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
371359
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

0 commit comments

Comments
 (0)