github.com/octohelm/wagon@v0.0.0-20240308040401-88662650dc0b/pkg/engine/daggerutil/do.go (about)

     1  package daggerutil
     2  
     3  import (
     4  	"os"
     5  	"os/signal"
     6  	"strings"
     7  	"syscall"
     8  
     9  	"dagger.io/dagger"
    10  	contextx "github.com/octohelm/x/context"
    11  	"golang.org/x/net/context"
    12  )
    13  
    14  var ClientContext = contextx.New[*dagger.Client]()
    15  
    16  func Do(ctx context.Context, do func(c *dagger.Client) error) (e error) {
    17  	return do(ClientContext.From(ctx))
    18  }
    19  
    20  func ConnectDo(ctx context.Context, do func(ctx context.Context) error) error {
    21  	runnerHost := os.Getenv("BUILDKIT_HOST")
    22  
    23  	if buildkitArch := os.Getenv("BUILDKIT_ARCH"); buildkitArch != "" {
    24  		runnerHost = os.Getenv("BUILDKIT_HOST_" + strings.ToUpper(buildkitArch))
    25  	} else {
    26  		runnerHost = os.Getenv("BUILDKIT_HOST")
    27  	}
    28  
    29  	engineConn, release, err := ConnectEngine(ctx, WithRunnerHost(runnerHost))
    30  	if err != nil {
    31  		return err
    32  	}
    33  	defer func() {
    34  		_ = release()
    35  	}()
    36  
    37  	c, err := dagger.Connect(ctx, dagger.WithConn(engineConn))
    38  	if err != nil {
    39  		return err
    40  	}
    41  	defer func() {
    42  		_ = c.Close()
    43  	}()
    44  
    45  	signalCh := make(chan os.Signal, 1)
    46  	signal.Notify(signalCh, syscall.SIGINT, syscall.SIGTERM)
    47  
    48  	newCtx, cancel := context.WithCancel(ctx)
    49  	go func() {
    50  		<-signalCh
    51  		cancel()
    52  	}()
    53  
    54  	return do(ClientContext.Inject(newCtx, c))
    55  }