99 "fmt"
1010 "io"
1111 "net/http"
12+ "strings"
1213
1314 "golang.org/x/mod/semver"
1415)
@@ -25,13 +26,45 @@ func NewManager() *Manager {
2526 }
2627}
2728
29+ func (mgr * Manager ) filterReleases (releases Releases , version string ) Releases {
30+ if ! strings .HasPrefix (version , "v" ) {
31+ version = "v" + version
32+ }
33+
34+ // filter pre-releases and older releases
35+ r := make (Releases , 0 , len (releases ))
36+ for _ , release := range releases {
37+ s := strings .Split (release .TagName , "@" )
38+ if len (s ) != 2 { //nolint:mnd
39+ continue
40+ }
41+
42+ releaseName := s [0 ]
43+ releaseVersion := s [1 ]
44+
45+ if ! strings .HasPrefix (releaseVersion , "v" ) {
46+ releaseVersion = "v" + releaseVersion
47+ }
48+
49+ if releaseName != "cli" ||
50+ release .Prerelease ||
51+ semver .Compare (version , releaseVersion ) >= 0 {
52+ continue
53+ }
54+
55+ r = append (r , release )
56+ }
57+
58+ return r
59+ }
60+
2861func (mgr * Manager ) GetReleases (ctx context.Context , version string ) (Releases , error ) {
2962 var releases Releases
3063
3164 req , err := http .NewRequestWithContext (
3265 ctx ,
3366 http .MethodGet ,
34- "https://api.github.com/repos/nhost/cli /releases?per_page=100" ,
67+ "https://api.github.com/repos/nhost/nhost /releases?per_page=100" ,
3568 nil ,
3669 )
3770 if err != nil {
@@ -62,15 +95,7 @@ func (mgr *Manager) GetReleases(ctx context.Context, version string) (Releases,
6295 }
6396
6497 // filter pre-releases and older releases
65- r := make (Releases , 0 , len (releases ))
66- for _ , release := range releases {
67- switch {
68- case release .Prerelease :
69- case semver .Compare (version , release .TagName ) >= 0 :
70- default :
71- r = append (r , release )
72- }
73- }
98+ r := mgr .filterReleases (releases , version )
7499
75100 mgr .cache = r
76101
0 commit comments