//go:build dagger package main import ( "context" "fmt" "log" "os" "path/filepath" "dagger.io/dagger" ) func main() { if err := build(context.Background()); err != nil { log.Printf("ERROR: %v", err) os.Exit(1) } } func build(ctx context.Context) error { log.Println("Building with Dagger.") client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stdout)) if err != nil { return fmt.Errorf("unable to create the dagger client; %w", err) } defer client.Close() rootDir, err := filepath.Abs(".") if err != nil { return err } image := "golang:1.20" containerWorkspace := "/workspace" builder := client.Container(). From(image). WithMountedDirectory(containerWorkspace, client.Host().Directory(rootDir)). WithWorkdir(containerWorkspace). WithEnvVariable("CGO_ENABLED", "0"). WithEnvVariable("GOOS", "linux"). WithEnvVariable("GOARCH", "amd64"). WithExec([]string{"make", "clean", "spruce"}) _, err = builder.Stdout(ctx) if err != nil { return fmt.Errorf("unable to build the binary; %w", err) } return nil }