Skip to content

Commit

Permalink
Set AllowPrerelease on deps v1 extension
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
carolynvs committed Jul 6, 2022
1 parent 5baac51 commit d78859a
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 20 deletions.
29 changes: 21 additions & 8 deletions pkg/cnab/config-adapter/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"get.porter.sh/porter/pkg/manifest"
"get.porter.sh/porter/pkg/mixin"
"get.porter.sh/porter/pkg/tracing"
"github.com/Masterminds/semver/v3"
"github.com/cnabio/cnab-go/bundle"
"github.com/cnabio/cnab-go/bundle/definition"
)
Expand Down Expand Up @@ -71,7 +72,11 @@ func (c *ManifestConverter) ToBundle(ctx context.Context) (cnab.ExtendedBundle,
b.Outputs = c.generateBundleOutputs(ctx, &b.Definitions)
b.Credentials = c.generateBundleCredentials()
b.Images = c.generateBundleImages()
b.Custom = c.generateCustomExtensions(&b)
custom, err := c.generateCustomExtensions(&b)
if err != nil {
return cnab.ExtendedBundle{}, err
}
b.Custom = custom
b.RequiredExtensions = c.generateRequiredExtensions(b)

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

func (c *ManifestConverter) generateDependencies() *cnab.Dependencies {

func (c *ManifestConverter) generateDependencies() (*cnab.Dependencies, error) {
if len(c.Manifest.Dependencies.RequiredDependencies) == 0 {
return nil
return nil, nil
}

deps := &cnab.Dependencies{
Expand All @@ -421,12 +425,18 @@ func (c *ManifestConverter) generateDependencies() *cnab.Dependencies {
dependencyRef.Version = &cnab.DependencyVersion{
Ranges: []string{dep.Bundle.Version},
}

// If we can detect that prereleases are used in the version, then set AllowPrereleases to true
v, err := semver.NewVersion(dep.Bundle.Version)
if err == nil {
dependencyRef.Version.AllowPrereleases = v.Prerelease() != ""
}
}
deps.Sequence = append(deps.Sequence, dep.Name)
deps.Requires[dep.Name] = dependencyRef
}

return deps
return deps, nil
}

func (c *ManifestConverter) generateParameterSources(b *cnab.ExtendedBundle) cnab.ParameterSources {
Expand Down Expand Up @@ -576,7 +586,7 @@ func toFloat(v float64) *float64 {
return &v
}

func (c *ManifestConverter) generateCustomExtensions(b *cnab.ExtendedBundle) map[string]interface{} {
func (c *ManifestConverter) generateCustomExtensions(b *cnab.ExtendedBundle) (map[string]interface{}, error) {
customExtensions := map[string]interface{}{
cnab.FileParameterExtensionKey: struct{}{},
}
Expand All @@ -587,7 +597,10 @@ func (c *ManifestConverter) generateCustomExtensions(b *cnab.ExtendedBundle) map
}

// Add the dependency extension
deps := c.generateDependencies()
deps, err := c.generateDependencies()
if err != nil {
return nil, err
}
if deps != nil && len(deps.Requires) > 0 {
customExtensions[cnab.DependenciesExtensionKey] = deps
}
Expand All @@ -603,7 +616,7 @@ func (c *ManifestConverter) generateCustomExtensions(b *cnab.ExtendedBundle) map
customExtensions[lookupExtensionKey(ext.Name)] = ext.Config
}

return customExtensions
return customExtensions, nil
}

func (c *ManifestConverter) generateRequiredExtensions(b cnab.ExtendedBundle) []string {
Expand Down
17 changes: 8 additions & 9 deletions pkg/cnab/config-adapter/adapter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -544,11 +544,12 @@ func TestManifestConverter_generateDependencies(t *testing.T) {
Name: "mysql",
Bundle: "getporter/azure-mysql:5.7",
}},
{"no-ranges", cnab.Dependency{
{"no-ranges, uses prerelease", cnab.Dependency{
Name: "ad",
Bundle: "getporter/azure-active-directory",
Version: &cnab.DependencyVersion{
AllowPrereleases: true,
Ranges: []string{"1.0.0-0"},
},
}},
{"with-ranges", cnab.Dependency{
Expand All @@ -561,16 +562,13 @@ func TestManifestConverter_generateDependencies(t *testing.T) {
},
},
}},
{"with-tag", cnab.Dependency{
Name: "dep-with-tag",
Bundle: "getporter/dep-bun:v0.1.0",
}},
}

for _, tc := range testcases {
tc := tc

t.Run(tc.name, func(t *testing.T) {
t.Parallel()
tc := tc

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

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

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

var dep *cnab.Dependency
for _, d := range deps.Requires {
Expand Down
4 changes: 1 addition & 3 deletions pkg/cnab/config-adapter/testdata/porter-with-deps.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,11 @@ dependencies:
- name: ad
bundle:
reference: "getporter/azure-active-directory"
version: 1.0.0-0
- name: storage
bundle:
reference: "getporter/azure-blob-storage"
version: 1.x - 2,2.1 - 3.x
- name: dep-with-tag
bundle:
reference: "getporter/dep-bun:v0.1.0"

mixins:
- exec
Expand Down

0 comments on commit d78859a

Please sign in to comment.