From e75ac22ba609062a88f64382ed4cff616ad8e309 Mon Sep 17 00:00:00 2001 From: "Jonathan A. Sternberg" Date: Mon, 24 Feb 2025 10:09:02 -0600 Subject: [PATCH] buildflags: skip empty cache entries when parsing Broken in 11c84973ef104e48eb88a41b5b23d6a559efe868. The section to skip an empty input was accidentally removed when some code was refactored to fix a separate issue. This skips empty cache entries which allows disabling the `cache-from` and `cache-to` entries from the command line overrides. Signed-off-by: Jonathan A. Sternberg --- tests/bake.go | 43 ++++++++++++++++++++++++++++++++++++++++ util/buildflags/cache.go | 4 ++++ 2 files changed, 47 insertions(+) diff --git a/tests/bake.go b/tests/bake.go index f106f21b..4935e115 100644 --- a/tests/bake.go +++ b/tests/bake.go @@ -38,6 +38,7 @@ func bakeCmd(sb integration.Sandbox, opts ...cmdOpt) (string, error) { var bakeTests = []func(t *testing.T, sb integration.Sandbox){ testBakePrint, testBakePrintSensitive, + testBakePrintOverrideEmpty, testBakeLocal, testBakeLocalMulti, testBakeRemote, @@ -286,6 +287,47 @@ RUN echo "Hello ${HELLO}" } } +func testBakePrintOverrideEmpty(t *testing.T, sb integration.Sandbox) { + dockerfile := []byte(` +FROM scratch +COPY foo /foo + `) + bakefile := []byte(` +target "default" { + cache-to = ["type=gha,mode=min,scope=integration-tests"] +} +`) + dir := tmpdir( + t, + fstest.CreateFile("docker-bake.hcl", bakefile, 0600), + fstest.CreateFile("Dockerfile", dockerfile, 0600), + fstest.CreateFile("foo", []byte("foo"), 0600), + ) + + cmd := buildxCmd(sb, withDir(dir), withArgs("bake", "--print", "--set", "*.cache-to=")) + stdout := bytes.Buffer{} + stderr := bytes.Buffer{} + cmd.Stdout = &stdout + cmd.Stderr = &stderr + require.NoError(t, cmd.Run(), stdout.String(), stderr.String()) + + require.JSONEq(t, `{ + "group": { + "default": { + "targets": [ + "default" + ] + } + }, + "target": { + "default": { + "context": ".", + "dockerfile": "Dockerfile" + } + } +}`, stdout.String()) +} + func testBakeLocal(t *testing.T, sb integration.Sandbox) { dockerfile := []byte(` FROM scratch @@ -871,6 +913,7 @@ target "default" { }) } } + func testBakeSetNonExistingOutsideNoParallel(t *testing.T, sb integration.Sandbox) { for _, ent := range []bool{true, false} { t.Run(fmt.Sprintf("ent=%v", ent), func(t *testing.T) { diff --git a/util/buildflags/cache.go b/util/buildflags/cache.go index e9256900..f9c99034 100644 --- a/util/buildflags/cache.go +++ b/util/buildflags/cache.go @@ -175,6 +175,10 @@ func ParseCacheEntry(in []string) (CacheOptions, error) { opts := make(CacheOptions, 0, len(in)) for _, in := range in { + if in == "" { + continue + } + if !strings.Contains(in, "=") { // This is ref only format. Each field in the CSV is its own entry. fields, err := csvvalue.Fields(in, nil)