mirror of
https://github.com/moby/moby.git
synced 2026-08-12 12:15:08 +00:00
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 <djordje.lukic@docker.com>
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
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"
|
|
)
|
|
|
|
// ContainerdWorker is a local worker instance with dedicated snapshotter, cache, and so on.
|
|
type ContainerdWorker struct {
|
|
*base.Worker
|
|
callbacks exporter.BuildkitCallbacks
|
|
}
|
|
|
|
// NewContainerdWorker instantiates a local worker.
|
|
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
|
|
}
|
|
|
|
// Exporter returns exporter by name
|
|
func (w *ContainerdWorker) Exporter(name string, sm *session.Manager) (bkexporter.Exporter, error) {
|
|
switch name {
|
|
case exporter.Moby:
|
|
exp, err := w.Worker.Exporter(client.ExporterImage, sm)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return exporter.NewWrapper(exp, w.callbacks)
|
|
default:
|
|
return w.Worker.Exporter(name, sm)
|
|
}
|
|
}
|