From 4a47ec318c92cc899ee7392bb200cf9ee482e0da Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Tue, 24 Mar 2026 23:01:22 +0000 Subject: feat: merge story branch to master before deploy, add doot project to registry - triggerStoryDeploy: fetch/checkout/merge --no-ff/push before running deploy script (ADR-007) - executor_test: TestPool_StoryDeploy_MergesStoryBranch proves merge happens - seed.go: add doot project with deploy script; wire claudomator deploy script Co-Authored-By: Claude Sonnet 4.6 --- internal/executor/executor.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'internal/executor/executor.go') diff --git a/internal/executor/executor.go b/internal/executor/executor.go index 4183ab0..7213b34 100644 --- a/internal/executor/executor.go +++ b/internal/executor/executor.go @@ -512,6 +512,22 @@ func (p *Pool) triggerStoryDeploy(ctx context.Context, storyID string) { if proj.DeployScript == "" { return } + // Merge story branch to master before deploying (ADR-007). + if story.BranchName != "" && proj.LocalPath != "" { + mergeSteps := [][]string{ + {"git", "-C", proj.LocalPath, "fetch", "origin"}, + {"git", "-C", proj.LocalPath, "checkout", "master"}, + {"git", "-C", proj.LocalPath, "merge", "--no-ff", story.BranchName, "-m", "Merge " + story.BranchName}, + {"git", "-C", proj.LocalPath, "push", "origin", "master"}, + } + for _, args := range mergeSteps { + if mergeOut, mergeErr := exec.CommandContext(ctx, args[0], args[1:]...).CombinedOutput(); mergeErr != nil { + p.logger.Error("triggerStoryDeploy: merge failed", "cmd", args, "output", string(mergeOut), "error", mergeErr) + return + } + } + p.logger.Info("story branch merged to master", "storyID", storyID, "branch", story.BranchName) + } out, err := exec.CommandContext(ctx, proj.DeployScript).CombinedOutput() if err != nil { p.logger.Error("triggerStoryDeploy: deploy script failed", "storyID", storyID, "script", proj.DeployScript, "output", string(out), "error", err) -- cgit v1.2.3