use GetReleaseByTag to speed up version searching

pull/16865/head
Judah Nouriyelian 2023-07-12 17:10:52 +00:00
parent f0ba2185c5
commit 7ebd7765e7
4 changed files with 16 additions and 26 deletions

View File

@ -18,9 +18,9 @@ package config
import (
"context"
"sort"
"net/http"
"github.com/google/go-github/github"
"github.com/google/go-github/v53/github"
"golang.org/x/mod/semver"
"k8s.io/minikube/pkg/minikube/constants"
)
@ -39,28 +39,20 @@ func supportedKubernetesVersions() (releases []string) {
return releases
}
// GetGithubKubernetesVersions returns reverse-sort Kubernetes releases
func GetGithubKubernetesVersions(ver string) ([]string, error) {
// IsInGithubKubernetesVersions checks whether ver is in the Github list of k8s versions
func IsInGithubKubernetesVersions(ver string) (bool, error) {
ghc := github.NewClient(nil)
opts := &github.ListOptions{PerPage: 100}
var releases []string
for {
rls, resp, err := ghc.Repositories.ListReleases(context.Background(), "kubernetes", "kubernetes", opts)
if err != nil {
return nil, err
release, resp, err := ghc.Repositories.GetReleaseByTag(context.Background(), "kubernetes", "kubernetes", ver)
if err != nil {
if resp != nil && resp.StatusCode == http.StatusNotFound {
return false, nil
}
for _, rl := range rls {
tag := rl.GetTagName()
if semver.IsValid(tag) {
releases = append(releases, tag)
}
}
if resp.NextPage == 0 {
break
}
opts.Page = resp.NextPage
return false, err
}
sort.Slice(releases, func(i, j int) bool { return semver.Compare(releases[i], releases[j]) == -1 })
return releases, nil
if release.GetTagName() == ver {
return true, nil
}
return false, nil
}

View File

@ -1722,11 +1722,11 @@ func validateKubernetesVersion(old *config.ClusterConfig) {
out.Styled(style.Check, "Kubernetes version {{.specified}} found in version list", out.V{"specified": nvs})
} else {
out.WarningT("Specified Kubernetes version {{.specified}} not found in Kubernetes version list. Searching the internet...", out.V{"specified": nvs})
k8sVersions, err := cmdcfg.GetGithubKubernetesVersions(kubernetesVer)
found, err := cmdcfg.IsInGithubKubernetesVersions(kubernetesVer)
if err != nil && !viper.GetBool(force) {
exit.Error(reason.KubernetesNotConnect, "error fetching Kubernetes version list from Github", err)
}
if k8sVersions != nil && contains(k8sVersions, kubernetesVer) {
if found {
out.Styled(style.Check, "Kubernetes version {{.specified}} found in Github version list", out.V{"specified": nvs})
} else if !viper.GetBool(force) {
out.WarningT("Kubernetes version not found in Github version list. You can force a Kubernetes version via the --force flag")

1
go.mod
View File

@ -86,7 +86,6 @@ require (
github.com/blang/semver v3.5.1+incompatible
github.com/docker/cli v24.0.4+incompatible
github.com/docker/go-connections v0.4.0
github.com/google/go-github v17.0.0+incompatible
github.com/google/go-github/v53 v53.2.0
github.com/juju/clock v1.0.3
github.com/juju/fslock v0.0.0-20160525022230-4d5c94c67b4b

1
go.sum
View File

@ -834,7 +834,6 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0=
github.com/google/go-containerregistry v0.15.2 h1:MMkSh+tjSdnmJZO7ljvEqV1DjfekB6VUEAZgy3a+TQE=
github.com/google/go-containerregistry v0.15.2/go.mod h1:wWK+LnOv4jXMM23IT/F1wdYftGWGr47Is8CG+pmHK1Q=
github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY=
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
github.com/google/go-github/v53 v53.2.0 h1:wvz3FyF53v4BK+AsnvCmeNhf8AkTaeh2SoYu/XUvTtI=
github.com/google/go-github/v53 v53.2.0/go.mod h1:XhFRObz+m/l+UCm9b7KSIC3lT3NWSXGt7mOsAWEloao=