dagger-helm/shuttletask/format.go

85 lines
1.7 KiB
Go

package main
import (
"context"
"fmt"
"log"
"os"
"dagger.io/dagger"
)
const GOLINES_CONTAINER = "golang"
const GOLINES_VERSION = "github.com/segmentio/golines@v0.9.0"
type Opts struct {
Path string
IgnoredFiles []string
}
type OptsFunc func(ctx context.Context, o *Opts) error
func withPath(path string) OptsFunc {
return func(ctx context.Context, o *Opts) error {
o.Path = path
return nil
}
}
func format(ctx context.Context, optsFuncs ...OptsFunc) error {
opts := &Opts{
Path: ".",
IgnoredFiles: []string{
".shuttle/",
},
}
for _, f := range optsFuncs {
err := f(ctx, opts)
if err != nil {
return fmt.Errorf("failed to apply options: %v", err)
}
}
log.Println("dagger")
log.Printf("%+v", os.Environ())
client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stderr))
if err != nil {
return fmt.Errorf("could not connect to dagger: %v", err)
}
hostDir := client.Host().
Directory(opts.Path, dagger.HostDirectoryOpts{Exclude: opts.IgnoredFiles})
golines := client.Container().
From(GOLINES_CONTAINER).
WithExec([]string{"go", "install", GOLINES_VERSION}).
WithDirectory("/mnt/app", hostDir).
WithExec([]string{"golines", "-w", "/mnt/app"})
exitCode, err := golines.ExitCode(ctx)
if err != nil {
return fmt.Errorf("could not format code: %v", err)
}
if exitCode != 0 {
return fmt.Errorf("formatting failed with exitcode: %d", exitCode)
}
exported, err := golines.Directory("/mnt/app").Export(ctx, opts.Path)
if err != nil {
return fmt.Errorf("failed to export to host: %v", err)
}
if !exported {
return fmt.Errorf("failed to export, see stderr for reason")
}
return nil
}
func Format(ctx context.Context) error {
return format(ctx)
}