mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 17:37:46 +08:00
bake: fix group resolution
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
parent
33c121df01
commit
d95ebef55c
@ -378,7 +378,12 @@ func (c Config) group(name string, visited map[string]struct{}) []string {
|
|||||||
visited[name] = struct{}{}
|
visited[name] = struct{}{}
|
||||||
targets := make([]string, 0, len(g.Targets))
|
targets := make([]string, 0, len(g.Targets))
|
||||||
for _, t := range g.Targets {
|
for _, t := range g.Targets {
|
||||||
targets = append(targets, c.group(t, visited)...)
|
tgroup := c.group(t, visited)
|
||||||
|
if len(tgroup) > 0 {
|
||||||
|
targets = append(targets, tgroup...)
|
||||||
|
} else {
|
||||||
|
targets = append(targets, t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return targets
|
return targets
|
||||||
}
|
}
|
||||||
|
@ -585,3 +585,69 @@ services:
|
|||||||
require.Equal(t, "./Dockerfile", *m["addon"].Dockerfile)
|
require.Equal(t, "./Dockerfile", *m["addon"].Dockerfile)
|
||||||
require.Equal(t, "./aws.Dockerfile", *m["aws"].Dockerfile)
|
require.Equal(t, "./aws.Dockerfile", *m["aws"].Dockerfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReadTargetsSameGroupTarget(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
ctx := context.TODO()
|
||||||
|
|
||||||
|
f := File{
|
||||||
|
Name: "docker-bake.hcl",
|
||||||
|
Data: []byte(`
|
||||||
|
group "foo" {
|
||||||
|
targets = ["foo"]
|
||||||
|
}
|
||||||
|
target "foo" {
|
||||||
|
dockerfile = "bar"
|
||||||
|
}
|
||||||
|
target "image" {
|
||||||
|
output = ["type=docker"]
|
||||||
|
}`)}
|
||||||
|
|
||||||
|
m, g, err := ReadTargets(ctx, []File{f}, []string{"foo"}, nil, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, 1, len(g))
|
||||||
|
require.Equal(t, []string{"foo"}, g[0].Targets)
|
||||||
|
require.Equal(t, 1, len(m))
|
||||||
|
require.Equal(t, "bar", *m["foo"].Dockerfile)
|
||||||
|
|
||||||
|
m, g, err = ReadTargets(ctx, []File{f}, []string{"foo", "foo"}, nil, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, 1, len(g))
|
||||||
|
require.Equal(t, []string{"foo"}, g[0].Targets)
|
||||||
|
require.Equal(t, 1, len(m))
|
||||||
|
require.Equal(t, "bar", *m["foo"].Dockerfile)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestReadTargetsSameGroupTargetMulti(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
ctx := context.TODO()
|
||||||
|
|
||||||
|
f := File{
|
||||||
|
Name: "docker-bake.hcl",
|
||||||
|
Data: []byte(`
|
||||||
|
group "foo" {
|
||||||
|
targets = ["foo", "image"]
|
||||||
|
}
|
||||||
|
target "foo" {
|
||||||
|
dockerfile = "bar"
|
||||||
|
}
|
||||||
|
target "image" {
|
||||||
|
output = ["type=docker"]
|
||||||
|
}`)}
|
||||||
|
|
||||||
|
m, g, err := ReadTargets(ctx, []File{f}, []string{"foo"}, nil, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, 1, len(g))
|
||||||
|
require.Equal(t, []string{"foo", "image"}, g[0].Targets)
|
||||||
|
require.Equal(t, 2, len(m))
|
||||||
|
require.Equal(t, "bar", *m["foo"].Dockerfile)
|
||||||
|
require.Equal(t, "type=docker", m["image"].Outputs[0])
|
||||||
|
|
||||||
|
m, g, err = ReadTargets(ctx, []File{f}, []string{"foo", "image"}, nil, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, 1, len(g))
|
||||||
|
require.Equal(t, []string{"foo", "image"}, g[0].Targets)
|
||||||
|
require.Equal(t, 2, len(m))
|
||||||
|
require.Equal(t, "bar", *m["foo"].Dockerfile)
|
||||||
|
require.Equal(t, "type=docker", m["image"].Outputs[0])
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user