99 "strings"
1010 "time"
1111
12- "github.com/hashicorp/go- version"
12+ k0sversion "github.com/k0sproject/ version"
1313)
1414
1515const timeOut = time .Second * 10
@@ -29,11 +29,11 @@ type Release struct {
2929}
3030
3131func (r * Release ) IsNewer (b string ) bool {
32- this , err := version .NewVersion (r .TagName )
32+ this , err := k0sversion .NewVersion (r .TagName )
3333 if err != nil {
3434 return false
3535 }
36- other , err := version .NewVersion (b )
36+ other , err := k0sversion .NewVersion (b )
3737 if err != nil {
3838 return false
3939 }
@@ -42,7 +42,7 @@ func (r *Release) IsNewer(b string) bool {
4242
4343// LatestK0sBinaryURL returns the url for the latest k0s release by arch and os
4444func LatestK0sBinaryURL (arch , osKind string , preok bool ) (string , error ) {
45- r , err := LatestRelease ( "k0sproject/k0s" , preok )
45+ r , err := k0sversion . LatestReleaseByPrerelease ( preok )
4646 if err != nil {
4747 return "" , err
4848 }
@@ -66,82 +66,35 @@ func LatestK0sBinaryURL(arch, osKind string, preok bool) (string, error) {
6666
6767// LatestK0sVersion returns the latest k0s version number (without v prefix)
6868func LatestK0sVersion (preok bool ) (string , error ) {
69- r , err := LatestRelease ( "k0sproject/k0s" , preok )
69+ r , err := k0sversion . LatestReleaseByPrerelease ( preok )
7070 if err != nil {
7171 return "" , err
7272 }
7373 return strings .TrimPrefix (r .TagName , "v" ), nil
7474}
7575
76- // versionCollection is a type that implements the sort.Interface interface
77- // so that versions can be sorted.
78- type versionCollection []* version.Version
79-
80- func (v versionCollection ) Len () int {
81- return len (v )
82- }
83-
84- func (v versionCollection ) Less (i , j int ) bool {
85- return vCompare (v [i ], v [j ]) < 0
86- }
87-
88- func (v versionCollection ) Swap (i , j int ) {
89- v [i ], v [j ] = v [j ], v [i ]
90- }
91-
92- // vCompare compares this version to another version. This
93- // returns -1, 0, or 1 if this version is smaller, equal,
94- // or larger than the other version, respectively.
95- func vCompare (a , b * version.Version ) int {
96- c := a .Compare (b )
97- if c != 0 {
98- // versions already differ enough to use the version pkg result
99- return c
100- }
101-
102- vA := a .String ()
103-
104- // go to plain string comparison
105- s := []string {vA , b .String ()}
106- sort .Strings (s )
107-
108- if vA == s [0 ] {
109- return - 1
110- }
111-
112- return 1
113- }
114-
115- // LatestRelease returns the semantically sorted latest version from github releases page for a repo.
116- // Set preok true to allow returning pre-release versions. Assumes the repository has release tags with
117- // semantic version numbers (optionally v-prefixed).
118- func LatestRelease (repo string , preok bool ) (Release , error ) {
119- var gotV bool
76+ // LatestRelease returns the semantically sorted latest k0sctl version from github
77+ func LatestRelease (preok bool ) (Release , error ) {
12078 var releases []Release
121- if err := unmarshalURLBody (fmt . Sprintf ( "https://api.github.com/repos/%s/ releases?per_page=20&page=1" , repo ) , & releases ); err != nil {
79+ if err := unmarshalURLBody ("https://api.github.com/repos/k0sproject/k0sctl/ releases?per_page=20&page=1" , & releases ); err != nil {
12280 return Release {}, err
12381 }
12482
125- var versions [] * version. Version
83+ var versions k0sversion. Collection
12684 for _ , v := range releases {
12785 if v .PreRelease && ! preok {
12886 continue
12987 }
130- if version , err := version .NewVersion (strings .TrimPrefix (v .TagName , "v" )); err == nil {
131- gotV = strings .HasPrefix (v .TagName , "v" )
88+ if version , err := k0sversion .NewVersion (strings .TrimPrefix (v .TagName , "v" )); err == nil {
13289 versions = append (versions , version )
13390 }
13491 }
135- vc := versionCollection (versions )
136- sort .Sort (vc )
92+ sort .Sort (versions )
13793
13894 latest := versions [len (versions )- 1 ].String ()
139- if gotV {
140- latest = "v" + latest
141- }
14295
14396 for _ , v := range releases {
144- if v .TagName == latest {
97+ if strings . TrimPrefix ( v .TagName , "v" ) == latest {
14598 return v , nil
14699 }
147100 }
0 commit comments