Skip to content

Commit 244596b

Browse files
committed
Introduce Masterminds/semver
Add support for Masterminds/semver for .spec.Version This is a bit more entangled into the code than I expected, most instances of bsemver were replaced. Signed-off-by: Todd Short <[email protected]>
1 parent 8bce29c commit 244596b

File tree

9 files changed

+27
-23
lines changed

9 files changed

+27
-23
lines changed

internal/controllers/validators/validators.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package validators
33
import (
44
"fmt"
55

6-
bsemver "github.com/blang/semver/v4"
6+
mmsemver "github.com/Masterminds/semver/v3"
77

88
operatorsv1alpha1 "github.com/operator-framework/operator-controller/api/v1alpha1"
99
)
@@ -18,7 +18,7 @@ func validateSemver(operator *operatorsv1alpha1.Operator) error {
1818
if operator.Spec.Version == "" {
1919
return nil
2020
}
21-
if _, err := bsemver.Parse(operator.Spec.Version); err != nil {
21+
if _, err := mmsemver.NewConstraint(operator.Spec.Version); err != nil {
2222
return fmt.Errorf("invalid .spec.version: %w", err)
2323
}
2424
return nil

internal/resolution/entities/bundle_entity.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"sync"
77

8+
mmsemver "github.com/Masterminds/semver/v3"
89
bsemver "github.com/blang/semver/v4"
910
"github.com/operator-framework/deppy/pkg/deppy/input"
1011
"github.com/operator-framework/operator-registry/alpha/property"
@@ -67,7 +68,7 @@ type BundleEntity struct {
6768
requiredPackages []PackageRequired
6869
channel *property.Channel
6970
channelEntry *ChannelEntry
70-
semVersion *bsemver.Version
71+
semVersion *mmsemver.Version
7172
bundlePath string
7273
mediaType string
7374
mu sync.RWMutex
@@ -87,7 +88,7 @@ func (b *BundleEntity) PackageName() (string, error) {
8788
return b.bundlePackage.PackageName, nil
8889
}
8990

90-
func (b *BundleEntity) Version() (*bsemver.Version, error) {
91+
func (b *BundleEntity) Version() (*mmsemver.Version, error) {
9192
if err := b.loadPackage(); err != nil {
9293
return nil, err
9394
}
@@ -187,11 +188,11 @@ func (b *BundleEntity) loadPackage() error {
187188
}
188189
b.bundlePackage = &bundlePackage
189190
if b.semVersion == nil {
190-
semVer, err := bsemver.Parse(b.bundlePackage.Version)
191+
semVer, err := mmsemver.NewVersion(b.bundlePackage.Version)
191192
if err != nil {
192193
return fmt.Errorf("could not parse semver (%s) for entity '%s': %w", b.bundlePackage.Version, b.ID, err)
193194
}
194-
b.semVersion = &semVer
195+
b.semVersion = semVer
195196
}
196197
}
197198
return nil

internal/resolution/entities/bundle_entity_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"fmt"
55
"testing"
66

7-
bsemver "github.com/blang/semver/v4"
7+
mmsemver "github.com/Masterminds/semver/v3"
88
. "github.com/onsi/ginkgo/v2"
99
. "github.com/onsi/gomega"
1010
"github.com/operator-framework/deppy/pkg/deppy/input"
@@ -55,7 +55,7 @@ var _ = Describe("BundleEntity", func() {
5555
bundleEntity := olmentity.NewBundleEntity(entity)
5656
version, err := bundleEntity.Version()
5757
Expect(err).ToNot(HaveOccurred())
58-
Expect(*version).To(Equal(bsemver.MustParse("0.14.0")))
58+
Expect(version).To(Equal(mmsemver.MustParse("0.14.0")))
5959
})
6060
It("should return an error if the property is not found", func() {
6161
entity := input.NewEntity("operatorhub/prometheus/0.14.0", map[string]string{})
@@ -80,7 +80,7 @@ var _ = Describe("BundleEntity", func() {
8080
bundleEntity := olmentity.NewBundleEntity(entity)
8181
version, err := bundleEntity.Version()
8282
Expect(version).To(BeNil())
83-
Expect(err.Error()).To(Equal("could not parse semver (badversion) for entity 'operatorhub/prometheus/0.14.0': No Major.Minor.Patch elements found"))
83+
Expect(err.Error()).To(Equal("could not parse semver (badversion) for entity 'operatorhub/prometheus/0.14.0': Invalid Semantic Version"))
8484
})
8585
})
8686

internal/resolution/util/predicates/predicates.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package predicates
22

33
import (
4-
bsemver "github.com/blang/semver/v4"
4+
mmsemver "github.com/Masterminds/semver/v3"
55
"github.com/operator-framework/deppy/pkg/deppy/input"
66

77
olmentity "github.com/operator-framework/operator-controller/internal/resolution/entities"
@@ -18,14 +18,14 @@ func WithPackageName(packageName string) input.Predicate {
1818
}
1919
}
2020

21-
func InSemverRange(semverRange bsemver.Range) input.Predicate {
21+
func InSemverRange(semverRange *mmsemver.Constraints) input.Predicate {
2222
return func(entity *input.Entity) bool {
2323
bundleEntity := olmentity.NewBundleEntity(entity)
2424
bundleVersion, err := bundleEntity.Version()
2525
if err != nil {
2626
return false
2727
}
28-
return semverRange(*bundleVersion)
28+
return semverRange.Check(bundleVersion)
2929
}
3030
}
3131

internal/resolution/util/predicates/predicates_test.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package predicates_test
33
import (
44
"testing"
55

6-
bsemver "github.com/blang/semver/v4"
6+
mmsemver "github.com/Masterminds/semver/v3"
77
. "github.com/onsi/ginkgo/v2"
88
. "github.com/onsi/gomega"
99
"github.com/operator-framework/deppy/pkg/deppy/input"
@@ -38,14 +38,17 @@ var _ = Describe("Predicates", func() {
3838
entity := input.NewEntity("test", map[string]string{
3939
property.TypePackage: `{"packageName": "mypackage", "version": "1.0.0"}`,
4040
})
41-
inRange := bsemver.MustParseRange(">=1.0.0")
42-
notInRange := bsemver.MustParseRange(">=2.0.0")
41+
inRange, err := mmsemver.NewConstraint(">=1.0.0")
42+
Expect(err).NotTo(HaveOccurred())
43+
notInRange, err := mmsemver.NewConstraint(">=2.0.0")
44+
Expect(err).NotTo(HaveOccurred())
4345
Expect(predicates.InSemverRange(inRange)(entity)).To(BeTrue())
4446
Expect(predicates.InSemverRange(notInRange)(entity)).To(BeFalse())
4547
})
4648
It("should return false when the entity does not have a version", func() {
4749
entity := input.NewEntity("test", map[string]string{})
48-
inRange := bsemver.MustParseRange(">=1.0.0")
50+
inRange, err := mmsemver.NewConstraint(">=1.0.0")
51+
Expect(err).NotTo(HaveOccurred())
4952
Expect(predicates.InSemverRange(inRange)(entity)).To(BeFalse())
5053
})
5154
})

internal/resolution/util/sort/sort.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,5 +76,5 @@ func versionOrder(e1, e2 *entities.BundleEntity) int {
7676
// from highest to lowest
7777
return -1 * errComp
7878
}
79-
return ver1.Compare(*ver2)
79+
return ver1.Compare(ver2)
8080
}

internal/resolution/variablesources/bundles_and_dependencies.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"fmt"
66
"sort"
77

8-
bsemver "github.com/blang/semver/v4"
8+
mmsemver "github.com/Masterminds/semver/v3"
99
"github.com/operator-framework/deppy/pkg/deppy"
1010
"github.com/operator-framework/deppy/pkg/deppy/input"
1111

@@ -87,7 +87,7 @@ func (b *BundlesAndDepsVariableSource) getEntityDependencies(ctx context.Context
8787
// todo(perdasilva): disambiguate between not found and actual errors
8888
requiredPackages, _ := bundleEntity.RequiredPackages()
8989
for _, requiredPackage := range requiredPackages {
90-
semverRange, err := bsemver.ParseRange(requiredPackage.VersionRange)
90+
semverRange, err := mmsemver.NewConstraint(requiredPackage.VersionRange)
9191
if err != nil {
9292
return nil, err
9393
}

internal/resolution/variablesources/required_package.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"fmt"
66

7-
bsemver "github.com/blang/semver/v4"
7+
mmsemver "github.com/Masterminds/semver/v3"
88
"github.com/operator-framework/deppy/pkg/deppy"
99
"github.com/operator-framework/deppy/pkg/deppy/input"
1010

@@ -21,14 +21,14 @@ type RequiredPackageVariableSourceOption func(*RequiredPackageVariableSource) er
2121
func InVersionRange(versionRange string) RequiredPackageVariableSourceOption {
2222
return func(r *RequiredPackageVariableSource) error {
2323
if versionRange != "" {
24-
vr, err := bsemver.ParseRange(versionRange)
24+
vr, err := mmsemver.NewConstraint(versionRange)
2525
if err == nil {
2626
r.versionRange = versionRange
2727
r.predicates = append(r.predicates, predicates.InSemverRange(vr))
2828
return nil
2929
}
3030

31-
return fmt.Errorf("invalid version range '%s': %v", versionRange, err)
31+
return fmt.Errorf("invalid version range '%s': %w", versionRange, err)
3232
}
3333
return nil
3434
}

internal/resolution/variablesources/required_package_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ var _ = Describe("RequiredPackageVariableSource", func() {
8080
It("should filter by version range", func() {
8181
// recreate source with version range option
8282
var err error
83-
rpvs, err = variablesources.NewRequiredPackageVariableSource(packageName, variablesources.InVersionRange(">=1.0.0 !2.0.0 <3.0.0"))
83+
rpvs, err = variablesources.NewRequiredPackageVariableSource(packageName, variablesources.InVersionRange(">=1.0.0 !=2.0.0 <3.0.0"))
8484
Expect(err).NotTo(HaveOccurred())
8585

8686
variables, err := rpvs.GetVariables(context.TODO(), mockEntitySource)

0 commit comments

Comments
 (0)