* Add Windows stub for orphan cleanup * Fix account switch tests on Windows * Make query session events test portable * Disable beads daemon in query session events test * Add Windows bd stubs for sling tests * Make expandOutputPath test OS-agnostic * Make role_agents test Windows-friendly * Make config path tests OS-agnostic * Make HealthCheckStateFile test OS-agnostic * Skip orphan process check on Windows * Normalize sparse checkout detail paths * Make dog path tests OS-agnostic * Fix bare repo refspec config on Windows * Add Windows process detection for locks * Add Windows CI workflow * Make mail path tests OS-agnostic * Skip plugin file mode test on Windows * Skip tmux-dependent polecat tests on Windows * Normalize polecat paths and AGENTS.md content * Make beads init failure test Windows-friendly * Skip rig agent bead init test on Windows * Make XDG path tests OS-agnostic * Make exec tests portable on Windows * Adjust atomic write tests for Windows * Make wisp tests Windows-friendly * Make workspace find tests OS-agnostic * Fix Windows rig add integration test * Make sling var logging Windows-friendly * Fix sling attached molecule update ordering --------- Co-authored-by: Johann Dirry <johann.dirry@microsea.at>
62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package cmd
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"runtime"
|
|
"testing"
|
|
)
|
|
|
|
// buildGT builds the gt binary and returns its path.
|
|
// It caches the build across tests in the same run.
|
|
var cachedGTBinary string
|
|
|
|
func buildGT(t *testing.T) string {
|
|
t.Helper()
|
|
|
|
if cachedGTBinary != "" {
|
|
// Verify cached binary still exists
|
|
if _, err := os.Stat(cachedGTBinary); err == nil {
|
|
return cachedGTBinary
|
|
}
|
|
// Binary was cleaned up, rebuild
|
|
cachedGTBinary = ""
|
|
}
|
|
|
|
// Find project root (where go.mod is)
|
|
wd, err := os.Getwd()
|
|
if err != nil {
|
|
t.Fatalf("failed to get working directory: %v", err)
|
|
}
|
|
|
|
// Walk up to find go.mod
|
|
projectRoot := wd
|
|
for {
|
|
if _, err := os.Stat(filepath.Join(projectRoot, "go.mod")); err == nil {
|
|
break
|
|
}
|
|
parent := filepath.Dir(projectRoot)
|
|
if parent == projectRoot {
|
|
t.Fatal("could not find project root (go.mod)")
|
|
}
|
|
projectRoot = parent
|
|
}
|
|
|
|
// Build gt binary to a persistent temp location (not per-test)
|
|
tmpDir := os.TempDir()
|
|
binaryName := "gt-integration-test"
|
|
if runtime.GOOS == "windows" {
|
|
binaryName += ".exe"
|
|
}
|
|
tmpBinary := filepath.Join(tmpDir, binaryName)
|
|
cmd := exec.Command("go", "build", "-o", tmpBinary, "./cmd/gt")
|
|
cmd.Dir = projectRoot
|
|
if output, err := cmd.CombinedOutput(); err != nil {
|
|
t.Fatalf("failed to build gt: %v\nOutput: %s", err, output)
|
|
}
|
|
|
|
cachedGTBinary = tmpBinary
|
|
return tmpBinary
|
|
}
|