bake: check for empty build network with compose

Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax 2024-11-14 19:13:37 +01:00
parent e540bb03a4
commit 48977780ad
No known key found for this signature in database
GPG Key ID: ADE44D8C9D44FBE4
2 changed files with 64 additions and 34 deletions

View File

@ -102,6 +102,12 @@ func ParseCompose(cfgs []composetypes.ConfigFile, envs map[string]string) (*Conf
shmSize = &shmSizeStr shmSize = &shmSizeStr
} }
var networkModeP *string
if s.Build.Network != "" {
networkMode := s.Build.Network
networkModeP = &networkMode
}
var ulimits []string var ulimits []string
if s.Build.Ulimits != nil { if s.Build.Ulimits != nil {
for n, u := range s.Build.Ulimits { 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, CacheFrom: s.Build.CacheFrom,
CacheTo: s.Build.CacheTo, CacheTo: s.Build.CacheTo,
NetworkMode: &s.Build.Network, NetworkMode: networkModeP,
SSH: ssh, SSH: ssh,
Secrets: secrets, Secrets: secrets,
ShmSize: shmSize, ShmSize: shmSize,

View File

@ -63,48 +63,70 @@ var bakeTests = []func(t *testing.T, sb integration.Sandbox){
} }
func testBakePrint(t *testing.T, sb integration.Sandbox) { func testBakePrint(t *testing.T, sb integration.Sandbox) {
dockerfile := []byte(` testCases := []struct {
FROM busybox name string
ARG HELLO f string
RUN echo "Hello ${HELLO}" dt []byte
`) }{
bakefile := []byte(` {
"HCL",
"docker-bake.hcl",
[]byte(`
target "build" { target "build" {
args = { args = {
HELLO = "foo" HELLO = "foo"
} }
} }
`) `)},
dir := tmpdir( {
t, "Compose",
fstest.CreateFile("docker-bake.hcl", bakefile, 0600), "compose.yml",
fstest.CreateFile("Dockerfile", dockerfile, 0600), []byte(`
) services:
build:
cmd := buildxCmd(sb, withDir(dir), withArgs("bake", "--print", "build")) build:
stdout := bytes.Buffer{} context: .
stderr := bytes.Buffer{} args:
cmd.Stdout = &stdout HELLO: foo
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"`
} }
require.NoError(t, json.Unmarshal(stdout.Bytes(), &def))
require.Len(t, def.Group, 1) for _, tc := range testCases {
require.Contains(t, def.Group, "default") 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) cmd := buildxCmd(sb, withDir(dir), withArgs("bake", "--print", "build"))
require.Len(t, def.Target, 1) stdout := bytes.Buffer{}
require.Contains(t, def.Target, "build") stderr := bytes.Buffer{}
require.Equal(t, ".", *def.Target["build"].Context) cmd.Stdout = &stdout
require.Equal(t, "Dockerfile", *def.Target["build"].Dockerfile) cmd.Stderr = &stderr
require.Equal(t, map[string]*string{"HELLO": ptrstr("foo")}, def.Target["build"].Args) 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": { "group": {
"default": { "default": {
"targets": [ "targets": [
@ -123,6 +145,8 @@ target "build" {
} }
} }
`, stdout.String()) `, stdout.String())
})
}
} }
func testBakeLocal(t *testing.T, sb integration.Sandbox) { func testBakeLocal(t *testing.T, sb integration.Sandbox) {