Skip to content

Commit b3bf459

Browse files
committed
chore: use single semver library
1 parent fff1896 commit b3bf459

File tree

11 files changed

+70
-70
lines changed

11 files changed

+70
-70
lines changed

catalogd/internal/version/version.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"runtime"
66
"strings"
77

8-
"github.com/blang/semver/v4"
8+
mmsemver "github.com/Masterminds/semver/v3"
99
genericversion "k8s.io/apimachinery/pkg/version"
1010
)
1111

@@ -27,10 +27,11 @@ func Version() genericversion.Info {
2727
Compiler: runtime.Compiler,
2828
Platform: fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH),
2929
}
30-
v, err := semver.Parse(strings.TrimPrefix(gitVersion, "v"))
30+
31+
v, err := mmsemver.NewVersion(strings.TrimPrefix(gitVersion, "v"))
3132
if err == nil {
32-
info.Major = fmt.Sprintf("%d", v.Major)
33-
info.Minor = fmt.Sprintf("%d", v.Minor)
33+
info.Major = fmt.Sprintf("%d", v.Major())
34+
info.Minor = fmt.Sprintf("%d", v.Minor())
3435
}
3536
return info
3637
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ require (
66
carvel.dev/kapp v0.63.3
77
github.com/BurntSushi/toml v1.4.0
88
github.com/Masterminds/semver/v3 v3.3.1
9-
github.com/blang/semver/v4 v4.0.0
109
github.com/containerd/containerd v1.7.24
1110
github.com/containers/image/v5 v5.32.2
1211
github.com/fsnotify/fsnotify v1.8.0
@@ -55,6 +54,7 @@ require (
5554
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
5655
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
5756
github.com/beorn7/perks v1.0.1 // indirect
57+
github.com/blang/semver/v4 v4.0.0 // indirect
5858
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
5959
github.com/cespare/xxhash/v2 v2.3.0 // indirect
6060
github.com/chai2010/gettext-go v1.0.2 // indirect

internal/bundleutil/bundle.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,33 @@ import (
44
"encoding/json"
55
"fmt"
66

7-
bsemver "github.com/blang/semver/v4"
7+
mmsemver "github.com/Masterminds/semver/v3"
88

99
"github.com/operator-framework/operator-registry/alpha/declcfg"
1010
"github.com/operator-framework/operator-registry/alpha/property"
1111

1212
ocv1 "github.com/operator-framework/operator-controller/api/v1"
1313
)
1414

15-
func GetVersion(b declcfg.Bundle) (*bsemver.Version, error) {
15+
func GetVersion(b declcfg.Bundle) (*mmsemver.Version, error) {
1616
for _, p := range b.Properties {
1717
if p.Type == property.TypePackage {
1818
var pkg property.Package
1919
if err := json.Unmarshal(p.Value, &pkg); err != nil {
2020
return nil, fmt.Errorf("error unmarshalling package property: %w", err)
2121
}
22-
vers, err := bsemver.Parse(pkg.Version)
22+
vers, err := mmsemver.NewVersion(pkg.Version)
2323
if err != nil {
2424
return nil, err
2525
}
26-
return &vers, nil
26+
return vers, nil
2727
}
2828
}
2929
return nil, fmt.Errorf("no package property found in bundle %q", b.Name)
3030
}
3131

3232
// MetadataFor returns a BundleMetadata for the given bundle name and version.
33-
func MetadataFor(bundleName string, bundleVersion bsemver.Version) ocv1.BundleMetadata {
33+
func MetadataFor(bundleName string, bundleVersion *mmsemver.Version) ocv1.BundleMetadata {
3434
return ocv1.BundleMetadata{
3535
Name: bundleName,
3636
Version: bundleVersion.String(),

internal/catalogmetadata/compare/compare.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func ByVersion(b1, b2 declcfg.Bundle) int {
1919

2020
// Check for "greater than" because
2121
// we want higher versions on top
22-
return v2.Compare(*v1)
22+
return v2.Compare(v1)
2323
}
2424

2525
func ByDeprecationFunc(deprecation declcfg.Deprecation) func(a, b declcfg.Bundle) int {

internal/catalogmetadata/filter/successors.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"fmt"
55

66
mmsemver "github.com/Masterminds/semver/v3"
7-
bsemver "github.com/blang/semver/v4"
87

98
"github.com/operator-framework/operator-registry/alpha/declcfg"
109

@@ -45,7 +44,7 @@ func SuccessorsOf(installedBundle ocv1.BundleMetadata, channels ...declcfg.Chann
4544
type successorsPredicateFunc func(installedBundle ocv1.BundleMetadata, channels ...declcfg.Channel) (Predicate[declcfg.Bundle], error)
4645

4746
func legacySuccessor(installedBundle ocv1.BundleMetadata, channels ...declcfg.Channel) (Predicate[declcfg.Bundle], error) {
48-
installedBundleVersion, err := bsemver.Parse(installedBundle.Version)
47+
installedBundleVersion, err := mmsemver.NewVersion(installedBundle.Version)
4948
if err != nil {
5049
return nil, fmt.Errorf("error parsing installed bundle version: %w", err)
5150
}
@@ -60,8 +59,8 @@ func legacySuccessor(installedBundle ocv1.BundleMetadata, channels ...declcfg.Ch
6059
}
6160
}
6261
if candidateBundleEntry.SkipRange != "" {
63-
skipRange, err := bsemver.ParseRange(candidateBundleEntry.SkipRange)
64-
if err == nil && skipRange(installedBundleVersion) {
62+
skipRange, err := mmsemver.NewConstraint(candidateBundleEntry.SkipRange)
63+
if err == nil && skipRange.Check(installedBundleVersion) {
6564
return true
6665
}
6766
}

internal/catalogmetadata/filter/successors_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"slices"
55
"testing"
66

7-
bsemver "github.com/blang/semver/v4"
7+
mmsemver "github.com/Masterminds/semver/v3"
88
"github.com/google/go-cmp/cmp"
99
"github.com/google/go-cmp/cmp/cmpopts"
1010
"github.com/stretchr/testify/assert"
@@ -134,7 +134,7 @@ func TestSuccessorsPredicateWithForceSemverUpgradeConstraintsEnabled(t *testing.
134134
}{
135135
{
136136
name: "with non-zero major version",
137-
installedBundle: bundleutil.MetadataFor("test-package.v2.0.0", bsemver.MustParse("2.0.0")),
137+
installedBundle: bundleutil.MetadataFor("test-package.v2.0.0", mmsemver.MustParse("2.0.0")),
138138
expectedResult: []declcfg.Bundle{
139139
// Updates are allowed within the major version
140140
bundleSet["test-package.v2.2.0"],
@@ -144,15 +144,15 @@ func TestSuccessorsPredicateWithForceSemverUpgradeConstraintsEnabled(t *testing.
144144
},
145145
{
146146
name: "with zero major and zero minor version",
147-
installedBundle: bundleutil.MetadataFor("test-package.v0.0.1", bsemver.MustParse("0.0.1")),
147+
installedBundle: bundleutil.MetadataFor("test-package.v0.0.1", mmsemver.MustParse("0.0.1")),
148148
expectedResult: []declcfg.Bundle{
149149
// No updates are allowed in major version zero when minor version is also zero
150150
bundleSet["test-package.v0.0.1"],
151151
},
152152
},
153153
{
154154
name: "with zero major and non-zero minor version",
155-
installedBundle: bundleutil.MetadataFor("test-package.v0.1.0", bsemver.MustParse("0.1.0")),
155+
installedBundle: bundleutil.MetadataFor("test-package.v0.1.0", mmsemver.MustParse("0.1.0")),
156156
expectedResult: []declcfg.Bundle{
157157
// Patch version updates are allowed within the minor version
158158
bundleSet["test-package.v0.1.2"],
@@ -286,7 +286,7 @@ func TestSuccessorsPredicateWithForceSemverUpgradeConstraintsDisabled(t *testing
286286
}{
287287
{
288288
name: "respect replaces directive from catalog",
289-
installedBundle: bundleutil.MetadataFor("test-package.v2.0.0", bsemver.MustParse("2.0.0")),
289+
installedBundle: bundleutil.MetadataFor("test-package.v2.0.0", mmsemver.MustParse("2.0.0")),
290290
expectedResult: []declcfg.Bundle{
291291
// Must only have two bundle:
292292
// - the one which replaces the current version
@@ -297,7 +297,7 @@ func TestSuccessorsPredicateWithForceSemverUpgradeConstraintsDisabled(t *testing
297297
},
298298
{
299299
name: "respect skips directive from catalog",
300-
installedBundle: bundleutil.MetadataFor("test-package.v2.2.1", bsemver.MustParse("2.2.1")),
300+
installedBundle: bundleutil.MetadataFor("test-package.v2.2.1", mmsemver.MustParse("2.2.1")),
301301
expectedResult: []declcfg.Bundle{
302302
// Must only have two bundle:
303303
// - the one which skips the current version
@@ -308,7 +308,7 @@ func TestSuccessorsPredicateWithForceSemverUpgradeConstraintsDisabled(t *testing
308308
},
309309
{
310310
name: "respect skipRange directive from catalog",
311-
installedBundle: bundleutil.MetadataFor("test-package.v2.3.0", bsemver.MustParse("2.3.0")),
311+
installedBundle: bundleutil.MetadataFor("test-package.v2.3.0", mmsemver.MustParse("2.3.0")),
312312
expectedResult: []declcfg.Bundle{
313313
// Must only have two bundle:
314314
// - the one which is skipRanges the current version

internal/controllers/clusterextension_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ func (r *ClusterExtensionReconciler) reconcile(ctx context.Context, ext *ocv1.Cl
242242
// all catalogs?
243243
SetDeprecationStatus(ext, resolvedBundle.Name, resolvedDeprecation)
244244

245-
resolvedBundleMetadata := bundleutil.MetadataFor(resolvedBundle.Name, *resolvedBundleVersion)
245+
resolvedBundleMetadata := bundleutil.MetadataFor(resolvedBundle.Name, resolvedBundleVersion)
246246
bundleSource := &rukpaksource.BundleSource{
247247
Name: ext.GetName(),
248248
Type: rukpaksource.SourceTypeImage,

internal/controllers/clusterextension_controller_test.go

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import (
77
"testing"
88
"testing/fstest"
99

10-
bsemver "github.com/blang/semver/v4"
10+
mmsemver "github.com/Masterminds/semver/v3"
11+
1112
"github.com/google/go-cmp/cmp"
1213
"github.com/google/go-cmp/cmp/cmpopts"
1314
"github.com/stretchr/testify/assert"
@@ -50,7 +51,7 @@ func TestClusterExtensionDoesNotExist(t *testing.T) {
5051
func TestClusterExtensionResolutionFails(t *testing.T) {
5152
pkgName := fmt.Sprintf("non-existent-%s", rand.String(6))
5253
cl, reconciler := newClientAndReconciler(t)
53-
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) {
54+
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *mmsemver.Version, *declcfg.Deprecation, error) {
5455
return nil, nil, nil, fmt.Errorf("no package %q found", pkgName)
5556
})
5657
ctx := context.Background()
@@ -154,13 +155,13 @@ func TestClusterExtensionResolutionSuccessfulUnpackFails(t *testing.T) {
154155

155156
t.Log("It sets resolution success status")
156157
t.Log("By running reconcile")
157-
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) {
158-
v := bsemver.MustParse("1.0.0")
158+
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *mmsemver.Version, *declcfg.Deprecation, error) {
159+
v := mmsemver.MustParse("1.0.0")
159160
return &declcfg.Bundle{
160161
Name: "prometheus.v1.0.0",
161162
Package: "prometheus",
162163
Image: "quay.io/operatorhubio/[email protected]",
163-
}, &v, nil, nil
164+
}, v, nil, nil
164165
})
165166
res, err := reconciler.Reconcile(ctx, ctrl.Request{NamespacedName: extKey})
166167
require.Equal(t, ctrl.Result{}, res)
@@ -236,13 +237,13 @@ func TestClusterExtensionUnpackUnexpectedState(t *testing.T) {
236237

237238
t.Log("It sets resolution success status")
238239
t.Log("By running reconcile")
239-
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) {
240-
v := bsemver.MustParse("1.0.0")
240+
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *mmsemver.Version, *declcfg.Deprecation, error) {
241+
v := mmsemver.MustParse("1.0.0")
241242
return &declcfg.Bundle{
242243
Name: "prometheus.v1.0.0",
243244
Package: "prometheus",
244245
Image: "quay.io/operatorhubio/[email protected]",
245-
}, &v, nil, nil
246+
}, v, nil, nil
246247
})
247248

248249
require.Panics(t, func() {
@@ -294,13 +295,13 @@ func TestClusterExtensionResolutionAndUnpackSuccessfulApplierFails(t *testing.T)
294295

295296
t.Log("It sets resolution success status")
296297
t.Log("By running reconcile")
297-
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) {
298-
v := bsemver.MustParse("1.0.0")
298+
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *mmsemver.Version, *declcfg.Deprecation, error) {
299+
v := mmsemver.MustParse("1.0.0")
299300
return &declcfg.Bundle{
300301
Name: "prometheus.v1.0.0",
301302
Package: "prometheus",
302303
Image: "quay.io/operatorhubio/[email protected]",
303-
}, &v, nil, nil
304+
}, v, nil, nil
304305
})
305306
reconciler.Applier = &MockApplier{
306307
err: errors.New("apply failure"),
@@ -374,13 +375,13 @@ func TestClusterExtensionApplierFailsWithBundleInstalled(t *testing.T) {
374375

375376
t.Log("It sets resolution success status")
376377
t.Log("By running reconcile")
377-
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) {
378-
v := bsemver.MustParse("1.0.0")
378+
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *mmsemver.Version, *declcfg.Deprecation, error) {
379+
v := mmsemver.MustParse("1.0.0")
379380
return &declcfg.Bundle{
380381
Name: "prometheus.v1.0.0",
381382
Package: "prometheus",
382383
Image: "quay.io/operatorhubio/[email protected]",
383-
}, &v, nil, nil
384+
}, v, nil, nil
384385
})
385386

386387
reconciler.Manager = &MockManagedContentCacheManager{
@@ -473,13 +474,13 @@ func TestClusterExtensionManagerFailed(t *testing.T) {
473474

474475
t.Log("It sets resolution success status")
475476
t.Log("By running reconcile")
476-
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) {
477-
v := bsemver.MustParse("1.0.0")
477+
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *mmsemver.Version, *declcfg.Deprecation, error) {
478+
v := mmsemver.MustParse("1.0.0")
478479
return &declcfg.Bundle{
479480
Name: "prometheus.v1.0.0",
480481
Package: "prometheus",
481482
Image: "quay.io/operatorhubio/[email protected]",
482-
}, &v, nil, nil
483+
}, v, nil, nil
483484
})
484485
reconciler.Applier = &MockApplier{
485486
objs: []client.Object{},
@@ -555,13 +556,13 @@ func TestClusterExtensionManagedContentCacheWatchFail(t *testing.T) {
555556

556557
t.Log("It sets resolution success status")
557558
t.Log("By running reconcile")
558-
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) {
559-
v := bsemver.MustParse("1.0.0")
559+
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *mmsemver.Version, *declcfg.Deprecation, error) {
560+
v := mmsemver.MustParse("1.0.0")
560561
return &declcfg.Bundle{
561562
Name: "prometheus.v1.0.0",
562563
Package: "prometheus",
563564
Image: "quay.io/operatorhubio/[email protected]",
564-
}, &v, nil, nil
565+
}, v, nil, nil
565566
})
566567
reconciler.Applier = &MockApplier{
567568
objs: []client.Object{},
@@ -638,13 +639,13 @@ func TestClusterExtensionInstallationSucceeds(t *testing.T) {
638639

639640
t.Log("It sets resolution success status")
640641
t.Log("By running reconcile")
641-
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) {
642-
v := bsemver.MustParse("1.0.0")
642+
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *mmsemver.Version, *declcfg.Deprecation, error) {
643+
v := mmsemver.MustParse("1.0.0")
643644
return &declcfg.Bundle{
644645
Name: "prometheus.v1.0.0",
645646
Package: "prometheus",
646647
Image: "quay.io/operatorhubio/[email protected]",
647-
}, &v, nil, nil
648+
}, v, nil, nil
648649
})
649650
reconciler.Applier = &MockApplier{
650651
objs: []client.Object{},
@@ -718,13 +719,13 @@ func TestClusterExtensionDeleteFinalizerFails(t *testing.T) {
718719
require.NoError(t, err)
719720
t.Log("It sets resolution success status")
720721
t.Log("By running reconcile")
721-
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) {
722-
v := bsemver.MustParse("1.0.0")
722+
reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1.ClusterExtension, _ *ocv1.BundleMetadata) (*declcfg.Bundle, *mmsemver.Version, *declcfg.Deprecation, error) {
723+
v := mmsemver.MustParse("1.0.0")
723724
return &declcfg.Bundle{
724725
Name: "prometheus.v1.0.0",
725726
Package: "prometheus",
726727
Image: "quay.io/operatorhubio/[email protected]",
727-
}, &v, nil, nil
728+
}, v, nil, nil
728729
})
729730
fakeFinalizer := "fake.testfinalizer.io"
730731
finalizersMessage := "still have finalizers"

internal/resolve/catalog.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"strings"
99

1010
mmsemver "github.com/Masterminds/semver/v3"
11-
bsemver "github.com/blang/semver/v4"
1211
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1312
"k8s.io/apimachinery/pkg/labels"
1413
"k8s.io/apimachinery/pkg/util/sets"
@@ -38,7 +37,7 @@ type foundBundle struct {
3837
}
3938

4039
// Resolve returns a Bundle from a catalog that needs to get installed on the cluster.
41-
func (r *CatalogResolver) Resolve(ctx context.Context, ext *ocv1.ClusterExtension, installedBundle *ocv1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) {
40+
func (r *CatalogResolver) Resolve(ctx context.Context, ext *ocv1.ClusterExtension, installedBundle *ocv1.BundleMetadata) (*declcfg.Bundle, *mmsemver.Version, *declcfg.Deprecation, error) {
4241
packageName := ext.Spec.Source.Catalog.PackageName
4342
versionRange := ext.Spec.Source.Catalog.Version
4443
channels := ext.Spec.Source.Catalog.Channels

0 commit comments

Comments
 (0)