diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-03-15 06:29:43 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-03-15 09:19:43 +0000 |
| commit | 5fccaa636cd400cd7809a1d2e4f254c3fff58218 (patch) | |
| tree | 003126cbc82fbd0072e8fc9f61bb0c88d88b7d94 /internal/executor/claude.go | |
| parent | d0ed3694246ab8d352166f098be5d642e0dbe44d (diff) | |
feat: run build (Makefile, gradlew, or go build) before sandbox autocommit
Diffstat (limited to 'internal/executor/claude.go')
| -rw-r--r-- | internal/executor/claude.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/internal/executor/claude.go b/internal/executor/claude.go index 4d92cd0..f8b0ac2 100644 --- a/internal/executor/claude.go +++ b/internal/executor/claude.go @@ -292,6 +292,29 @@ func teardownSandbox(projectDir, sandboxDir, startHEAD string, logger *slog.Logg } if len(strings.TrimSpace(string(out))) > 0 { logger.Info("autocommitting uncommitted changes", "sandbox", sandboxDir) + + // Run build before autocommitting. + if _, err := os.Stat(filepath.Join(sandboxDir, "Makefile")); err == nil { + logger.Info("running 'make build' before autocommit", "sandbox", sandboxDir) + if buildOut, buildErr := exec.Command("make", "-C", sandboxDir, "build").CombinedOutput(); buildErr != nil { + return fmt.Errorf("build failed before autocommit: %w\n%s", buildErr, buildOut) + } + } else if _, err := os.Stat(filepath.Join(sandboxDir, "gradlew")); err == nil { + logger.Info("running './gradlew build' before autocommit", "sandbox", sandboxDir) + cmd := exec.Command("./gradlew", "build") + cmd.Dir = sandboxDir + if buildOut, buildErr := cmd.CombinedOutput(); buildErr != nil { + return fmt.Errorf("build failed before autocommit: %w\n%s", buildErr, buildOut) + } + } else if _, err := os.Stat(filepath.Join(sandboxDir, "go.mod")); err == nil { + logger.Info("running 'go build ./...' before autocommit", "sandbox", sandboxDir) + cmd := exec.Command("go", "build", "./...") + cmd.Dir = sandboxDir + if buildOut, buildErr := cmd.CombinedOutput(); buildErr != nil { + return fmt.Errorf("build failed before autocommit: %w\n%s", buildErr, buildOut) + } + } + cmds := [][]string{ gitSafe("-C", sandboxDir, "add", "-A"), gitSafe("-C", sandboxDir, "commit", "-m", "chore: autocommit uncommitted changes"), |
