From 5fccaa636cd400cd7809a1d2e4f254c3fff58218 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Sun, 15 Mar 2026 06:29:43 +0000 Subject: feat: run build (Makefile, gradlew, or go build) before sandbox autocommit --- internal/executor/claude.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'internal/executor/claude.go') 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"), -- cgit v1.2.3