From 9bfc78e769c0ac670e3aa57ee016ceae2e8ddb17 Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Wed, 11 Feb 2026 10:29:26 +0800 Subject: [PATCH] Update the migration and upgrade test cases. Modify Dockerfile to fix GitHub CI action error. Signed-off-by: Xun Jiang --- hack/build-image/Dockerfile | 8 ++-- test/Makefile | 4 +- test/util/velero/velero_utils.go | 39 ++++++++++++++++--- test/util/velero/velero_utils_test.go | 54 +++++++++++++++++++++++++++ 4 files changed, 94 insertions(+), 11 deletions(-) create mode 100644 test/util/velero/velero_utils_test.go diff --git a/hack/build-image/Dockerfile b/hack/build-image/Dockerfile index 42caf9558..5524ffb14 100644 --- a/hack/build-image/Dockerfile +++ b/hack/build-image/Dockerfile @@ -21,9 +21,11 @@ ENV GO111MODULE=on ENV GOPROXY=${GOPROXY} # kubebuilder test bundle is separated from kubebuilder. Need to setup it for CI test. -RUN curl -sSLo envtest-bins.tar.gz https://go.kubebuilder.io/test-tools/1.22.1/linux/$(go env GOARCH) && \ - mkdir /usr/local/kubebuilder && \ - tar -C /usr/local/kubebuilder --strip-components=1 -zvxf envtest-bins.tar.gz +# Using setup-envtest to download envtest binaries +RUN go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest && \ + mkdir -p /usr/local/kubebuilder/bin && \ + ENVTEST_ASSETS_DIR=$(setup-envtest use 1.33.0 --bin-dir /usr/local/kubebuilder/bin -p path) && \ + cp -r ${ENVTEST_ASSETS_DIR}/* /usr/local/kubebuilder/bin/ RUN wget --quiet https://github.com/kubernetes-sigs/kubebuilder/releases/download/v3.2.0/kubebuilder_linux_$(go env GOARCH) && \ mv kubebuilder_linux_$(go env GOARCH) /usr/local/kubebuilder/bin/kubebuilder && \ diff --git a/test/Makefile b/test/Makefile index 7c99e4d70..0e04239d1 100644 --- a/test/Makefile +++ b/test/Makefile @@ -76,7 +76,7 @@ HAS_VSPHERE_PLUGIN ?= false RESTORE_HELPER_IMAGE ?= #Released version only -UPGRADE_FROM_VELERO_VERSION ?= v1.15.2,v1.16.2 +UPGRADE_FROM_VELERO_VERSION ?= v1.16.2,v1.17.2 # UPGRADE_FROM_VELERO_CLI can has the same format(a list divided by comma) with UPGRADE_FROM_VELERO_VERSION # Upgrade tests will be executed sequently according to the list by UPGRADE_FROM_VELERO_VERSION @@ -85,7 +85,7 @@ UPGRADE_FROM_VELERO_VERSION ?= v1.15.2,v1.16.2 # to the end, nil string will be set if UPGRADE_FROM_VELERO_CLI is shorter than UPGRADE_FROM_VELERO_VERSION UPGRADE_FROM_VELERO_CLI ?= -MIGRATE_FROM_VELERO_VERSION ?= v1.16.2,$(VERSION) +MIGRATE_FROM_VELERO_VERSION ?= v1.17.2,$(VERSION) MIGRATE_FROM_VELERO_CLI ?= VELERO_NAMESPACE ?= velero diff --git a/test/util/velero/velero_utils.go b/test/util/velero/velero_utils.go index 96925b0d8..5c9b39a84 100644 --- a/test/util/velero/velero_utils.go +++ b/test/util/velero/velero_utils.go @@ -99,6 +99,15 @@ var ImagesMatrix = map[string]map[string][]string{ "velero": {"velero/velero:v1.16.2"}, "velero-restore-helper": {"velero/velero:v1.16.2"}, }, + "v1.17": { + "aws": {"velero/velero-plugin-for-aws:v1.13.2"}, + "azure": {"velero/velero-plugin-for-microsoft-azure:v1.13.2"}, + "vsphere": {"vsphereveleroplugin/velero-plugin-for-vsphere:v1.5.2"}, + "gcp": {"velero/velero-plugin-for-gcp:v1.13.2"}, + "datamover": {"velero/velero-plugin-for-aws:v1.13.2"}, + "velero": {"velero/velero:v1.17.2"}, + "velero-restore-helper": {"velero/velero:v1.17.2"}, + }, "main": { "aws": {"velero/velero-plugin-for-aws:main"}, "azure": {"velero/velero-plugin-for-microsoft-azure:main"}, @@ -128,16 +137,13 @@ func SetImagesToDefaultValues(config VeleroConfig, version string) (VeleroConfig ret.Plugins = "" - versionWithoutPatch := "main" - if version != "main" { - versionWithoutPatch = semver.MajorMinor(version) - } + versionWithoutPatch := getVersionWithoutPatch(version) // Read migration case needs images from the PluginsMatrix map. images, ok := ImagesMatrix[versionWithoutPatch] if !ok { - return config, fmt.Errorf("fail to read the images for version %s from the ImagesMatrix", - versionWithoutPatch) + fmt.Printf("Cannot read the images for version %s from the ImagesMatrix. Use the original values.\n", versionWithoutPatch) + return config, nil } ret.VeleroImage = images[Velero][0] @@ -164,6 +170,27 @@ func SetImagesToDefaultValues(config VeleroConfig, version string) (VeleroConfig return ret, nil } +func getVersionWithoutPatch(version string) string { + versionWithoutPatch := "" + + mainRe := regexp.MustCompile(`^main$`) + releaseRe := regexp.MustCompile(`^release-(\d+)\.(\d+)(-dev)?$`) + + switch { + case mainRe.MatchString(version): + versionWithoutPatch = "main" + case releaseRe.MatchString(version): + matches := releaseRe.FindStringSubmatch(version) + versionWithoutPatch = fmt.Sprintf("v%s.%s", matches[1], matches[2]) + default: + versionWithoutPatch = semver.MajorMinor(version) + } + + fmt.Println("The version is ", versionWithoutPatch) + + return versionWithoutPatch +} + func getPluginsByVersion(version string, cloudProvider string, needDataMoverPlugin bool) ([]string, error) { var cloudMap map[string][]string arr := strings.Split(version, ".") diff --git a/test/util/velero/velero_utils_test.go b/test/util/velero/velero_utils_test.go new file mode 100644 index 000000000..73df31b6e --- /dev/null +++ b/test/util/velero/velero_utils_test.go @@ -0,0 +1,54 @@ +/* +Copyright the Velero contributors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package velero + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func Test_getVersionWithoutPatch(t *testing.T) { + versionTests := []struct { + caseName string + version string + result string + }{ + { + caseName: "main version", + version: "main", + result: "main", + }, + { + caseName: "release version", + version: "release-1.18-dev", + result: "v1.18", + }, + { + caseName: "tag version", + version: "v1.17.2", + result: "v1.17", + }, + } + + for _, test := range versionTests { + t.Run(test.caseName, func(t *testing.T) { + res := getVersionWithoutPatch(test.version) + require.Equal(t, test.result, res) + }) + } +}