Merge pull request #1153 from crazy-max/update-compose-go

bake: support compose build tags and secrets env
This commit is contained in:
Tõnis Tiigi
2022-06-14 12:45:33 -07:00
committed by GitHub
19 changed files with 305 additions and 109 deletions

View File

@@ -89,6 +89,7 @@ func ParseCompose(dt []byte) (*Config, error) {
Name: s.Name,
Context: contextPathP,
Dockerfile: dockerfilePathP,
Tags: s.Build.Tags,
Labels: s.Build.Labels,
Args: flatten(s.Build.Args.Resolve(func(val string) (string, bool) {
if val, ok := s.Environment[val]; ok && val != nil {
@@ -235,6 +236,9 @@ func composeToBuildkitSecret(inp compose.ServiceSecretConfig, psecret compose.Se
if psecret.File != "" {
bkattrs = append(bkattrs, "src="+psecret.File)
}
if psecret.Environment != "" {
bkattrs = append(bkattrs, "env="+psecret.Environment)
}
return strings.Join(bkattrs, ","), nil
}

View File

@@ -24,10 +24,11 @@ services:
args:
buildno: 123
secrets:
- ENV_TOKEN
- token
- aws
secrets:
ENV_TOKEN: {}
token:
environment: ENV_TOKEN
aws:
file: /root/.aws/credentials
`)
@@ -46,6 +47,7 @@ secrets:
})
require.Equal(t, "db", c.Targets[0].Name)
require.Equal(t, "./db", *c.Targets[0].Context)
require.Equal(t, []string{"docker.io/tonistiigi/db"}, c.Targets[0].Tags)
require.Equal(t, "webapp", c.Targets[1].Name)
require.Equal(t, "./dir", *c.Targets[1].Context)
@@ -54,7 +56,7 @@ secrets:
require.Equal(t, "123", c.Targets[1].Args["buildno"])
require.Equal(t, "none", *c.Targets[1].NetworkMode)
require.Equal(t, []string{
"id=ENV_TOKEN",
"id=token,env=ENV_TOKEN",
"id=aws,src=/root/.aws/credentials",
}, c.Targets[1].Secrets)
}
@@ -193,6 +195,24 @@ networks:
require.NoError(t, err)
}
func TestTags(t *testing.T) {
var dt = []byte(`
services:
example:
image: example
build:
context: .
dockerfile: Dockerfile
tags:
- foo
- bar
`)
c, err := ParseCompose(dt)
require.NoError(t, err)
require.Equal(t, c.Targets[0].Tags, []string{"foo", "bar"})
}
func TestDependsOnList(t *testing.T) {
var dt = []byte(`
version: "3.8"
@@ -239,6 +259,8 @@ services:
dockerfile: ./Dockerfile
cache_from:
- user/app:cache
tags:
- ct-addon:baz
args:
CT_ECR: foo
CT_TAG: bar
@@ -278,7 +300,7 @@ services:
return c.Targets[i].Name < c.Targets[j].Name
})
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: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].CacheFrom, []string{"type=local,src=path/to/cache"})
require.Equal(t, c.Targets[0].CacheTo, []string{"local,dest=path/to/cache"})