From 623af652080fffb788bd5eeab91edbcd795ec00e Mon Sep 17 00:00:00 2001 From: Djordje Lukic Date: Mon, 30 Dec 2024 23:34:57 +0100 Subject: [PATCH] Use the roundtripper during build The roundtripper is responsible for giving back the build context when it comes from a tar directly. So we add it to the source manager of the containerd worker. Signed-off-by: Djordje Lukic --- builder/builder-next/controller.go | 2 +- builder/builder-next/worker/containerdworker.go | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/builder/builder-next/controller.go b/builder/builder-next/controller.go index cd0e234da0..bed62eb543 100644 --- a/builder/builder-next/controller.go +++ b/builder/builder-next/controller.go @@ -148,7 +148,7 @@ func newSnapshotterController(ctx context.Context, rt http.RoundTripper, opt Opt } wo.Executor = exec - w, err := mobyworker.NewContainerdWorker(ctx, wo, opt.Callbacks) + w, err := mobyworker.NewContainerdWorker(ctx, wo, opt.Callbacks, rt) if err != nil { return nil, err } diff --git a/builder/builder-next/worker/containerdworker.go b/builder/builder-next/worker/containerdworker.go index 848932d3fa..f4b98d614c 100644 --- a/builder/builder-next/worker/containerdworker.go +++ b/builder/builder-next/worker/containerdworker.go @@ -2,11 +2,14 @@ package worker import ( "context" + nethttp "net/http" + "github.com/containerd/log" "github.com/docker/docker/builder/builder-next/exporter" "github.com/moby/buildkit/client" bkexporter "github.com/moby/buildkit/exporter" "github.com/moby/buildkit/session" + "github.com/moby/buildkit/source/http" "github.com/moby/buildkit/worker/base" ) @@ -17,11 +20,21 @@ type ContainerdWorker struct { } // NewContainerdWorker instantiates a local worker. -func NewContainerdWorker(ctx context.Context, wo base.WorkerOpt, callbacks exporter.BuildkitCallbacks) (*ContainerdWorker, error) { +func NewContainerdWorker(ctx context.Context, wo base.WorkerOpt, callbacks exporter.BuildkitCallbacks, rt nethttp.RoundTripper) (*ContainerdWorker, error) { bw, err := base.NewWorker(ctx, wo) if err != nil { return nil, err } + hs, err := http.NewSource(http.Opt{ + CacheAccessor: bw.CacheManager(), + Transport: rt, + }) + if err == nil { + bw.SourceManager.Register(hs) + } else { + log.G(ctx).Warnf("Could not register builder http source: %s", err) + } + return &ContainerdWorker{Worker: bw, callbacks: callbacks}, nil }