Skip to content

Commit

Permalink
Consider porter version and mixins version to generate digest (#760)
Browse files Browse the repository at this point in the history
  • Loading branch information
dev-drprasad authored and carolynvs-msft committed Nov 13, 2019
1 parent e3896f5 commit 99cd108
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 14 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@
.cnab
examples/**/Dockerfile
workshop/**/Dockerfile

.vscode
5 changes: 4 additions & 1 deletion pkg/cnab/config_adapter/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/deislabs/porter/pkg/config"
"github.com/deislabs/porter/pkg/context"
"github.com/deislabs/porter/pkg/manifest"
"github.com/deislabs/porter/pkg/mixin"
)

const SchemaVersion = "v1.0.0"
Expand All @@ -20,13 +21,15 @@ type ManifestConverter struct {
*context.Context
Manifest *manifest.Manifest
ImageDigests map[string]string
Mixins []mixin.Metadata
}

func NewManifestConverter(cxt *context.Context, manifest *manifest.Manifest, imageDigests map[string]string) *ManifestConverter {
func NewManifestConverter(cxt *context.Context, manifest *manifest.Manifest, imageDigests map[string]string, mixins []mixin.Metadata) *ManifestConverter {
return &ManifestConverter{
Context: cxt,
Manifest: manifest,
ImageDigests: imageDigests,
Mixins: mixins,
}
}

Expand Down
18 changes: 9 additions & 9 deletions pkg/cnab/config_adapter/adapter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func TestManifestConverter_ToBundle(t *testing.T) {
m, err := manifest.LoadManifestFrom(c.Context, config.Name)
require.NoError(t, err, "could not load manifest")

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

bun := a.ToBundle()

Expand Down Expand Up @@ -50,7 +50,7 @@ func TestManifestConverter_generateBundleParametersSchema(t *testing.T) {
m, err := manifest.LoadManifestFrom(c.Context, config.Name)
require.NoError(t, err, "could not load manifest")

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

defs := make(definition.Definitions, len(m.Parameters))
params := a.generateBundleParameters(&defs)
Expand Down Expand Up @@ -210,7 +210,7 @@ func TestManifestConverter_buildDefaultPorterParameters(t *testing.T) {
m, err := manifest.LoadManifestFrom(c.Context, config.Name)
require.NoError(t, err, "could not load manifest")

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

defs := make(definition.Definitions, len(m.Parameters))
params := a.generateBundleParameters(&defs)
Expand All @@ -233,7 +233,7 @@ func TestManifestConverter_generateImages(t *testing.T) {
m, err := manifest.LoadManifestFrom(c.Context, config.Name)
require.NoError(t, err, "could not load manifest")

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

mappedImage := manifest.MappedImage{
Description: "un petite server",
Expand Down Expand Up @@ -272,7 +272,7 @@ func TestManifestConverter_generateBundleImages_EmptyLabels(t *testing.T) {
m, err := manifest.LoadManifestFrom(c.Context, config.Name)
require.NoError(t, err, "could not load manifest")

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

mappedImage := manifest.MappedImage{
Description: "un petite server",
Expand All @@ -299,7 +299,7 @@ func TestManifestConverter_generateBundleOutputs(t *testing.T) {
m, err := manifest.LoadManifestFrom(c.Context, config.Name)
require.NoError(t, err, "could not load manifest")

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

outputDefinitions := []manifest.OutputDefinition{
{
Expand Down Expand Up @@ -388,7 +388,7 @@ func TestManifestConverter_generateDependencies(t *testing.T) {
m, err := manifest.LoadManifestFrom(c.Context, config.Name)
require.NoError(t, err, "could not load manifest")

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

deps := a.generateDependencies()
require.NotNil(t, deps, "Dependencies should not be nil")
Expand Down Expand Up @@ -441,7 +441,7 @@ func TestManifestConverter_RequiredExtensions(t *testing.T) {
m, err := manifest.LoadManifestFrom(c.Context, config.Name)
require.NoError(t, err, "could not load manifest")

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

bun := a.ToBundle()

Expand All @@ -455,7 +455,7 @@ func TestManifestConverter_GenerateCustomActionDefinitions(t *testing.T) {
m, err := manifest.LoadManifestFrom(c.Context, config.Name)
require.NoError(t, err, "could not load manifest")

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

defs := a.generateCustomActionDefinitions()
require.Len(t, defs, 2, "expected 2 custom action definitions to be generated")
Expand Down
8 changes: 8 additions & 0 deletions pkg/cnab/config_adapter/stamp.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"fmt"

"github.com/deislabs/cnab-go/bundle"
"github.com/deislabs/porter/pkg"
"github.com/deislabs/porter/pkg/config"
"github.com/pkg/errors"
)
Expand Down Expand Up @@ -41,6 +42,13 @@ func (c *ManifestConverter) digestManifest() (string, error) {
return "", errors.Wrapf(err, "could not read manifest at %q", c.Manifest.ManifestPath)
}

v := pkg.Version
data = append(data, v...)

for _, m := range c.Mixins {
data = append(append(data, m.Name...), m.Version...)
}

digest := sha256.Sum256(data)
return hex.EncodeToString(digest[:]), nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/cnab/config_adapter/stamp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func TestConfig_ComputeManifestDigest(t *testing.T) {
m, err := manifest.LoadManifestFrom(c.Context, config.Name)
require.NoError(t, err, "could not load manifest")

a := NewManifestConverter(c.Context, m, nil)
a := NewManifestConverter(c.Context, m, nil, nil)
stamp := a.GenerateStamp()
assert.Equal(t, simpleManifestDigest, stamp.ManifestDigest)
}
Expand Down
29 changes: 28 additions & 1 deletion pkg/porter/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"os"

"github.com/deislabs/porter/pkg/manifest"
"github.com/deislabs/porter/pkg/mixin"

"github.com/deislabs/cnab-go/bundle"
"github.com/deislabs/porter/pkg/build"
Expand Down Expand Up @@ -44,9 +45,35 @@ func (p *Porter) Build(opts BuildOptions) error {
return p.buildBundle(p.Manifest.Image, "")
}

func (p *Porter) getUsedMixins() ([]mixin.Metadata, error) {
installedMixins, err := p.ListMixins()

if err != nil {
return nil, errors.Wrapf(err, "error while listing mixins")
}

usedMixins := []mixin.Metadata{}
for _, installedMixin := range installedMixins {
for _, m := range p.Manifest.Mixins {
if installedMixin.Name == m.Name {
usedMixins = append(usedMixins, installedMixin)
}
}
}

return usedMixins, nil
}

func (p *Porter) buildBundle(invocationImage string, digest string) error {
imageDigests := map[string]string{invocationImage: digest}
converter := configadapter.NewManifestConverter(p.Context, p.Manifest, imageDigests)

mixins, err := p.getUsedMixins()

if err != nil {
return err
}

converter := configadapter.NewManifestConverter(p.Context, p.Manifest, imageDigests, mixins)
bun := converter.ToBundle()
return p.writeBundle(bun)
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/porter/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func TestPorter_buildBundle(t *testing.T) {

stamp, err := configadapter.LoadStamp(bun)
require.NoError(t, err)
assert.Equal(t, "afad2f154530f120b85eb690d5c2814cf47d7a5337932b66ddab04f4e70e7add", stamp.ManifestDigest)
assert.Equal(t, "bfbac5f17d2895b27f1513a7ec3dde70c095acc9c0d802d3a11ae211403a0401", stamp.ManifestDigest)

debugParam, ok := bun.Parameters["porter-debug"]
require.True(t, ok, "porter-debug parameter was not defined")
Expand Down
7 changes: 6 additions & 1 deletion pkg/porter/stamp.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,12 @@ func (p *Porter) IsBundleUpToDate(opts bundleFileOptions) (bool, error) {
return false, errors.Wrapf(err, "could not load stamp from %s", opts.CNABFile)
}

converter := configadapter.NewManifestConverter(p.Context, p.Manifest, nil)
mixins, err := p.getUsedMixins()
if err != nil {
return false, errors.Wrapf(err, "error while listing used mixins")
}

converter := configadapter.NewManifestConverter(p.Context, p.Manifest, nil, mixins)
newStamp := converter.GenerateStamp()
return oldStamp.ManifestDigest == newStamp.ManifestDigest, nil
}
Expand Down

0 comments on commit 99cd108

Please sign in to comment.