Cletus plugin kit: rules for coding agents, specification, host API, style guide, worker SDK and cletus-plugin tool
This commit is contained in:
commit
9b19d3a8be
41 files changed
+4121
No files matched your search
@@ -0,0 +1,51 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
// goEnv is the environment every build and test runs with: no cgo, no
|
||||
// enclosing go.work, the plugin's vendor folder.
|
||||
func goEnv(goos, goarch string) []string {
|
||||
env := append(os.Environ(), "CGO_ENABLED=0", "GOWORK=off")
|
||||
if goos != "" {
|
||||
env = append(env, "GOOS="+goos, "GOARCH="+goarch)
|
||||
}
|
||||
return env
|
||||
}
|
||||
|
||||
// goRun runs a go command in dir and returns its combined output.
|
||||
func goRun(dir string, env []string, args ...string) (string, error) {
|
||||
cmd := exec.Command("go", args...)
|
||||
cmd.Dir = dir
|
||||
cmd.Env = env
|
||||
var out bytes.Buffer
|
||||
cmd.Stdout = &out
|
||||
cmd.Stderr = &out
|
||||
err := cmd.Run()
|
||||
return out.String(), err
|
||||
}
|
||||
|
||||
// buildWorker builds ./cmd/worker for this machine into a temporary folder.
|
||||
func buildWorker(dir string) (string, func(), error) {
|
||||
tmp, err := os.MkdirTemp("", "cletus-plugin-")
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
cleanup := func() { os.RemoveAll(tmp) }
|
||||
name := "worker"
|
||||
if runtime.GOOS == "windows" {
|
||||
name += ".exe"
|
||||
}
|
||||
bin := filepath.Join(tmp, name)
|
||||
if out, err := goRun(dir, goEnv("", ""), "build", "-trimpath", "-o", bin, "./cmd/worker"); err != nil {
|
||||
cleanup()
|
||||
return "", nil, fmt.Errorf("the worker doesn't build:\n%s", out)
|
||||
}
|
||||
return bin, cleanup, nil
|
||||
}
|
||||
Reference in new issue
Block a user