Skip to content

Commit d78859a

Browse files
committed
Set AllowPrerelease on deps v1 extension
When we are converting a porter.yaml to a bundle.json and populating the v1 dependencies extension metadata, we accidentally stopped populating AllowPrerelease (which was in use previously). Before we updated the dependency schema in preparation for a v2 of the dependency extension this value was set explicitly in the porter.yaml. When we removed it, we decided to use the mastermind/semver convention of "if a version constraint includes a prerelease, then we will match against releases", i.e. 1.0.0-0 would allow prereleases, but we missed updating the conversion logic to explicitly set AllowPrerelease in that situation. I've updated our testdata to work with the new logic and verified that we are now properly setting AllowPrerelease again. Signed-off-by: Carolyn Van Slyck <me@carolynvanslyck.com>
1 parent 5baac51 commit d78859a

File tree

3 files changed

+30
-20
lines changed

3 files changed

+30
-20
lines changed

pkg/cnab/config-adapter/adapter.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"get.porter.sh/porter/pkg/manifest"
1212
"get.porter.sh/porter/pkg/mixin"
1313
"get.porter.sh/porter/pkg/tracing"
14+
"github.com/Masterminds/semver/v3"
1415
"github.com/cnabio/cnab-go/bundle"
1516
"github.com/cnabio/cnab-go/bundle/definition"
1617
)
@@ -71,7 +72,11 @@ func (c *ManifestConverter) ToBundle(ctx context.Context) (cnab.ExtendedBundle,
7172
b.Outputs = c.generateBundleOutputs(ctx, &b.Definitions)
7273
b.Credentials = c.generateBundleCredentials()
7374
b.Images = c.generateBundleImages()
74-
b.Custom = c.generateCustomExtensions(&b)
75+
custom, err := c.generateCustomExtensions(&b)
76+
if err != nil {
77+
return cnab.ExtendedBundle{}, err
78+
}
79+
b.Custom = custom
7580
b.RequiredExtensions = c.generateRequiredExtensions(b)
7681

7782
b.Custom[config.CustomPorterKey] = stamp
@@ -401,10 +406,9 @@ func (c *ManifestConverter) generateBundleImages() map[string]bundle.Image {
401406
return images
402407
}
403408

404-
func (c *ManifestConverter) generateDependencies() *cnab.Dependencies {
405-
409+
func (c *ManifestConverter) generateDependencies() (*cnab.Dependencies, error) {
406410
if len(c.Manifest.Dependencies.RequiredDependencies) == 0 {
407-
return nil
411+
return nil, nil
408412
}
409413

410414
deps := &cnab.Dependencies{
@@ -421,12 +425,18 @@ func (c *ManifestConverter) generateDependencies() *cnab.Dependencies {
421425
dependencyRef.Version = &cnab.DependencyVersion{
422426
Ranges: []string{dep.Bundle.Version},
423427
}
428+
429+
// If we can detect that prereleases are used in the version, then set AllowPrereleases to true
430+
v, err := semver.NewVersion(dep.Bundle.Version)
431+
if err == nil {
432+
dependencyRef.Version.AllowPrereleases = v.Prerelease() != ""
433+
}
424434
}
425435
deps.Sequence = append(deps.Sequence, dep.Name)
426436
deps.Requires[dep.Name] = dependencyRef
427437
}
428438

429-
return deps
439+
return deps, nil
430440
}
431441

432442
func (c *ManifestConverter) generateParameterSources(b *cnab.ExtendedBundle) cnab.ParameterSources {
@@ -576,7 +586,7 @@ func toFloat(v float64) *float64 {
576586
return &v
577587
}
578588

579-
func (c *ManifestConverter) generateCustomExtensions(b *cnab.ExtendedBundle) map[string]interface{} {
589+
func (c *ManifestConverter) generateCustomExtensions(b *cnab.ExtendedBundle) (map[string]interface{}, error) {
580590
customExtensions := map[string]interface{}{
581591
cnab.FileParameterExtensionKey: struct{}{},
582592
}
@@ -587,7 +597,10 @@ func (c *ManifestConverter) generateCustomExtensions(b *cnab.ExtendedBundle) map
587597
}
588598

589599
// Add the dependency extension
590-
deps := c.generateDependencies()
600+
deps, err := c.generateDependencies()
601+
if err != nil {
602+
return nil, err
603+
}
591604
if deps != nil && len(deps.Requires) > 0 {
592605
customExtensions[cnab.DependenciesExtensionKey] = deps
593606
}
@@ -603,7 +616,7 @@ func (c *ManifestConverter) generateCustomExtensions(b *cnab.ExtendedBundle) map
603616
customExtensions[lookupExtensionKey(ext.Name)] = ext.Config
604617
}
605618

606-
return customExtensions
619+
return customExtensions, nil
607620
}
608621

609622
func (c *ManifestConverter) generateRequiredExtensions(b cnab.ExtendedBundle) []string {

pkg/cnab/config-adapter/adapter_test.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -544,11 +544,12 @@ func TestManifestConverter_generateDependencies(t *testing.T) {
544544
Name: "mysql",
545545
Bundle: "getporter/azure-mysql:5.7",
546546
}},
547-
{"no-ranges", cnab.Dependency{
547+
{"no-ranges, uses prerelease", cnab.Dependency{
548548
Name: "ad",
549549
Bundle: "getporter/azure-active-directory",
550550
Version: &cnab.DependencyVersion{
551551
AllowPrereleases: true,
552+
Ranges: []string{"1.0.0-0"},
552553
},
553554
}},
554555
{"with-ranges", cnab.Dependency{
@@ -561,16 +562,13 @@ func TestManifestConverter_generateDependencies(t *testing.T) {
561562
},
562563
},
563564
}},
564-
{"with-tag", cnab.Dependency{
565-
Name: "dep-with-tag",
566-
Bundle: "getporter/dep-bun:v0.1.0",
567-
}},
568565
}
569566

570567
for _, tc := range testcases {
568+
tc := tc
569+
571570
t.Run(tc.name, func(t *testing.T) {
572571
t.Parallel()
573-
tc := tc
574572

575573
c := config.NewTestConfig(t)
576574
c.TestContext.AddTestFile("testdata/porter-with-deps.yaml", config.Name)
@@ -581,9 +579,10 @@ func TestManifestConverter_generateDependencies(t *testing.T) {
581579

582580
a := NewManifestConverter(c.Config, m, nil, nil)
583581

584-
deps := a.generateDependencies()
585-
require.Len(t, deps.Requires, 4, "incorrect number of dependencies were generated")
586-
require.Equal(t, []string{"mysql", "ad", "storage", "dep-with-tag"}, deps.Sequence, "incorrect sequence was generated")
582+
deps, err := a.generateDependencies()
583+
require.NoError(t, err, "generateDependencies failed")
584+
require.Len(t, deps.Requires, 3, "incorrect number of dependencies were generated")
585+
require.Equal(t, []string{"mysql", "ad", "storage"}, deps.Sequence, "incorrect sequence was generated")
587586

588587
var dep *cnab.Dependency
589588
for _, d := range deps.Requires {

pkg/cnab/config-adapter/testdata/porter-with-deps.yaml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,11 @@ dependencies:
1212
- name: ad
1313
bundle:
1414
reference: "getporter/azure-active-directory"
15+
version: 1.0.0-0
1516
- name: storage
1617
bundle:
1718
reference: "getporter/azure-blob-storage"
1819
version: 1.x - 2,2.1 - 3.x
19-
- name: dep-with-tag
20-
bundle:
21-
reference: "getporter/dep-bun:v0.1.0"
2220

2321
mixins:
2422
- exec

0 commit comments

Comments
 (0)