mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 17:27:49 +08:00
bake: add tests for call and list
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
parent
233b869c63
commit
35313e865f
@ -16,7 +16,11 @@ Build from a file
|
|||||||
| Name | Type | Default | Description |
|
| Name | Type | Default | Description |
|
||||||
|:------------------------------------|:--------------|:--------|:----------------------------------------------------------------------------------------------------|
|
|:------------------------------------|:--------------|:--------|:----------------------------------------------------------------------------------------------------|
|
||||||
| [`--builder`](#builder) | `string` | | Override the configured builder instance |
|
| [`--builder`](#builder) | `string` | | Override the configured builder instance |
|
||||||
|
| `--call` | `string` | `build` | Set method for evaluating build (`check`, `outline`, `targets`) |
|
||||||
|
| `--check` | `bool` | | Shorthand for `--call=check` |
|
||||||
| [`-f`](#file), [`--file`](#file) | `stringArray` | | Build definition file |
|
| [`-f`](#file), [`--file`](#file) | `stringArray` | | Build definition file |
|
||||||
|
| `--list-targets` | `bool` | | List available targets |
|
||||||
|
| `--list-variables` | `bool` | | List defined variables |
|
||||||
| `--load` | `bool` | | Shorthand for `--set=*.output=type=docker` |
|
| `--load` | `bool` | | Shorthand for `--set=*.output=type=docker` |
|
||||||
| [`--metadata-file`](#metadata-file) | `string` | | Write build result metadata to a file |
|
| [`--metadata-file`](#metadata-file) | `string` | | Write build result metadata to a file |
|
||||||
| [`--no-cache`](#no-cache) | `bool` | | Do not use cache when building the image |
|
| [`--no-cache`](#no-cache) | `bool` | | Do not use cache when building the image |
|
||||||
|
165
tests/bake.go
165
tests/bake.go
@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/containerd/continuity/fs/fstest"
|
"github.com/containerd/continuity/fs/fstest"
|
||||||
@ -48,6 +49,10 @@ var bakeTests = []func(t *testing.T, sb integration.Sandbox){
|
|||||||
testBakeMetadataWarningsDedup,
|
testBakeMetadataWarningsDedup,
|
||||||
testBakeMultiExporters,
|
testBakeMultiExporters,
|
||||||
testBakeLoadPush,
|
testBakeLoadPush,
|
||||||
|
testListTargets,
|
||||||
|
testListVariables,
|
||||||
|
testBakeCallCheck,
|
||||||
|
testBakeCallCheckFlag,
|
||||||
}
|
}
|
||||||
|
|
||||||
func testBakeLocal(t *testing.T, sb integration.Sandbox) {
|
func testBakeLocal(t *testing.T, sb integration.Sandbox) {
|
||||||
@ -951,3 +956,163 @@ target "default" {
|
|||||||
|
|
||||||
// TODO: test metadata file when supported by multi exporters https://github.com/docker/buildx/issues/2181
|
// TODO: test metadata file when supported by multi exporters https://github.com/docker/buildx/issues/2181
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testListTargets(t *testing.T, sb integration.Sandbox) {
|
||||||
|
bakefile := []byte(`
|
||||||
|
target "foo" {
|
||||||
|
description = "This builds foo"
|
||||||
|
}
|
||||||
|
target "abc" {
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
dir := tmpdir(
|
||||||
|
t,
|
||||||
|
fstest.CreateFile("docker-bake.hcl", bakefile, 0600),
|
||||||
|
)
|
||||||
|
|
||||||
|
out, err := bakeCmd(
|
||||||
|
sb,
|
||||||
|
withDir(dir),
|
||||||
|
withArgs("--list-targets"),
|
||||||
|
)
|
||||||
|
require.NoError(t, err, out)
|
||||||
|
|
||||||
|
require.Equal(t, "TARGET\tDESCRIPTION\nabc\t\nfoo\tThis builds foo", strings.TrimSpace(out))
|
||||||
|
}
|
||||||
|
|
||||||
|
func testListVariables(t *testing.T, sb integration.Sandbox) {
|
||||||
|
bakefile := []byte(`
|
||||||
|
variable "foo" {
|
||||||
|
default = "bar"
|
||||||
|
description = "This is foo"
|
||||||
|
}
|
||||||
|
variable "abc" {
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
variable "def" {
|
||||||
|
}
|
||||||
|
target "default" {
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
dir := tmpdir(
|
||||||
|
t,
|
||||||
|
fstest.CreateFile("docker-bake.hcl", bakefile, 0600),
|
||||||
|
)
|
||||||
|
|
||||||
|
out, err := bakeCmd(
|
||||||
|
sb,
|
||||||
|
withDir(dir),
|
||||||
|
withArgs("--list-variables"),
|
||||||
|
)
|
||||||
|
require.NoError(t, err, out)
|
||||||
|
|
||||||
|
require.Equal(t, "VARIABLE\tVALUE\tDESCRIPTION\nabc\t\t<null>\t\ndef\t\t\t\nfoo\t\tbar\tThis is foo", strings.TrimSpace(out))
|
||||||
|
}
|
||||||
|
|
||||||
|
func testBakeCallCheck(t *testing.T, sb integration.Sandbox) {
|
||||||
|
dockerfile := []byte(`
|
||||||
|
FROM scratch
|
||||||
|
COPy foo /foo
|
||||||
|
`)
|
||||||
|
bakefile := []byte(`
|
||||||
|
target "validate" {
|
||||||
|
call = "check"
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
dir := tmpdir(
|
||||||
|
t,
|
||||||
|
fstest.CreateFile("docker-bake.hcl", bakefile, 0600),
|
||||||
|
fstest.CreateFile("Dockerfile", dockerfile, 0600),
|
||||||
|
)
|
||||||
|
|
||||||
|
out, err := bakeCmd(
|
||||||
|
sb,
|
||||||
|
withDir(dir),
|
||||||
|
withArgs("validate"),
|
||||||
|
)
|
||||||
|
require.Error(t, err, out)
|
||||||
|
|
||||||
|
require.Contains(t, out, "validate")
|
||||||
|
require.Contains(t, out, "ConsistentInstructionCasing")
|
||||||
|
}
|
||||||
|
|
||||||
|
func testBakeCallCheckFlag(t *testing.T, sb integration.Sandbox) {
|
||||||
|
dockerfile := []byte(`
|
||||||
|
FROM scratch
|
||||||
|
COPy foo /foo
|
||||||
|
`)
|
||||||
|
dockerfile2 := []byte(`
|
||||||
|
FROM scratch
|
||||||
|
COPY foo$BAR /foo
|
||||||
|
`)
|
||||||
|
bakefile := []byte(`
|
||||||
|
target "build" {
|
||||||
|
dockerfile = "a.Dockerfile"
|
||||||
|
}
|
||||||
|
|
||||||
|
target "another" {
|
||||||
|
dockerfile = "b.Dockerfile"
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
dir := tmpdir(
|
||||||
|
t,
|
||||||
|
fstest.CreateFile("docker-bake.hcl", bakefile, 0600),
|
||||||
|
fstest.CreateFile("a.Dockerfile", dockerfile, 0600),
|
||||||
|
fstest.CreateFile("b.Dockerfile", dockerfile2, 0600),
|
||||||
|
)
|
||||||
|
|
||||||
|
out, err := bakeCmd(
|
||||||
|
sb,
|
||||||
|
withDir(dir),
|
||||||
|
withArgs("build", "another", "--check"),
|
||||||
|
)
|
||||||
|
require.Error(t, err, out)
|
||||||
|
|
||||||
|
require.Contains(t, out, "build")
|
||||||
|
require.Contains(t, out, "ConsistentInstructionCasing")
|
||||||
|
|
||||||
|
require.Contains(t, out, "another")
|
||||||
|
require.Contains(t, out, "UndefinedVar")
|
||||||
|
|
||||||
|
out, err = bakeCmd(
|
||||||
|
sb,
|
||||||
|
withDir(dir),
|
||||||
|
withArgs("build", "another", "--call", "check,format=json"),
|
||||||
|
)
|
||||||
|
require.Error(t, err, out)
|
||||||
|
|
||||||
|
var res map[string]any
|
||||||
|
err = json.Unmarshal([]byte(out), &res)
|
||||||
|
require.NoError(t, err, out)
|
||||||
|
|
||||||
|
targets, ok := res["target"].(map[string]any)
|
||||||
|
require.True(t, ok)
|
||||||
|
|
||||||
|
build, ok := targets["build"].(map[string]any)
|
||||||
|
require.True(t, ok)
|
||||||
|
|
||||||
|
_, ok = build["build"]
|
||||||
|
require.True(t, ok)
|
||||||
|
|
||||||
|
check, ok := build["check"].(map[string]any)
|
||||||
|
require.True(t, ok)
|
||||||
|
|
||||||
|
warnings, ok := check["warnings"].([]any)
|
||||||
|
require.True(t, ok)
|
||||||
|
|
||||||
|
require.Len(t, warnings, 1)
|
||||||
|
|
||||||
|
another, ok := targets["another"].(map[string]any)
|
||||||
|
require.True(t, ok)
|
||||||
|
|
||||||
|
_, ok = another["build"]
|
||||||
|
require.True(t, ok)
|
||||||
|
|
||||||
|
check, ok = another["check"].(map[string]any)
|
||||||
|
require.True(t, ok)
|
||||||
|
|
||||||
|
warnings, ok = check["warnings"].([]any)
|
||||||
|
require.True(t, ok)
|
||||||
|
|
||||||
|
require.Len(t, warnings, 1)
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user