Merge pull request #1155 from crazy-max/compose-cacheto

bake: support compose build cache_to
pull/1221/head
Tõnis Tiigi 3 years ago committed by GitHub
commit 11c1e03e93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -100,6 +100,7 @@ func ParseCompose(dt []byte) (*Config, error) {
return val, ok return val, ok
})), })),
CacheFrom: s.Build.CacheFrom, CacheFrom: s.Build.CacheFrom,
CacheTo: s.Build.CacheTo,
NetworkMode: &s.Build.Network, NetworkMode: &s.Build.Network,
Secrets: secrets, Secrets: secrets,
} }
@ -186,25 +187,25 @@ func (t *Target) composeExtTarget(exts map[string]interface{}) error {
} }
if len(xb.Tags) > 0 { 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 { if len(xb.CacheFrom) > 0 {
t.CacheFrom = xb.CacheFrom // override main field t.CacheFrom = dedupString(append(t.CacheFrom, xb.CacheFrom...))
} }
if len(xb.CacheTo) > 0 { 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 { 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 { 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 { 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 { if len(xb.Outputs) > 0 {
t.Outputs = append(t.Outputs, xb.Outputs...) t.Outputs = dedupString(append(t.Outputs, xb.Outputs...))
} }
if xb.Pull != nil { if xb.Pull != nil {
t.Pull = xb.Pull t.Pull = xb.Pull
@ -213,7 +214,7 @@ func (t *Target) composeExtTarget(exts map[string]interface{}) error {
t.NoCache = xb.NoCache t.NoCache = xb.NoCache
} }
if len(xb.NoCacheFilter) > 0 { if len(xb.NoCacheFilter) > 0 {
t.NoCacheFilter = append(t.NoCacheFilter, xb.NoCacheFilter...) t.NoCacheFilter = dedupString(append(t.NoCacheFilter, xb.NoCacheFilter...))
} }
return nil return nil

@ -23,6 +23,10 @@ services:
none none
args: args:
buildno: 123 buildno: 123
cache_from:
- type=local,src=path/to/cache
cache_to:
- type=local,dest=path/to/cache
secrets: secrets:
- token - token
- aws - aws
@ -54,6 +58,8 @@ secrets:
require.Equal(t, "Dockerfile-alternate", *c.Targets[1].Dockerfile) require.Equal(t, "Dockerfile-alternate", *c.Targets[1].Dockerfile)
require.Equal(t, 1, len(c.Targets[1].Args)) require.Equal(t, 1, len(c.Targets[1].Args))
require.Equal(t, "123", c.Targets[1].Args["buildno"]) require.Equal(t, "123", c.Targets[1].Args["buildno"])
require.Equal(t, c.Targets[1].CacheFrom, []string{"type=local,src=path/to/cache"})
require.Equal(t, c.Targets[1].CacheTo, []string{"type=local,dest=path/to/cache"})
require.Equal(t, "none", *c.Targets[1].NetworkMode) require.Equal(t, "none", *c.Targets[1].NetworkMode)
require.Equal(t, []string{ require.Equal(t, []string{
"id=token,env=ENV_TOKEN", "id=token,env=ENV_TOKEN",
@ -253,6 +259,8 @@ services:
dockerfile: ./Dockerfile dockerfile: ./Dockerfile
cache_from: cache_from:
- user/app:cache - user/app:cache
cache_to:
- user/app:cache
tags: tags:
- ct-addon:baz - ct-addon:baz
args: args:
@ -267,7 +275,8 @@ services:
- linux/arm64 - linux/arm64
cache-from: cache-from:
- type=local,src=path/to/cache - type=local,src=path/to/cache
cache-to: type=local,dest=path/to/cache cache-to:
- type=local,dest=path/to/cache
pull: true pull: true
aws: aws:
@ -296,8 +305,8 @@ services:
require.Equal(t, c.Targets[0].Args, map[string]string{"CT_ECR": "foo", "CT_TAG": "bar"}) require.Equal(t, c.Targets[0].Args, map[string]string{"CT_ECR": "foo", "CT_TAG": "bar"})
require.Equal(t, c.Targets[0].Tags, []string{"ct-addon:baz", "ct-addon:foo", "ct-addon:alp"}) require.Equal(t, c.Targets[0].Tags, []string{"ct-addon:baz", "ct-addon:foo", "ct-addon:alp"})
require.Equal(t, c.Targets[0].Platforms, []string{"linux/amd64", "linux/arm64"}) require.Equal(t, c.Targets[0].Platforms, []string{"linux/amd64", "linux/arm64"})
require.Equal(t, c.Targets[0].CacheFrom, []string{"type=local,src=path/to/cache"}) 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{"type=local,dest=path/to/cache"}) require.Equal(t, c.Targets[0].CacheTo, []string{"user/app:cache", "type=local,dest=path/to/cache"})
require.Equal(t, c.Targets[0].Pull, newBool(true)) require.Equal(t, c.Targets[0].Pull, newBool(true))
require.Equal(t, c.Targets[1].Tags, []string{"ct-fake-aws:bar"}) require.Equal(t, c.Targets[1].Tags, []string{"ct-fake-aws:bar"})
require.Equal(t, c.Targets[1].Secrets, []string{"id=mysecret,src=/local/secret", "id=mysecret2,src=/local/secret2"}) require.Equal(t, c.Targets[1].Secrets, []string{"id=mysecret,src=/local/secret", "id=mysecret2,src=/local/secret2"})
@ -307,6 +316,37 @@ services:
require.Equal(t, c.Targets[1].NoCache, newBool(true)) 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) { func TestEnv(t *testing.T) {
envf, err := os.CreateTemp("", "env") envf, err := os.CreateTemp("", "env")
require.NoError(t, err) require.NoError(t, err)

Loading…
Cancel
Save