From dabaf03e73938ac0d5b7f174b19e4cb55402a0d5 Mon Sep 17 00:00:00 2001 From: qiaozp <47812250+chivalryq@users.noreply.github.com> Date: Tue, 4 Jul 2023 12:15:30 +0800 Subject: [PATCH] Chore: swtich between old and new registry in vela install (#6173) * Chore: swtich between old and new registry in vela install Signed-off-by: Qiaozp * add comments Signed-off-by: Qiaozp * minor fix Signed-off-by: Qiaozp --------- Signed-off-by: Qiaozp --- references/cli/cli.go | 2 +- references/cli/install.go | 28 ++++++++++++++++++---------- references/cli/install_test.go | 27 +++++++++++++++++++++++++-- version/version.go | 19 +++++++++++++++++++ version/version_test.go | 31 +++++++++++++++++++++++++++++++ 5 files changed, 94 insertions(+), 13 deletions(-) diff --git a/references/cli/cli.go b/references/cli/cli.go index 2082ce2df..e538edc70 100644 --- a/references/cli/cli.go +++ b/references/cli/cli.go @@ -190,7 +190,7 @@ func NewVersionListCommand(ioStream util.IOStreams) *cobra.Command { Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { helmHelper := helm.NewHelper() - versions, err := helmHelper.ListVersions(kubevelaInstallerHelmRepoURL, kubeVelaChartName, true, nil) + versions, err := helmHelper.ListVersions(LegacyKubeVelaInstallerHelmRepoURL, kubeVelaChartName, true, nil) if err != nil { return err } diff --git a/references/cli/install.go b/references/cli/install.go index b2ccdded9..8a32bff1c 100644 --- a/references/cli/install.go +++ b/references/cli/install.go @@ -46,11 +46,14 @@ import ( innerVersion "github.com/oam-dev/kubevela/version" ) -// defaultConstraint -// const defaultConstraint = ">= 1.19, <= 1.24" const defaultConstraint = ">= 1.19" -const kubevelaInstallerHelmRepoURL = "https://kubevela.github.io/charts/" +const ( + // LegacyKubeVelaInstallerHelmRepoURL is used for kubevela version < v1.9.0 + LegacyKubeVelaInstallerHelmRepoURL = "https://charts.kubevela.net/core/" + // KubeVelaInstallerHelmRepoURL is used for kubevela version >= v1.9.0 + KubeVelaInstallerHelmRepoURL = "https://kubevela.github.io/charts/" +) // kubeVelaReleaseName release name const kubeVelaReleaseName = "kubevela" @@ -106,10 +109,14 @@ func NewInstallCommand(c common.Args, order string, ioStreams util.IOStreams) *c return nil }, RunE: func(cmd *cobra.Command, args []string) error { + v, err := version.NewVersion(installArgs.Version) + if err != nil { + return err + } // Step1: Download Helm Chart ioStreams.Info("Installing KubeVela Core ...") if installArgs.ChartFilePath == "" { - installArgs.ChartFilePath = getKubeVelaHelmChartRepoURL(installArgs.Version) + installArgs.ChartFilePath = getKubeVelaHelmChartRepoURL(v) } chart, err := installArgs.helmHelper.LoadCharts(installArgs.ChartFilePath, nil) if err != nil { @@ -282,13 +289,14 @@ func getConstraintVersion(constraint string) string { return constraint } -func getKubeVelaHelmChartRepoURL(version string) string { - // Determine installer version - if innerVersion.IsOfficialKubeVelaVersion(version) { - version, _ := innerVersion.GetOfficialKubeVelaVersion(version) - return kubevelaInstallerHelmRepoURL + kubeVelaChartName + "-" + version + ".tgz" +func getKubeVelaHelmChartRepoURL(ver *version.Version) string { + // Determine use legacy repo or new one. + useLegacy := innerVersion.ShouldUseLegacyHelmRepo(ver) + helmRepo := KubeVelaInstallerHelmRepoURL + if useLegacy { + helmRepo = LegacyKubeVelaInstallerHelmRepoURL } - return kubevelaInstallerHelmRepoURL + kubeVelaChartName + "-" + version + ".tgz" + return helmRepo + kubeVelaChartName + "-" + ver.String() + ".tgz" } func waitKubeVelaControllerRunning(kubeClient client.Client, namespace, manifest string) error { diff --git a/references/cli/install_test.go b/references/cli/install_test.go index dec279038..0c745a633 100644 --- a/references/cli/install_test.go +++ b/references/cli/install_test.go @@ -19,14 +19,37 @@ package cli import ( "testing" + "github.com/hashicorp/go-version" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "github.com/stretchr/testify/assert" ) func TestGetKubeVelaHelmChartRepoURL(t *testing.T) { - assert.Equal(t, getKubeVelaHelmChartRepoURL("v1.2.2"), "https://kubevela.github.io/charts/vela-core-1.2.2.tgz") - assert.Equal(t, getKubeVelaHelmChartRepoURL("1.1.11"), "https://kubevela.github.io/charts/vela-core-1.1.11.tgz") + cases := []struct { + ver string + url string + }{ + { + ver: "v1.2.2", + url: "https://charts.kubevela.net/core/vela-core-1.2.2.tgz", + }, + { + ver: "1.1.11", + url: "https://charts.kubevela.net/core/vela-core-1.1.11.tgz", + }, + { + ver: "1.9.2", + // new helm repo + url: "https://kubevela.github.io/charts/vela-core-1.9.2.tgz", + }, + } + + for _, c := range cases { + v, err := version.NewVersion(c.ver) + assert.Nil(t, err) + assert.Equal(t, getKubeVelaHelmChartRepoURL(v), c.url) + } } var _ = Describe("Test Install Command", func() { diff --git a/version/version.go b/version/version.go index 264f128c7..b1ad53368 100644 --- a/version/version.go +++ b/version/version.go @@ -44,3 +44,22 @@ func GetOfficialKubeVelaVersion(versionStr string) (string, error) { } return v[:len(v)-len(metadata)], nil } + +// ShouldUseLegacyHelmRepo checks whether the provided version should use the legacy helm repo +func ShouldUseLegacyHelmRepo(ver *version.Version) bool { + if ver.LessThan(version.Must(version.NewVersion("1.8.2"))) { + return true + } + + if ver.GreaterThanOrEqual(version.Must(version.NewVersion("1.9.0"))) { + return false + } + + // After v1.9.0-beta.1.post1, we use the new helm repo + switch ver.Prerelease() { + case "beta.1.post1", "beta.2", "beta.3": + return false + default: + return true + } +} diff --git a/version/version_test.go b/version/version_test.go index 10d5b2374..2aeb053e9 100644 --- a/version/version_test.go +++ b/version/version_test.go @@ -19,6 +19,7 @@ package version import ( "testing" + "github.com/hashicorp/go-version" "github.com/stretchr/testify/assert" ) @@ -41,3 +42,33 @@ func TestGetVersion(t *testing.T) { assert.Nil(t, err) assert.Equal(t, "1.2.0", version) } + +func TestShouldUseLegacyHelmRepo(t *testing.T) { + tests := []struct { + ver string + want bool + }{ + { + ver: "v1.2.0", + want: true, + }, + { + ver: "v1.9.0-beta.1", + want: true, + }, + { + ver: "v1.9.0-beta.1.post1", + want: false, + }, + { + ver: "v1.9.1", + want: false, + }, + } + for _, tt := range tests { + t.Run(tt.ver, func(t *testing.T) { + ver := version.Must(version.NewVersion(tt.ver)) + assert.Equalf(t, tt.want, ShouldUseLegacyHelmRepo(ver), "ShouldUseLegacyHelmRepo(%v)", tt.ver) + }) + } +}