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  }