github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/tests/workers/remote.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 InitRemoteWorker() { 15 integration.Register(&remoteWorker{ 16 id: "remote", 17 }) 18 } 19 20 type remoteWorker struct { 21 id string 22 unsupported []string 23 } 24 25 func (w remoteWorker) Name() string { 26 return w.id 27 } 28 29 func (w remoteWorker) Rootless() bool { 30 return false 31 } 32 33 func (w remoteWorker) NetNSDetached() bool { 34 return false 35 } 36 37 func (w remoteWorker) New(ctx context.Context, cfg *integration.BackendConfig) (b integration.Backend, cl func() error, err error) { 38 oci := bkworkers.OCI{ID: w.id} 39 bk, bkclose, err := oci.New(ctx, cfg) 40 if err != nil { 41 return bk, cl, err 42 } 43 44 name := "integration-remote-" + identity.NewID() 45 cmd := exec.Command("buildx", "create", 46 "--bootstrap", 47 "--name="+name, 48 "--driver=remote", 49 bk.Address(), 50 ) 51 cmd.Env = append(os.Environ(), "BUILDX_CONFIG=/tmp/buildx-"+name) 52 if err := cmd.Run(); err != nil { 53 return nil, nil, errors.Wrapf(err, "failed to create buildx instance %s", name) 54 } 55 56 cl = func() error { 57 err := bkclose() 58 cmd := exec.Command("buildx", "rm", "-f", name) 59 if err1 := cmd.Run(); err == nil { 60 err = err1 61 } 62 return err 63 } 64 65 return &backend{ 66 builder: name, 67 unsupportedFeatures: w.unsupported, 68 }, cl, nil 69 } 70 71 func (w remoteWorker) Close() error { 72 return nil 73 }