From cb7d240ffb7252586ca33ce9deccae18e6d077fe Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Wed, 10 Jan 2024 16:59:44 +0000 Subject: [PATCH] solver: ensure each ref in the result map is evaluated There was a typo in d709afdb96f539c49836f5874f7331a11287bee0. Signed-off-by: Justin Chadwell --- frontend/dockerfile/dockerfile_test.go | 42 ++++++++++++++++++++++++++ solver/llbsolver/provenance.go | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/frontend/dockerfile/dockerfile_test.go b/frontend/dockerfile/dockerfile_test.go index db73ad5741e1..7b3a0a225d34 100644 --- a/frontend/dockerfile/dockerfile_test.go +++ b/frontend/dockerfile/dockerfile_test.go @@ -112,6 +112,7 @@ var allTests = integration.TestFuncs( testCacheMultiPlatformImportExport, testOnBuildCleared, testFrontendUseForwardedSolveResults, + testFrontendEvaluate, testFrontendInputs, testErrorsSourceMap, testMultiArgs, @@ -4902,6 +4903,47 @@ COPY foo foo2 require.Equal(t, dt, []byte("data")) } +func testFrontendEvaluate(t *testing.T, sb integration.Sandbox) { + integration.SkipOnPlatform(t, "windows") + c, err := client.New(sb.Context(), sb.Address()) + require.NoError(t, err) + defer c.Close() + + dockerfile := []byte(` +FROM scratch +COPY badfile / +`) + dir := integration.Tmpdir(t, fstest.CreateFile("Dockerfile", dockerfile, 0600)) + + frontend := func(ctx context.Context, c gateway.Client) (*gateway.Result, error) { + _, err := c.Solve(ctx, gateway.SolveRequest{ + Frontend: "dockerfile.v0", + Evaluate: true, + }) + require.ErrorContains(t, err, `"/badfile": not found`) + + _, err = c.Solve(ctx, gateway.SolveRequest{ + Frontend: "dockerfile.v0", + FrontendOpt: map[string]string{ + "platform": "linux/amd64,linux/arm64", + }, + Evaluate: true, + }) + require.ErrorContains(t, err, `"/badfile": not found`) + + return nil, nil + } + + _, err = c.Build(sb.Context(), client.SolveOpt{ + Exports: []client.ExportEntry{}, + LocalDirs: map[string]string{ + dockerui.DefaultLocalNameDockerfile: dir, + dockerui.DefaultLocalNameContext: dir, + }, + }, "", frontend, nil) + require.NoError(t, err) +} + func testFrontendInputs(t *testing.T, sb integration.Sandbox) { integration.SkipOnPlatform(t, "windows") f := getFrontend(t, sb) diff --git a/solver/llbsolver/provenance.go b/solver/llbsolver/provenance.go index 0ad255fd807b..cf6f3d40c84c 100644 --- a/solver/llbsolver/provenance.go +++ b/solver/llbsolver/provenance.go @@ -180,7 +180,7 @@ func (b *provenanceBridge) Solve(ctx context.Context, req frontend.SolveRequest, } if req.Evaluate { err = res.EachRef(func(ref solver.ResultProxy) error { - _, err := res.Ref.Result(ctx) + _, err := ref.Result(ctx) return err }) }