mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 00:47:48 +08:00
bake: fix missing default target in group's default targets
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
parent
c571b9d730
commit
a90d5794ee
27
bake/bake.go
27
bake/bake.go
@ -9,6 +9,7 @@ import (
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"slices"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@ -207,8 +208,9 @@ func ReadTargets(ctx context.Context, files []File, targets, overrides []string,
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
m := map[string]*Target{}
|
||||
n := map[string]*Group{}
|
||||
|
||||
targetsMap := map[string]*Target{}
|
||||
groupsMap := map[string]*Group{}
|
||||
for _, target := range targets {
|
||||
ts, gs := c.ResolveGroup(target)
|
||||
for _, tname := range ts {
|
||||
@ -217,13 +219,13 @@ func ReadTargets(ctx context.Context, files []File, targets, overrides []string,
|
||||
return nil, nil, err
|
||||
}
|
||||
if t != nil {
|
||||
m[tname] = t
|
||||
targetsMap[tname] = t
|
||||
}
|
||||
}
|
||||
for _, gname := range gs {
|
||||
for _, group := range c.Groups {
|
||||
if group.Name == gname {
|
||||
n[gname] = group
|
||||
groupsMap[gname] = group
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -231,25 +233,26 @@ func ReadTargets(ctx context.Context, files []File, targets, overrides []string,
|
||||
}
|
||||
|
||||
for _, target := range targets {
|
||||
if target == "default" {
|
||||
if _, ok := groupsMap["default"]; ok && target == "default" {
|
||||
continue
|
||||
}
|
||||
if _, ok := n["default"]; !ok {
|
||||
n["default"] = &Group{Name: "default"}
|
||||
if _, ok := groupsMap["default"]; !ok {
|
||||
groupsMap["default"] = &Group{Name: "default"}
|
||||
}
|
||||
n["default"].Targets = append(n["default"].Targets, target)
|
||||
groupsMap["default"].Targets = append(groupsMap["default"].Targets, target)
|
||||
}
|
||||
if g, ok := n["default"]; ok {
|
||||
if g, ok := groupsMap["default"]; ok {
|
||||
g.Targets = dedupSlice(g.Targets)
|
||||
sort.Strings(g.Targets)
|
||||
}
|
||||
|
||||
for name, t := range m {
|
||||
if err := c.loadLinks(name, t, m, o, nil, ent); err != nil {
|
||||
for name, t := range targetsMap {
|
||||
if err := c.loadLinks(name, t, targetsMap, o, nil, ent); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return m, n, nil
|
||||
return targetsMap, groupsMap, nil
|
||||
}
|
||||
|
||||
func dedupSlice(s []string) []string {
|
||||
|
@ -948,7 +948,7 @@ target "default" {
|
||||
|
||||
m, g, err := ReadTargets(ctx, []File{f}, []string{"default"}, nil, nil, &EntitlementConf{})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 0, len(g))
|
||||
require.Equal(t, 1, len(g))
|
||||
require.Equal(t, 1, len(m))
|
||||
require.Equal(t, "test", *m["default"].Dockerfile)
|
||||
}
|
||||
@ -2079,6 +2079,58 @@ target "app" {
|
||||
require.Len(t, m["app"].Outputs, 0)
|
||||
}
|
||||
|
||||
// https://github.com/docker/buildx/issues/2859
|
||||
func TestGroupTargetsWithDefault(t *testing.T) {
|
||||
t.Run("OnTarget", func(t *testing.T) {
|
||||
fp := File{
|
||||
Name: "docker-bake.hcl",
|
||||
Data: []byte(
|
||||
`target "default" {
|
||||
dockerfile = "Dockerfile"
|
||||
platforms = ["linux/amd64"]
|
||||
}
|
||||
target "multiarch" {
|
||||
dockerfile = "Dockerfile"
|
||||
platforms = ["linux/amd64","linux/arm64","linux/arm/v7","linux/arm/v6"]
|
||||
}`),
|
||||
}
|
||||
ctx := context.TODO()
|
||||
_, g, err := ReadTargets(ctx, []File{fp}, []string{"default", "multiarch"}, nil, nil, &EntitlementConf{})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 1, len(g))
|
||||
require.Equal(t, 2, len(g["default"].Targets))
|
||||
require.Equal(t, []string{"default", "multiarch"}, g["default"].Targets)
|
||||
})
|
||||
|
||||
t.Run("OnGroup", func(t *testing.T) {
|
||||
fp := File{
|
||||
Name: "docker-bake.hcl",
|
||||
Data: []byte(
|
||||
`group "default" {
|
||||
targets = ["app", "multiarch"]
|
||||
}
|
||||
target "app" {
|
||||
dockerfile = "app.Dockerfile"
|
||||
}
|
||||
target "foo" {
|
||||
dockerfile = "foo.Dockerfile"
|
||||
}
|
||||
target "multiarch" {
|
||||
dockerfile = "Dockerfile"
|
||||
platforms = ["linux/amd64","linux/arm64","linux/arm/v7","linux/arm/v6"]
|
||||
}`),
|
||||
}
|
||||
ctx := context.TODO()
|
||||
_, g, err := ReadTargets(ctx, []File{fp}, []string{"default", "foo"}, nil, nil, &EntitlementConf{})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 1, len(g))
|
||||
require.Equal(t, 3, len(g["default"].Targets))
|
||||
require.Equal(t, []string{"app", "foo", "multiarch"}, g["default"].Targets)
|
||||
})
|
||||
}
|
||||
|
||||
func stringify[V fmt.Stringer](values []V) []string {
|
||||
s := make([]string, len(values))
|
||||
for i, v := range values {
|
||||
|
Loading…
x
Reference in New Issue
Block a user