Skip to content

Commit

Permalink
Remove golang.org/x/mod/semver dependency
Browse files Browse the repository at this point in the history
ListVersions() uses golang.org/x/mod/semver only for sorting. Use the
sort function from github.com/blang/semver/v4 instead. No need to depend
on multiple semver libraries.

Signed-off-by: Michi Mutsuzaki <[email protected]>
  • Loading branch information
michi-covalent committed Feb 28, 2024
1 parent 6b51a4a commit 0ac6a33
Show file tree
Hide file tree
Showing 7 changed files with 23 additions and 470 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ require (
github.com/spf13/cobra v1.8.0
github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace
golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb
golang.org/x/mod v0.15.0
google.golang.org/grpc v1.62.0
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
helm.sh/helm/v3 v3.14.2
Expand Down Expand Up @@ -76,6 +75,7 @@ require (
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.26.0 // indirect
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
golang.org/x/mod v0.15.0 // indirect
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
Expand Down
7 changes: 4 additions & 3 deletions install/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,11 @@ func (k *K8sInstaller) listVersions() error {
}
// Iterate backwards to print the newest version first.
for i := len(versions) - 1; i >= 0; i-- {
if versions[i] == defaults.Version {
fmt.Println(versions[i], "(default)")
version := "v" + versions[i].String()
if version == defaults.Version {
fmt.Println(version, "(default)")
} else {
fmt.Println(versions[i])
fmt.Println(version)
}
}
return err
Expand Down
33 changes: 18 additions & 15 deletions internal/helm/helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,9 @@ import (
"github.com/cilium/cilium-cli/defaults"
"github.com/cilium/cilium-cli/internal/utils"

semver2 "github.com/blang/semver/v4"
"github.com/blang/semver/v4"
helm "github.com/cilium/charts"
"github.com/cilium/cilium/pkg/versioncheck"
"golang.org/x/mod/semver"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/chart"
"helm.sh/helm/v3/pkg/chart/loader"
Expand Down Expand Up @@ -58,7 +57,7 @@ func mergeMaps(a, b map[string]interface{}) map[string]interface{} {
return out
}

func newChartFromEmbeddedFile(ciliumVersion semver2.Version) (*chart.Chart, error) {
func newChartFromEmbeddedFile(ciliumVersion semver.Version) (*chart.Chart, error) {
helmTgz, err := helm.HelmFS.ReadFile(fmt.Sprintf("cilium-%s.tgz", ciliumVersion))
if err != nil {
return nil, fmt.Errorf("cilium version not found: %w", err)
Expand All @@ -74,7 +73,7 @@ func newChartFromDirectory(directory string) (*chart.Chart, error) {

// newChartFromRemoteWithCache fetches the chart from remote repository, the chart file
// is then stored in the local cache directory for future usage.
func newChartFromRemoteWithCache(ciliumVersion semver2.Version, repository string) (*chart.Chart, error) {
func newChartFromRemoteWithCache(ciliumVersion semver.Version, repository string) (*chart.Chart, error) {
cacheDir, err := ciliumCacheDir()
if err != nil {
return nil, err
Expand Down Expand Up @@ -200,9 +199,9 @@ func ParseVals(helmStrValues []string) (map[string]interface{}, error) {
return helmValues, nil
}

// ListVersions returns a list of available Helm chart versions (with "v" prefix) sorted by semver in ascending order.
func ListVersions() ([]string, error) {
var versions []string
// ListVersions returns a list of available Helm chart versions sorted by semver in ascending order.
func ListVersions() ([]semver.Version, error) {
var versions []semver.Version
re := regexp.MustCompile(`^cilium-(.+)\.tgz$`)
entries, err := helm.HelmFS.ReadDir(".")
if err != nil {
Expand All @@ -211,16 +210,20 @@ func ListVersions() ([]string, error) {
for _, entry := range entries {
match := re.FindStringSubmatch(entry.Name())
if len(match) == 2 {
// semver.Sort expects a leading "v" in version strings.
versions = append(versions, "v"+match[1])
version, err := semver.Parse(match[1])
if err != nil {
// Ignore old charts that don't follow semver (v1.{6,7,8,9}-dev).
continue
}
versions = append(versions, version)
}
}
semver.Sort(versions)
return versions, nil
}

// ResolveHelmChartVersion resolves Helm chart version based on --version, --chart-directory, and --repository flags.
func ResolveHelmChartVersion(versionFlag, chartDirectoryFlag, repository string) (semver2.Version, *chart.Chart, error) {
func ResolveHelmChartVersion(versionFlag, chartDirectoryFlag, repository string) (semver.Version, *chart.Chart, error) {
// If repository is empty, set it to the default Helm repository ("https://helm.cilium.io") for backward compatibility.
if repository == "" {
repository = defaults.HelmRepository
Expand All @@ -233,15 +236,15 @@ func ResolveHelmChartVersion(versionFlag, chartDirectoryFlag, repository string)
// Get the chart version from the local Helm chart specified with --chart-directory flag.
localChart, err := newChartFromDirectory(chartDirectoryFlag)
if err != nil {
return semver2.Version{}, nil, fmt.Errorf("failed to load Helm chart directory %s: %s", chartDirectoryFlag, err)
return semver.Version{}, nil, fmt.Errorf("failed to load Helm chart directory %s: %s", chartDirectoryFlag, err)
}
return versioncheck.MustVersion(localChart.Metadata.Version), localChart, nil
}

func resolveChartVersion(versionFlag string, repository string) (semver2.Version, *chart.Chart, error) {
func resolveChartVersion(versionFlag string, repository string) (semver.Version, *chart.Chart, error) {
version, err := utils.ParseCiliumVersion(versionFlag)
if err != nil {
return semver2.Version{}, nil, err
return semver.Version{}, nil, err
}

// If the repository is the default repository ("https://helm.cilium.io"), check embedded charts first.
Expand All @@ -252,13 +255,13 @@ func resolveChartVersion(versionFlag string, repository string) (semver2.Version
}

if !errors.Is(err, fs.ErrNotExist) {
return semver2.Version{}, nil, err
return semver.Version{}, nil, err
}
}

helmChart, err := newChartFromRemoteWithCache(version, repository)
if err != nil {
return semver2.Version{}, nil, err
return semver.Version{}, nil, err
}
return version, helmChart, nil
}
Expand Down
27 changes: 0 additions & 27 deletions vendor/golang.org/x/mod/LICENSE

This file was deleted.

22 changes: 0 additions & 22 deletions vendor/golang.org/x/mod/PATENTS

This file was deleted.

Loading

0 comments on commit 0ac6a33

Please sign in to comment.