spruce/dagger/dagger.go

56 lines
1 KiB
Go
Raw Normal View History

2023-03-09 23:18:54 +00:00
//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
}