Skip to content

Commit 8f1a30c

Browse files
authored
Merge pull request #1537 from KubeKyrie/fix-manifest-version-range
fix version range format
2 parents 7c9bf50 + 12baae8 commit 8f1a30c

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed

pkg/controllers/offlineversion/controller.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
localartifactsetClientSet "github.com/kubean-io/kubean-api/generated/localartifactset/clientset/versioned"
1515
manifestClientSet "github.com/kubean-io/kubean-api/generated/manifest/clientset/versioned"
1616
"github.com/kubean-io/kubean/pkg/controllers/infomanifest"
17+
"github.com/kubean-io/kubean/pkg/util"
1718

1819
apierrors "k8s.io/apimachinery/pkg/api/errors"
1920
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -56,6 +57,9 @@ func (c *Controller) MergeManifestsStatus(localartifactset *localartifactsetv1al
5657
if !updated {
5758
continue
5859
}
60+
for _, component := range manifest.Status.LocalAvailable.Components {
61+
component.VersionRange = util.UnifyVersions(component.VersionRange)
62+
}
5963
klog.Infof("Update manifest status for %s since %s", manifest.Name, localartifactset.Name)
6064
if _, err := c.InfoManifestClientSet.KubeanV1alpha1().Manifests().UpdateStatus(context.Background(), manifest, metav1.UpdateOptions{}); err != nil {
6165
return nil, fmt.Errorf("failed to merge status for manifest %s, %v", manifest.Name, err)

pkg/util/version.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package util
2+
3+
import "strings"
4+
5+
func UnifyVersions(versions []string) []string {
6+
seen := make(map[string]struct{})
7+
result := make([]string, 0)
8+
9+
for _, v := range versions {
10+
cleaned := strings.TrimPrefix(v, "v")
11+
if _, exists := seen[cleaned]; !exists {
12+
seen[cleaned] = struct{}{}
13+
result = append(result, cleaned)
14+
}
15+
}
16+
17+
return result
18+
}

pkg/util/version_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// Copyright 2023 Authors of kubean-io
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package util
5+
6+
import (
7+
"reflect"
8+
"testing"
9+
)
10+
11+
func TestUnifyVersions(t *testing.T) {
12+
type args struct {
13+
versions []string
14+
}
15+
tests := []struct {
16+
name string
17+
args args
18+
want []string
19+
}{
20+
{
21+
name: "normal with v prefix",
22+
args: args{
23+
versions: []string{"v1.0.0", "v1.0.1", "v2.0.0"},
24+
},
25+
want: []string{"1.0.0", "1.0.1", "2.0.0"},
26+
},
27+
{
28+
name: "mixed v and no prefix",
29+
args: args{
30+
versions: []string{"v1.0.0", "1.0.0", "v2.0.0"},
31+
},
32+
want: []string{"1.0.0", "2.0.0"},
33+
},
34+
{
35+
name: "no v prefix",
36+
args: args{
37+
versions: []string{"1.0.0", "2.0.0"},
38+
},
39+
want: []string{"1.0.0", "2.0.0"},
40+
},
41+
{
42+
name: "duplicates only",
43+
args: args{
44+
versions: []string{"v1.0.0", "v1.0.0", "1.0.0"},
45+
},
46+
want: []string{"1.0.0"},
47+
},
48+
{
49+
name: "empty input",
50+
args: args{
51+
versions: []string{},
52+
},
53+
want: []string{},
54+
},
55+
}
56+
for _, tt := range tests {
57+
t.Run(tt.name, func(t *testing.T) {
58+
got := UnifyVersions(tt.args.versions)
59+
if !reflect.DeepEqual(got, tt.want) {
60+
t.Errorf("UnifyVersions() = %v, want %v", got, tt.want)
61+
}
62+
})
63+
}
64+
}

0 commit comments

Comments
 (0)