diff --git a/bake/compose.go b/bake/compose.go index 6036e534..d1217338 100644 --- a/bake/compose.go +++ b/bake/compose.go @@ -102,6 +102,12 @@ func ParseCompose(cfgs []composetypes.ConfigFile, envs map[string]string) (*Conf shmSize = &shmSizeStr } + var networkModeP *string + if s.Build.Network != "" { + networkMode := s.Build.Network + networkModeP = &networkMode + } + var ulimits []string if s.Build.Ulimits != nil { for n, u := range s.Build.Ulimits { @@ -154,7 +160,7 @@ func ParseCompose(cfgs []composetypes.ConfigFile, envs map[string]string) (*Conf })), CacheFrom: s.Build.CacheFrom, CacheTo: s.Build.CacheTo, - NetworkMode: &s.Build.Network, + NetworkMode: networkModeP, SSH: ssh, Secrets: secrets, ShmSize: shmSize, diff --git a/tests/bake.go b/tests/bake.go index 41212ee9..3f991d03 100644 --- a/tests/bake.go +++ b/tests/bake.go @@ -63,48 +63,70 @@ var bakeTests = []func(t *testing.T, sb integration.Sandbox){ } func testBakePrint(t *testing.T, sb integration.Sandbox) { - dockerfile := []byte(` -FROM busybox -ARG HELLO -RUN echo "Hello ${HELLO}" - `) - bakefile := []byte(` + testCases := []struct { + name string + f string + dt []byte + }{ + { + "HCL", + "docker-bake.hcl", + []byte(` target "build" { args = { HELLO = "foo" } } -`) - dir := tmpdir( - t, - fstest.CreateFile("docker-bake.hcl", bakefile, 0600), - fstest.CreateFile("Dockerfile", dockerfile, 0600), - ) - - cmd := buildxCmd(sb, withDir(dir), withArgs("bake", "--print", "build")) - stdout := bytes.Buffer{} - stderr := bytes.Buffer{} - cmd.Stdout = &stdout - cmd.Stderr = &stderr - require.NoError(t, cmd.Run(), stdout.String(), stderr.String()) - - var def struct { - Group map[string]*bake.Group `json:"group,omitempty"` - Target map[string]*bake.Target `json:"target"` +`)}, + { + "Compose", + "compose.yml", + []byte(` +services: + build: + build: + context: . + args: + HELLO: foo +`)}, } - require.NoError(t, json.Unmarshal(stdout.Bytes(), &def)) - require.Len(t, def.Group, 1) - require.Contains(t, def.Group, "default") + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + dir := tmpdir( + t, + fstest.CreateFile(tc.f, tc.dt, 0600), + fstest.CreateFile("Dockerfile", []byte(` +FROM busybox +ARG HELLO +RUN echo "Hello ${HELLO}" + `), 0600), + ) - require.Equal(t, []string{"build"}, def.Group["default"].Targets) - require.Len(t, def.Target, 1) - require.Contains(t, def.Target, "build") - require.Equal(t, ".", *def.Target["build"].Context) - require.Equal(t, "Dockerfile", *def.Target["build"].Dockerfile) - require.Equal(t, map[string]*string{"HELLO": ptrstr("foo")}, def.Target["build"].Args) + cmd := buildxCmd(sb, withDir(dir), withArgs("bake", "--print", "build")) + stdout := bytes.Buffer{} + stderr := bytes.Buffer{} + cmd.Stdout = &stdout + cmd.Stderr = &stderr + require.NoError(t, cmd.Run(), stdout.String(), stderr.String()) - require.Equal(t, `{ + var def struct { + Group map[string]*bake.Group `json:"group,omitempty"` + Target map[string]*bake.Target `json:"target"` + } + require.NoError(t, json.Unmarshal(stdout.Bytes(), &def)) + + require.Len(t, def.Group, 1) + require.Contains(t, def.Group, "default") + + require.Equal(t, []string{"build"}, def.Group["default"].Targets) + require.Len(t, def.Target, 1) + require.Contains(t, def.Target, "build") + require.Equal(t, ".", *def.Target["build"].Context) + require.Equal(t, "Dockerfile", *def.Target["build"].Dockerfile) + require.Equal(t, map[string]*string{"HELLO": ptrstr("foo")}, def.Target["build"].Args) + + require.Equal(t, `{ "group": { "default": { "targets": [ @@ -123,6 +145,8 @@ target "build" { } } `, stdout.String()) + }) + } } func testBakeLocal(t *testing.T, sb integration.Sandbox) {