MCPcopy Create free account
hub / github.com/TheThingsNetwork/lorawan-stack / latest

Function latest

pkg/version/remote.go:68–102  ·  view source on GitHub ↗

latest returns the latest version listed in url, according to semver, expecting an array of release. latest skips version strings that cannot be parsed. latest returns an error when there are no correct versions.

(ctx context.Context, client *http.Client, url string)

Source from the content-addressed store, hash-verified

66// latest skips version strings that cannot be parsed.
67// latest returns an error when there are no correct versions.
68func latest(ctx context.Context, client *http.Client, url string) (semver.Version, error) {
69 req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
70 if err != nil {
71 return semver.Version{}, err
72 }
73 resp, err := client.Do(req)
74 if err != nil {
75 return semver.Version{}, err
76 }
77 defer resp.Body.Close()
78 body, err := io.ReadAll(resp.Body)
79 if err != nil {
80 return semver.Version{}, err
81 }
82 var releases []release
83 err = json.Unmarshal(body, &releases)
84 if err != nil {
85 return semver.Version{}, err
86 }
87 var maxVersion *semver.Version
88 for _, r := range releases {
89 versionString := strings.TrimPrefix(r.TagName, "v")
90 rv, err := semver.Parse(versionString)
91 if err != nil {
92 continue
93 }
94 if maxVersion == nil || rv.GT(*maxVersion) {
95 maxVersion = &rv
96 }
97 }
98 if maxVersion == nil {
99 return semver.Version{}, errNoRemote.WithAttributes("url", url)
100 }
101 return *maxVersion, nil
102}
103
104// Update is the latest version.
105type Update struct {

Callers 1

CheckUpdateFunction · 0.85

Calls 6

TrimPrefixMethod · 0.80
CloseMethod · 0.65
UnmarshalMethod · 0.65
ParseMethod · 0.65
DoMethod · 0.45
WithAttributesMethod · 0.45

Tested by

no test coverage detected