Skip to content

Commit

Permalink
bake: print default group if none is specified
Browse files Browse the repository at this point in the history
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
  • Loading branch information
crazy-max committed Aug 8, 2021
1 parent cd133ce commit 884dead
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 19 deletions.
10 changes: 5 additions & 5 deletions bake/bake.go
Expand Up @@ -61,29 +61,29 @@ func ReadLocalFiles(names []string) ([]File, error) {
return out, nil
}

func ReadTargets(ctx context.Context, files []File, targets, overrides []string, defaults map[string]string) (map[string]*Target, error) {
func ReadTargets(ctx context.Context, files []File, targets, overrides []string, defaults map[string]string) (map[string]*Target, []*Group, error) {
c, err := ParseFiles(files, defaults)
if err != nil {
return nil, err
return nil, nil, err
}

o, err := c.newOverrides(overrides)
if err != nil {
return nil, err
return nil, nil, err
}
m := map[string]*Target{}
for _, n := range targets {
for _, n := range c.ResolveGroup(n) {
t, err := c.ResolveTarget(n, o)
if err != nil {
return nil, err
return nil, nil, err
}
if t != nil {
m[n] = t
}
}
}
return m, nil
return m, c.Groups, nil
}

func ParseFiles(files []File, defaults map[string]string) (_ *Config, err error) {
Expand Down
22 changes: 11 additions & 11 deletions bake/bake_test.go
Expand Up @@ -34,7 +34,7 @@ target "webapp" {
ctx := context.TODO()

t.Run("NoOverrides", func(t *testing.T) {
m, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, nil, nil)
m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, nil, nil)
require.NoError(t, err)
require.Equal(t, 1, len(m))

Expand All @@ -46,7 +46,7 @@ target "webapp" {
})

t.Run("InvalidTargetOverrides", func(t *testing.T) {
_, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"nosuchtarget.context=foo"}, nil)
_, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"nosuchtarget.context=foo"}, nil)
require.NotNil(t, err)
require.Equal(t, err.Error(), "could not find any target matching 'nosuchtarget'")
})
Expand All @@ -56,7 +56,7 @@ target "webapp" {
os.Setenv("VAR_FROMENV"+t.Name(), "fromEnv")
defer os.Unsetenv("VAR_FROM_ENV" + t.Name())

m, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{
m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{
"webapp.args.VAR_UNSET",
"webapp.args.VAR_EMPTY=",
"webapp.args.VAR_SET=bananas",
Expand Down Expand Up @@ -85,7 +85,7 @@ target "webapp" {

// building leaf but overriding parent fields
t.Run("parent", func(t *testing.T) {
m, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{
m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{
"webDEP.args.VAR_INHERITED=override",
"webDEP.args.VAR_BOTH=override",
}, nil)
Expand All @@ -96,23 +96,23 @@ target "webapp" {
})

t.Run("ContextOverride", func(t *testing.T) {
_, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.context"}, nil)
_, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.context"}, nil)
require.NotNil(t, err)

m, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.context=foo"}, nil)
m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.context=foo"}, nil)
require.NoError(t, err)

require.Equal(t, "foo", *m["webapp"].Context)
})

t.Run("NoCacheOverride", func(t *testing.T) {
m, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.no-cache=false"}, nil)
m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.no-cache=false"}, nil)
require.NoError(t, err)
require.Equal(t, false, *m["webapp"].NoCache)
})

t.Run("PullOverride", func(t *testing.T) {
m, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.pull=false"}, nil)
m, _, err := ReadTargets(ctx, []File{fp}, []string{"webapp"}, []string{"webapp.pull=false"}, nil)
require.NoError(t, err)
require.Equal(t, false, *m["webapp"].Pull)
})
Expand Down Expand Up @@ -172,7 +172,7 @@ target "webapp" {
}
for _, test := range cases {
t.Run(test.name, func(t *testing.T) {
m, err := ReadTargets(ctx, []File{fp}, test.targets, test.overrides, nil)
m, _, err := ReadTargets(ctx, []File{fp}, test.targets, test.overrides, nil)
test.check(t, m, err)
})
}
Expand Down Expand Up @@ -215,7 +215,7 @@ services:

ctx := context.TODO()

m, err := ReadTargets(ctx, []File{fp, fp2}, []string{"default"}, nil, nil)
m, _, err := ReadTargets(ctx, []File{fp, fp2}, []string{"default"}, nil, nil)
require.NoError(t, err)

require.Equal(t, 3, len(m))
Expand All @@ -238,7 +238,7 @@ func TestHCLCwdPrefix(t *testing.T) {
}`),
}
ctx := context.TODO()
m, err := ReadTargets(ctx, []File{fp}, []string{"app"}, nil, nil)
m, _, err := ReadTargets(ctx, []File{fp}, []string{"app"}, nil, nil)
require.NoError(t, err)

require.Equal(t, 1, len(m))
Expand Down
25 changes: 22 additions & 3 deletions commands/bake.go
Expand Up @@ -36,6 +36,7 @@ func runBake(dockerCli command.Cli, targets []string, in bakeOptions) (err error
}()

var url string
var noTarget bool
cmdContext := "cwd://"

if len(targets) > 0 {
Expand All @@ -54,6 +55,7 @@ func runBake(dockerCli command.Cli, targets []string, in bakeOptions) (err error

if len(targets) == 0 {
targets = []string{"default"}
noTarget = true
}

overrides := in.overrides
Expand Down Expand Up @@ -103,21 +105,38 @@ func runBake(dockerCli command.Cli, targets []string, in bakeOptions) (err error
return err
}

m, err := bake.ReadTargets(ctx, files, targets, overrides, map[string]string{
t, g, err := bake.ReadTargets(ctx, files, targets, overrides, map[string]string{
"BAKE_CMD_CONTEXT": cmdContext,
})
if err != nil {
return err
}

// this function can update target context string from the input so call before printOnly check
bo, err := bake.TargetsToBuildOpt(m, inp)
bo, err := bake.TargetsToBuildOpt(t, inp)
if err != nil {
return err
}

if in.printOnly {
dt, err := json.MarshalIndent(map[string]map[string]*bake.Target{"target": m}, "", " ")
var defGroup map[string][]string
if noTarget {
for _, group := range g {
if group.Name != "default" {
continue
}
defGroup = map[string][]string{
"default": group.Targets,
}
}
}
dt, err := json.MarshalIndent(struct {
Group map[string][]string `json:"group,omitempty"`
Target map[string]*bake.Target `json:"target"`
}{
defGroup,
t,
}, "", " ")
if err != nil {
return err
}
Expand Down

0 comments on commit 884dead

Please sign in to comment.