mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-19 01:47:43 +08:00
Merge pull request #2863 from crazy-max/bake-fix-missing-default
bake: fix missing default target in group's default targets
This commit is contained in:
commit
3a0eeeacd5
27
bake/bake.go
27
bake/bake.go
@ -9,6 +9,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"slices"
|
"slices"
|
||||||
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -207,8 +208,9 @@ func ReadTargets(ctx context.Context, files []File, targets, overrides []string,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
m := map[string]*Target{}
|
|
||||||
n := map[string]*Group{}
|
targetsMap := map[string]*Target{}
|
||||||
|
groupsMap := map[string]*Group{}
|
||||||
for _, target := range targets {
|
for _, target := range targets {
|
||||||
ts, gs := c.ResolveGroup(target)
|
ts, gs := c.ResolveGroup(target)
|
||||||
for _, tname := range ts {
|
for _, tname := range ts {
|
||||||
@ -217,13 +219,13 @@ func ReadTargets(ctx context.Context, files []File, targets, overrides []string,
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
if t != nil {
|
if t != nil {
|
||||||
m[tname] = t
|
targetsMap[tname] = t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, gname := range gs {
|
for _, gname := range gs {
|
||||||
for _, group := range c.Groups {
|
for _, group := range c.Groups {
|
||||||
if group.Name == gname {
|
if group.Name == gname {
|
||||||
n[gname] = group
|
groupsMap[gname] = group
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,25 +233,26 @@ func ReadTargets(ctx context.Context, files []File, targets, overrides []string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, target := range targets {
|
for _, target := range targets {
|
||||||
if target == "default" {
|
if _, ok := groupsMap["default"]; ok && target == "default" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if _, ok := n["default"]; !ok {
|
if _, ok := groupsMap["default"]; !ok {
|
||||||
n["default"] = &Group{Name: "default"}
|
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)
|
g.Targets = dedupSlice(g.Targets)
|
||||||
|
sort.Strings(g.Targets)
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, t := range m {
|
for name, t := range targetsMap {
|
||||||
if err := c.loadLinks(name, t, m, o, nil, ent); err != nil {
|
if err := c.loadLinks(name, t, targetsMap, o, nil, ent); err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return m, n, nil
|
return targetsMap, groupsMap, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dedupSlice(s []string) []string {
|
func dedupSlice(s []string) []string {
|
||||||
|
@ -948,7 +948,7 @@ target "default" {
|
|||||||
|
|
||||||
m, g, err := ReadTargets(ctx, []File{f}, []string{"default"}, nil, nil, &EntitlementConf{})
|
m, g, err := ReadTargets(ctx, []File{f}, []string{"default"}, nil, nil, &EntitlementConf{})
|
||||||
require.NoError(t, err)
|
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, 1, len(m))
|
||||||
require.Equal(t, "test", *m["default"].Dockerfile)
|
require.Equal(t, "test", *m["default"].Dockerfile)
|
||||||
}
|
}
|
||||||
@ -2079,6 +2079,58 @@ target "app" {
|
|||||||
require.Len(t, m["app"].Outputs, 0)
|
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 {
|
func stringify[V fmt.Stringer](values []V) []string {
|
||||||
s := make([]string, len(values))
|
s := make([]string, len(values))
|
||||||
for i, v := range values {
|
for i, v := range values {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user