From 2e3058e62cb02a70cbd70ed6ce8def6b6dc245c3 Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Tue, 20 Nov 2018 18:13:15 -0800 Subject: [PATCH] dockerfile: allow symlinks on reading Dockerfile Signed-off-by: Tonis Tiigi --- frontend/dockerfile/builder/build.go | 4 ++-- frontend/dockerfile/dockerfile_test.go | 29 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/frontend/dockerfile/builder/build.go b/frontend/dockerfile/builder/build.go index 7e082df0..e5df49e2 100644 --- a/frontend/dockerfile/builder/build.go +++ b/frontend/dockerfile/builder/build.go @@ -99,7 +99,7 @@ func Build(ctx context.Context, c client.Client) (*client.Result, error) { name := "load build definition from " + filename src := llb.Local(LocalNameDockerfile, - llb.IncludePatterns([]string{filename}), + llb.FollowPaths([]string{filename}), llb.SessionID(c.BuildOpts().SessionID), llb.SharedKeyHint(defaultDockerfileName), dockerfile2llb.WithInternalName(name), @@ -189,7 +189,7 @@ func Build(ctx context.Context, c client.Client) (*client.Result, error) { if dockerignoreState == nil { st := llb.Local(LocalNameContext, llb.SessionID(c.BuildOpts().SessionID), - llb.IncludePatterns([]string{dockerignoreFilename}), + llb.FollowPaths([]string{dockerignoreFilename}), llb.SharedKeyHint(dockerignoreFilename), dockerfile2llb.WithInternalName("load "+dockerignoreFilename), ) diff --git a/frontend/dockerfile/dockerfile_test.go b/frontend/dockerfile/dockerfile_test.go index f6adb8ad..7df29855 100644 --- a/frontend/dockerfile/dockerfile_test.go +++ b/frontend/dockerfile/dockerfile_test.go @@ -80,6 +80,7 @@ var allTests = []integration.Test{ testCopyThroughSymlinkMultiStage, testCopyChownCreateDest, testEmptyDestDir, + testSymlinkedDockerfile, } var opts []integration.TestOpt @@ -151,6 +152,34 @@ RUN [ "$(cat testfile)" == "contents0" ] require.NoError(t, err) } +func testSymlinkedDockerfile(t *testing.T, sb integration.Sandbox) { + f := getFrontend(t, sb) + + dockerfile := []byte(` +FROM scratch +ENV foo bar +`) + + dir, err := tmpdir( + fstest.CreateFile("Dockerfile.web", dockerfile, 0600), + fstest.Symlink("Dockerfile.web", "Dockerfile"), + ) + require.NoError(t, err) + defer os.RemoveAll(dir) + + c, err := client.New(context.TODO(), sb.Address()) + require.NoError(t, err) + defer c.Close() + + _, err = f.Solve(context.TODO(), c, client.SolveOpt{ + LocalDirs: map[string]string{ + builder.LocalNameDockerfile: dir, + builder.LocalNameContext: dir, + }, + }, nil) + require.NoError(t, err) +} + func testCopyChownCreateDest(t *testing.T, sb integration.Sandbox) { f := getFrontend(t, sb)