bake: fix compose files validation
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
@@ -242,6 +242,9 @@ func loadComposeFiles(cfgs []composetypes.ConfigFile, envs map[string]string, op
|
||||
filtered[key] = v
|
||||
}
|
||||
}
|
||||
if len(filtered) == 0 {
|
||||
return nil, errors.New("empty compose file")
|
||||
}
|
||||
|
||||
if err := composeschema.Validate(filtered); err != nil {
|
||||
return nil, err
|
||||
|
||||
+65
-1
@@ -611,6 +611,7 @@ func TestValidateComposeFile(t *testing.T) {
|
||||
fn string
|
||||
dt []byte
|
||||
isCompose bool
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "empty service",
|
||||
@@ -620,6 +621,7 @@ services:
|
||||
foo:
|
||||
`),
|
||||
isCompose: true,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "build",
|
||||
@@ -630,6 +632,7 @@ services:
|
||||
build: .
|
||||
`),
|
||||
isCompose: true,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "image",
|
||||
@@ -640,6 +643,7 @@ services:
|
||||
image: nginx
|
||||
`),
|
||||
isCompose: true,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "unknown ext",
|
||||
@@ -650,6 +654,7 @@ services:
|
||||
image: nginx
|
||||
`),
|
||||
isCompose: true,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "hcl",
|
||||
@@ -660,13 +665,64 @@ target "default" {
|
||||
}
|
||||
`),
|
||||
isCompose: false,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "json",
|
||||
fn: "docker-bake.json",
|
||||
dt: []byte(`
|
||||
{
|
||||
"group": [
|
||||
{
|
||||
"targets": [
|
||||
"my-service"
|
||||
]
|
||||
}
|
||||
],
|
||||
"target": [
|
||||
{
|
||||
"context": ".",
|
||||
"dockerfile": "Dockerfile"
|
||||
}
|
||||
]
|
||||
}
|
||||
`),
|
||||
isCompose: false,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "json unknown ext",
|
||||
fn: "docker-bake.foo",
|
||||
dt: []byte(`
|
||||
{
|
||||
"group": [
|
||||
{
|
||||
"targets": [
|
||||
"my-service"
|
||||
]
|
||||
}
|
||||
],
|
||||
"target": [
|
||||
{
|
||||
"context": ".",
|
||||
"dockerfile": "Dockerfile"
|
||||
}
|
||||
]
|
||||
}
|
||||
`),
|
||||
isCompose: false,
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range cases {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
isCompose, err := validateComposeFile(tt.dt, tt.fn)
|
||||
assert.Equal(t, tt.isCompose, isCompose)
|
||||
require.NoError(t, err)
|
||||
if tt.wantErr {
|
||||
require.Error(t, err)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -913,6 +969,14 @@ services:
|
||||
require.ErrorContains(t, err, `additional properties 'foo' not allowed`)
|
||||
}
|
||||
|
||||
func TestEmptyComposeFile(t *testing.T) {
|
||||
tmpdir := t.TempDir()
|
||||
chdir(t, tmpdir)
|
||||
_, err := ParseComposeFiles([]File{{Name: "compose.yml", Data: []byte(``)}})
|
||||
require.Error(t, err)
|
||||
require.ErrorContains(t, err, `empty compose file`) // https://github.com/compose-spec/compose-go/blob/a42e7579d813e64c0c1f598a666358bc0c0a0eb4/loader/loader.go#L542
|
||||
}
|
||||
|
||||
// chdir changes the current working directory to the named directory,
|
||||
// and then restore the original working directory at the end of the test.
|
||||
func chdir(t *testing.T, dir string) {
|
||||
|
||||
Reference in New Issue
Block a user