diff --git a/bake/bake.go b/bake/bake.go index d9145d9f..59956925 100644 --- a/bake/bake.go +++ b/bake/bake.go @@ -951,7 +951,12 @@ func updateContext(t *build.Inputs, inp *Input) { if build.IsRemoteURL(t.ContextPath) { return } - st := llb.Scratch().File(llb.Copy(*inp.State, t.ContextPath, "/"), llb.WithCustomNamef("set context to %s", t.ContextPath)) + st := llb.Scratch().File( + llb.Copy(*inp.State, t.ContextPath, "/", &llb.CopyInfo{ + CopyDirContentsOnly: true, + }), + llb.WithCustomNamef("set context to %s", t.ContextPath), + ) t.ContextState = &st } @@ -1028,10 +1033,33 @@ func toBuildOpt(t *Target, inp *Input) (*build.Options, error) { dockerfilePath = *t.Dockerfile } - if !build.IsRemoteURL(contextPath) && !path.IsAbs(dockerfilePath) { - dockerfilePath = path.Join(contextPath, dockerfilePath) + bi := build.Inputs{ + ContextPath: contextPath, + DockerfilePath: dockerfilePath, + NamedContexts: toNamedContexts(t.Contexts), + } + if t.DockerfileInline != nil { + bi.DockerfileInline = *t.DockerfileInline + } + updateContext(&bi, inp) + if !build.IsRemoteURL(bi.ContextPath) && bi.ContextState == nil && !path.IsAbs(bi.DockerfilePath) { + bi.DockerfilePath = path.Join(bi.ContextPath, bi.DockerfilePath) + } + if strings.HasPrefix(bi.ContextPath, "cwd://") { + bi.ContextPath = path.Clean(strings.TrimPrefix(bi.ContextPath, "cwd://")) + } + for k, v := range bi.NamedContexts { + if strings.HasPrefix(v.Path, "cwd://") { + bi.NamedContexts[k] = build.NamedContext{Path: path.Clean(strings.TrimPrefix(v.Path, "cwd://"))} + } + } + + if err := validateContextsEntitlements(bi, inp); err != nil { + return nil, err } + t.Context = &bi.ContextPath + args := map[string]string{} for k, v := range t.Args { if v == nil { @@ -1061,30 +1089,6 @@ func toBuildOpt(t *Target, inp *Input) (*build.Options, error) { networkMode = *t.NetworkMode } - bi := build.Inputs{ - ContextPath: contextPath, - DockerfilePath: dockerfilePath, - NamedContexts: toNamedContexts(t.Contexts), - } - if t.DockerfileInline != nil { - bi.DockerfileInline = *t.DockerfileInline - } - updateContext(&bi, inp) - if strings.HasPrefix(bi.ContextPath, "cwd://") { - bi.ContextPath = path.Clean(strings.TrimPrefix(bi.ContextPath, "cwd://")) - } - for k, v := range bi.NamedContexts { - if strings.HasPrefix(v.Path, "cwd://") { - bi.NamedContexts[k] = build.NamedContext{Path: path.Clean(strings.TrimPrefix(v.Path, "cwd://"))} - } - } - - if err := validateContextsEntitlements(bi, inp); err != nil { - return nil, err - } - - t.Context = &bi.ContextPath - bo := &build.Options{ Inputs: bi, Tags: t.Tags,