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 }