summaryrefslogtreecommitdiff
path: root/internal/executor/executor.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/executor/executor.go')
-rw-r--r--internal/executor/executor.go16
1 files changed, 16 insertions, 0 deletions
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)