summaryrefslogtreecommitdiff
path: root/internal/executor
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-03-26 08:28:02 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-03-26 08:28:02 +0000
commit6dcd26901b862aa680a1cb501f24183bcf854abc (patch)
tree9fa672be79289b3a4388716fecc355f7a333dc10 /internal/executor
parent8bb9ac1328fc4f6b8d8e7aae0d6ea706e502c245 (diff)
fix: auto-create story branch if missing at clone time
If git checkout of the story branch fails (branch never pushed to bare repo), create it from HEAD and push to origin instead of hard-failing the task. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/executor')
-rw-r--r--internal/executor/container.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/internal/executor/container.go b/internal/executor/container.go
index 95717b4..d90a273 100644
--- a/internal/executor/container.go
+++ b/internal/executor/container.go
@@ -133,7 +133,14 @@ func (r *ContainerRunner) Run(ctx context.Context, t *task.Task, e *storage.Exec
if storyBranch != "" {
r.Logger.Info("checking out story branch", "branch", storyBranch)
if out, err := r.command(ctx, "git", "-C", workspace, "checkout", storyBranch).CombinedOutput(); err != nil {
- return fmt.Errorf("git checkout story branch %q failed: %w\n%s", storyBranch, err, string(out))
+ // Branch doesn't exist in the remote yet — create it from HEAD and push.
+ r.Logger.Warn("story branch not found, creating from HEAD", "branch", storyBranch)
+ if out2, err2 := r.command(ctx, "git", "-C", workspace, "checkout", "-b", storyBranch).CombinedOutput(); err2 != nil {
+ return fmt.Errorf("git checkout story branch %q failed: %w\n%s\ncreate attempt: %s", storyBranch, err, string(out), string(out2))
+ }
+ if out2, err2 := r.command(ctx, "git", "-C", workspace, "push", "origin", storyBranch).CombinedOutput(); err2 != nil {
+ r.Logger.Warn("push of auto-created story branch failed", "branch", storyBranch, "error", err2, "output", string(out2))
+ }
}
}
if err = os.Chmod(workspace, 0755); err != nil {