56 lines
1 KiB
Go
56 lines
1 KiB
Go
|
//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
|
||
|
}
|