github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/tests/workers/docker.go (about) 1 package workers 2 3 import ( 4 "context" 5 "os" 6 "os/exec" 7 8 "github.com/moby/buildkit/identity" 9 "github.com/moby/buildkit/util/testutil/integration" 10 bkworkers "github.com/moby/buildkit/util/testutil/workers" 11 "github.com/pkg/errors" 12 ) 13 14 func InitDockerWorker() { 15 integration.Register(&dockerWorker{ 16 id: "docker", 17 }) 18 integration.Register(&dockerWorker{ 19 id: "docker+containerd", 20 containerdSnapshotter: true, 21 }) 22 } 23 24 type dockerWorker struct { 25 id string 26 containerdSnapshotter bool 27 unsupported []string 28 } 29 30 func (c dockerWorker) Name() string { 31 return c.id 32 } 33 34 func (c dockerWorker) Rootless() bool { 35 return false 36 } 37 38 func (c *dockerWorker) NetNSDetached() bool { 39 return false 40 } 41 42 func (c dockerWorker) New(ctx context.Context, cfg *integration.BackendConfig) (b integration.Backend, cl func() error, err error) { 43 moby := bkworkers.Moby{ 44 ID: c.id, 45 ContainerdSnapshotter: c.containerdSnapshotter, 46 } 47 bk, bkclose, err := moby.New(ctx, cfg) 48 if err != nil { 49 return bk, cl, err 50 } 51 52 name := "integration-" + identity.NewID() 53 cmd := exec.Command("docker", "context", "create", 54 name, 55 "--docker", "host="+bk.DockerAddress(), 56 ) 57 cmd.Env = append(os.Environ(), "BUILDX_CONFIG=/tmp/buildx-"+name) 58 if err := cmd.Run(); err != nil { 59 return bk, cl, errors.Wrapf(err, "failed to create buildx instance %s", name) 60 } 61 62 cl = func() error { 63 err := bkclose() 64 cmd := exec.Command("docker", "context", "rm", "-f", name) 65 if err1 := cmd.Run(); err == nil { 66 err = errors.Wrapf(err1, "failed to remove buildx instance %s", name) 67 } 68 return err 69 } 70 71 return &backend{ 72 builder: name, 73 context: name, 74 unsupportedFeatures: c.unsupported, 75 }, cl, nil 76 } 77 78 func (c dockerWorker) Close() error { 79 return nil 80 }