bake: dedup compose main and extension fields values

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
pull/1155/head
CrazyMax 3 years ago
parent a0f92829a7
commit 12fde33d9b
No known key found for this signature in database
GPG Key ID: 3248E46B6BB8C7F7

@ -187,25 +187,25 @@ func (t *Target) composeExtTarget(exts map[string]interface{}) error {
}
if len(xb.Tags) > 0 {
t.Tags = append(t.Tags, xb.Tags...)
t.Tags = dedupString(append(t.Tags, xb.Tags...))
}
if len(xb.CacheFrom) > 0 {
t.CacheFrom = append(t.CacheFrom, xb.CacheFrom...)
t.CacheFrom = dedupString(append(t.CacheFrom, xb.CacheFrom...))
}
if len(xb.CacheTo) > 0 {
t.CacheTo = append(t.CacheTo, xb.CacheTo...)
t.CacheTo = dedupString(append(t.CacheTo, xb.CacheTo...))
}
if len(xb.Secrets) > 0 {
t.Secrets = append(t.Secrets, xb.Secrets...)
t.Secrets = dedupString(append(t.Secrets, xb.Secrets...))
}
if len(xb.SSH) > 0 {
t.SSH = append(t.SSH, xb.SSH...)
t.SSH = dedupString(append(t.SSH, xb.SSH...))
}
if len(xb.Platforms) > 0 {
t.Platforms = append(t.Platforms, xb.Platforms...)
t.Platforms = dedupString(append(t.Platforms, xb.Platforms...))
}
if len(xb.Outputs) > 0 {
t.Outputs = append(t.Outputs, xb.Outputs...)
t.Outputs = dedupString(append(t.Outputs, xb.Outputs...))
}
if xb.Pull != nil {
t.Pull = xb.Pull
@ -214,7 +214,7 @@ func (t *Target) composeExtTarget(exts map[string]interface{}) error {
t.NoCache = xb.NoCache
}
if len(xb.NoCacheFilter) > 0 {
t.NoCacheFilter = append(t.NoCacheFilter, xb.NoCacheFilter...)
t.NoCacheFilter = dedupString(append(t.NoCacheFilter, xb.NoCacheFilter...))
}
return nil

@ -316,6 +316,37 @@ services:
require.Equal(t, c.Targets[1].NoCache, newBool(true))
}
func TestComposeExtDedup(t *testing.T) {
var dt = []byte(`
services:
webapp:
image: app:bar
build:
cache_from:
- user/app:cache
cache_to:
- user/app:cache
tags:
- ct-addon:foo
x-bake:
tags:
- ct-addon:foo
- ct-addon:baz
cache-from:
- user/app:cache
- type=local,src=path/to/cache
cache-to:
- type=local,dest=path/to/cache
`)
c, err := ParseCompose(dt)
require.NoError(t, err)
require.Equal(t, 1, len(c.Targets))
require.Equal(t, c.Targets[0].Tags, []string{"ct-addon:foo", "ct-addon:baz"})
require.Equal(t, c.Targets[0].CacheFrom, []string{"user/app:cache", "type=local,src=path/to/cache"})
require.Equal(t, c.Targets[0].CacheTo, []string{"user/app:cache", "type=local,dest=path/to/cache"})
}
func TestEnv(t *testing.T) {
envf, err := os.CreateTemp("", "env")
require.NoError(t, err)

Loading…
Cancel
Save