Skip to content

Commit fa468e6

Browse files
committed
convert to prerelease semver field only
Signed-off-by: grokspawn <[email protected]>
1 parent 7069213 commit fa468e6

File tree

6 files changed

+45
-64
lines changed

6 files changed

+45
-64
lines changed

alpha/declcfg/declcfg_to_model.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,7 @@ func ConvertToModel(cfg DeclarativeConfig) (model.Model, error) {
147147
mb.Objects = b.Objects
148148
mb.PropertiesP = props
149149
mb.Version = ver
150-
if props.Packages[0].Release != nil {
151-
mb.Release = *(props.Packages[0].Release)
152-
}
150+
mb.Release = props.Packages[0].Release
153151
}
154152
}
155153
if !found {

alpha/declcfg/helpers_test.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -145,16 +145,6 @@ func withNoBundleData() func(*Bundle) {
145145
}
146146
}
147147

148-
func withReleaseVersion(packageName, version string, rel property.Release) func(*Bundle) {
149-
return func(b *Bundle) {
150-
for i, p := range b.Properties {
151-
if p.Type == property.TypePackage {
152-
b.Properties[i] = property.MustBuildPackageRelease(packageName, version, rel.Label, rel.Version.String())
153-
}
154-
}
155-
}
156-
}
157-
158148
func newTestBundle(packageName, version string, opts ...bundleOpt) Bundle {
159149
csvJSON := fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, testBundleName(packageName, version))
160150
b := Bundle{

alpha/model/model.go

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -332,46 +332,38 @@ type Bundle struct {
332332
// These fields are used to compare bundles in a diff.
333333
PropertiesP *property.Properties
334334
Version semver.Version
335-
Release property.Release
335+
Release semver.PRVersion
336336
}
337337

338338
func (b *Bundle) VersionString() string {
339-
if b.Release.Label != "" || (b.Release.Version.Major != 0 || b.Release.Version.Minor != 0 || b.Release.Version.Patch != 0) {
340-
return strings.Join([]string{b.Version.String(), b.Release.String()}, "-")
341-
} else {
342-
return b.Version.String()
339+
relString := b.Release.String()
340+
if relString != "" {
341+
return strings.Join([]string{b.Version.String(), relString}, "-")
343342
}
343+
return b.Version.String()
344344
}
345345

346346
func (b *Bundle) normalizeName() string {
347347
// if the bundle has release versioning, then the name must include this in standard form:
348-
// <package-name>-v<version>-<release label>-<release version>
348+
// <package-name>-v<version>-<release version>
349349
// if no release versioning exists, then just return the bundle name
350-
if b.Release.Label != "" || (b.Release.Version.Major != 0 || b.Release.Version.Minor != 0 || b.Release.Version.Patch != 0) {
350+
relString := b.Release.String()
351+
if relString != "" {
351352
return strings.Join([]string{b.Package.Name, "v" + b.Version.String(), b.Release.String()}, "-")
352-
} else {
353-
return b.Name
354353
}
354+
return b.Name
355355
}
356356

357357
// order by version, then
358358
// release, if present
359-
// - label first, if present
360-
// - then version, if present
361359
func (b *Bundle) Compare(other *Bundle) int {
362360
if b.Name == other.Name {
363361
return 0
364362
}
365363
if b.Version.NE(other.Version) {
366364
return b.Version.Compare(other.Version)
367365
}
368-
if b.Release.Label != other.Release.Label {
369-
return strings.Compare(b.Release.Label, other.Release.Label)
370-
}
371-
if b.Release.Version.NE(other.Release.Version) {
372-
return b.Release.Version.Compare(other.Release.Version)
373-
}
374-
return 0
366+
return b.Release.Compare(other.Release)
375367
}
376368

377369
func (b *Bundle) Validate() error {

alpha/model/model_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -297,15 +297,15 @@ func TestValidators(t *testing.T) {
297297
Package: pkg,
298298
Name: "light",
299299
Bundles: map[string]*Bundle{
300-
"anakin.v0.0.1": {Name: "anakin.v0.0.1", Version: semver.MustParse("0.0.1")},
301-
"anakin.v0.0.2": {Name: "anakin.v0.0.2", Version: semver.MustParse("0.0.1")},
302-
"anakin-v0.0.1-alpha-0.0.1": {Name: "anakin.v0.0.1", Version: semver.MustParse("0.0.1"), Release: property.Release{Label: "alpha", Version: semver.MustParse("0.0.1")}, Package: pkg},
303-
"anakin-v0.0.2-alpha-0.0.1": {Name: "anakin.v0.0.2", Version: semver.MustParse("0.0.1"), Release: property.Release{Label: "alpha", Version: semver.MustParse("0.0.1")}, Package: pkg},
300+
"anakin.v0.0.1": {Name: "anakin.v0.0.1", Version: semver.MustParse("0.0.1")},
301+
"anakin.v0.0.2": {Name: "anakin.v0.0.2", Version: semver.MustParse("0.0.1")},
302+
"anakin-v0.0.1-hotfix.0.0.1": {Name: "anakin.v0.0.1", Version: semver.MustParse("0.0.1"), Release: property.MustBuildPackageReleaseVersion("100"), Package: pkg},
303+
"anakin-v0.0.2-hotfix.0.0.1": {Name: "anakin.v0.0.2", Version: semver.MustParse("0.0.1"), Release: property.MustBuildPackageReleaseVersion("100"), Package: pkg},
304304
},
305305
},
306306
},
307307
},
308-
assertion: hasError(`duplicate versions found in bundles: [{0.0.1: [anakin.v0.0.1, anakin.v0.0.2]} {0.0.1-alpha-0.0.1: [anakin.v0.0.1, anakin.v0.0.2]}]`),
308+
assertion: hasError(`duplicate versions found in bundles: [{0.0.1: [anakin.v0.0.1, anakin.v0.0.2]} {0.0.1-100: [anakin.v0.0.1, anakin.v0.0.2]}]`),
309309
},
310310
{
311311
name: "Package/Error/BundleReleaseNormalizedName",
@@ -316,12 +316,12 @@ func TestValidators(t *testing.T) {
316316
Package: pkg,
317317
Name: "light",
318318
Bundles: map[string]*Bundle{
319-
"anakin.v0.0.1.alpha.0.0.1": {Name: "anakin.v0.0.1.alpha.0.0.1", Version: semver.MustParse("0.0.1"), Release: property.Release{Label: "alpha", Version: semver.MustParse("0.0.1")}, Package: pkg},
319+
"anakin.v0.0.1.alpha1": {Name: "anakin.v0.0.1.alpha1", Version: semver.MustParse("0.0.1"), Release: property.MustBuildPackageReleaseVersion("alpha1"), Package: pkg},
320320
},
321321
},
322322
},
323323
},
324-
assertion: hasError(`name "anakin.v0.0.1.alpha.0.0.1" does not match normalized name "anakin-v0.0.1-alpha-0.0.1"`),
324+
assertion: hasError(`name "anakin.v0.0.1.alpha1" does not match normalized name "anakin-v0.0.1-alpha1"`),
325325
},
326326
{
327327
name: "Package/Error/NoDefaultChannel",

alpha/property/property.go

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"errors"
77
"fmt"
88
"reflect"
9-
"strings"
109

1110
"github.com/blang/semver/v4"
1211
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -37,15 +36,10 @@ func (p Property) String() string {
3736
return fmt.Sprintf("type: %q, value: %q", p.Type, p.Value)
3837
}
3938

40-
type Release struct {
41-
Label string `json:"label"`
42-
Version semver.Version `json:"version"`
43-
}
44-
4539
type Package struct {
46-
PackageName string `json:"packageName"`
47-
Version string `json:"version"`
48-
Release *Release `json:"release,omitempty"`
40+
PackageName string `json:"packageName"`
41+
Version string `json:"version"`
42+
Release semver.PRVersion `json:"release,omitzero"`
4943
}
5044

5145
// NOTICE: The Channel properties are for internal use only.
@@ -255,8 +249,15 @@ func jsonMarshal(p interface{}) ([]byte, error) {
255249
func MustBuildPackage(name, version string) Property {
256250
return MustBuild(&Package{PackageName: name, Version: version})
257251
}
258-
func MustBuildPackageRelease(name, version, relLabel, relVersion string) Property {
259-
return MustBuild(&Package{PackageName: name, Version: version, Release: &Release{Label: relLabel, Version: semver.MustParse(relVersion)}})
252+
func MustBuildPackageReleaseVersion(relVersion string) semver.PRVersion {
253+
val, err := semver.NewPRVersion(relVersion)
254+
if err != nil {
255+
panic(err)
256+
}
257+
return val
258+
}
259+
func MustBuildPackageRelease(name, version, relVersion string) Property {
260+
return MustBuild(&Package{PackageName: name, Version: version, Release: MustBuildPackageReleaseVersion(relVersion)})
260261
}
261262
func MustBuildPackageRequired(name, versionRange string) Property {
262263
return MustBuild(&PackageRequired{name, versionRange})
@@ -297,14 +298,3 @@ func MustBuildCSVMetadata(csv v1alpha1.ClusterServiceVersion) Property {
297298
func MustBuildChannelPriority(name string, priority int) Property {
298299
return MustBuild(&Channel{ChannelName: name, Priority: priority})
299300
}
300-
301-
func (r *Release) String() string {
302-
segments := []string{}
303-
if r.Label != "" {
304-
segments = append(segments, r.Label)
305-
}
306-
if r.Version.Major != 0 || r.Version.Minor != 0 || r.Version.Patch != 0 {
307-
segments = append(segments, r.Version.String())
308-
}
309-
return strings.Join(segments, "-")
310-
}

alpha/property/property_test.go

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

7-
"github.com/blang/semver/v4"
87
"github.com/stretchr/testify/assert"
98
"github.com/stretchr/testify/require"
109
)
@@ -212,10 +211,22 @@ func TestBuild(t *testing.T) {
212211
expectedProperty: propPtr(MustBuildPackage("name", "0.1.0")),
213212
},
214213
{
215-
name: "Success/Package-ReleaseVersion",
216-
input: &Package{PackageName: "name", Version: "0.1.0", Release: &Release{Label: "alpha-whatsit", Version: semver.MustParse("1.1.0-bluefoot")}},
214+
name: "Success/Package-ReleaseVersionNumber",
215+
input: &Package{PackageName: "name", Version: "0.1.0", Release: MustBuildPackageReleaseVersion("1")},
217216
assertion: require.NoError,
218-
expectedProperty: propPtr(MustBuildPackageRelease("name", "0.1.0", "alpha-whatsit", "1.1.0-bluefoot")),
217+
expectedProperty: propPtr(MustBuildPackageRelease("name", "0.1.0", "1")),
218+
},
219+
{
220+
name: "Success/Package-ReleaseVersionAlpha",
221+
input: &Package{PackageName: "name", Version: "0.1.0", Release: MustBuildPackageReleaseVersion("gamma")},
222+
assertion: require.NoError,
223+
expectedProperty: propPtr(MustBuildPackageRelease("name", "0.1.0", "gamma")),
224+
},
225+
{
226+
name: "Success/Package-ReleaseVersionMixed",
227+
input: &Package{PackageName: "name", Version: "0.1.0", Release: MustBuildPackageReleaseVersion("gamma1")},
228+
assertion: require.NoError,
229+
expectedProperty: propPtr(MustBuildPackageRelease("name", "0.1.0", "gamma1")),
219230
},
220231
{
221232
name: "Success/PackageRequired",

0 commit comments

Comments
 (0)