Skip to content

Commit 1a8287f

Browse files
authored
Merge pull request #3331 from crazy-max/0.26_picks_0.26.1
[v0.26] cherry-picks for v0.26.1
2 parents 5c7e114 + 71cc715 commit 1a8287f

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

bake/compose.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,9 @@ func loadComposeFiles(cfgs []composetypes.ConfigFile, envs map[string]string, op
242242
filtered[key] = v
243243
}
244244
}
245+
if len(filtered) == 0 {
246+
return nil, errors.New("empty compose file")
247+
}
245248

246249
if err := composeschema.Validate(filtered); err != nil {
247250
return nil, err

bake/compose_test.go

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,7 @@ func TestValidateComposeFile(t *testing.T) {
611611
fn string
612612
dt []byte
613613
isCompose bool
614+
wantErr bool
614615
}{
615616
{
616617
name: "empty service",
@@ -620,6 +621,7 @@ services:
620621
foo:
621622
`),
622623
isCompose: true,
624+
wantErr: false,
623625
},
624626
{
625627
name: "build",
@@ -630,6 +632,7 @@ services:
630632
build: .
631633
`),
632634
isCompose: true,
635+
wantErr: false,
633636
},
634637
{
635638
name: "image",
@@ -640,6 +643,7 @@ services:
640643
image: nginx
641644
`),
642645
isCompose: true,
646+
wantErr: false,
643647
},
644648
{
645649
name: "unknown ext",
@@ -650,6 +654,7 @@ services:
650654
image: nginx
651655
`),
652656
isCompose: true,
657+
wantErr: false,
653658
},
654659
{
655660
name: "hcl",
@@ -660,13 +665,64 @@ target "default" {
660665
}
661666
`),
662667
isCompose: false,
668+
wantErr: false,
669+
},
670+
{
671+
name: "json",
672+
fn: "docker-bake.json",
673+
dt: []byte(`
674+
{
675+
"group": [
676+
{
677+
"targets": [
678+
"my-service"
679+
]
680+
}
681+
],
682+
"target": [
683+
{
684+
"context": ".",
685+
"dockerfile": "Dockerfile"
686+
}
687+
]
688+
}
689+
`),
690+
isCompose: false,
691+
wantErr: false,
692+
},
693+
{
694+
name: "json unknown ext",
695+
fn: "docker-bake.foo",
696+
dt: []byte(`
697+
{
698+
"group": [
699+
{
700+
"targets": [
701+
"my-service"
702+
]
703+
}
704+
],
705+
"target": [
706+
{
707+
"context": ".",
708+
"dockerfile": "Dockerfile"
709+
}
710+
]
711+
}
712+
`),
713+
isCompose: false,
714+
wantErr: true,
663715
},
664716
}
665717
for _, tt := range cases {
666718
t.Run(tt.name, func(t *testing.T) {
667719
isCompose, err := validateComposeFile(tt.dt, tt.fn)
668720
assert.Equal(t, tt.isCompose, isCompose)
669-
require.NoError(t, err)
721+
if tt.wantErr {
722+
require.Error(t, err)
723+
} else {
724+
require.NoError(t, err)
725+
}
670726
})
671727
}
672728
}
@@ -913,6 +969,14 @@ services:
913969
require.ErrorContains(t, err, `additional properties 'foo' not allowed`)
914970
}
915971

972+
func TestEmptyComposeFile(t *testing.T) {
973+
tmpdir := t.TempDir()
974+
chdir(t, tmpdir)
975+
_, err := ParseComposeFiles([]File{{Name: "compose.yml", Data: []byte(``)}})
976+
require.Error(t, err)
977+
require.ErrorContains(t, err, `empty compose file`) // https://github.com/compose-spec/compose-go/blob/a42e7579d813e64c0c1f598a666358bc0c0a0eb4/loader/loader.go#L542
978+
}
979+
916980
// chdir changes the current working directory to the named directory,
917981
// and then restore the original working directory at the end of the test.
918982
func chdir(t *testing.T, dir string) {

0 commit comments

Comments
 (0)