Class: Ocak::MergeManager

Inherits:
Object
  • Object
show all
Defined in:
lib/ocak/merge_manager.rb

Instance Method Summary collapse

Constructor Details

#initialize(config:, claude:, logger:, watch: nil) ⇒ MergeManager

Returns a new instance of MergeManager.



8
9
10
11
12
13
# File 'lib/ocak/merge_manager.rb', line 8

def initialize(config:, claude:, logger:, watch: nil)
  @config = config
  @claude = claude
  @logger = logger
  @watch = watch
end

Instance Method Details

#merge(issue_number, worktree) ⇒ Object

Rebase, test, push, then let the merger agent create PR + merge + close issue.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/ocak/merge_manager.rb', line 16

def merge(issue_number, worktree)
  @logger.info("Starting merge for issue ##{issue_number}")

  commit_uncommitted_changes(issue_number, worktree)

  unless rebase_onto_main(worktree)
    @logger.error("Rebase failed for issue ##{issue_number}")
    return false
  end

  unless verify_tests(worktree)
    @logger.error("Tests failed after rebase for issue ##{issue_number}")
    return false
  end

  unless push_branch(worktree)
    @logger.error("Push failed for issue ##{issue_number}")
    return false
  end

  result = @claude.run_agent(
    'merger',
    "Create a PR, merge it, and close issue ##{issue_number}. Branch: #{worktree.branch}",
    chdir: worktree.path
  )

  if result.success?
    @logger.info("Issue ##{issue_number} merged successfully")
    true
  else
    @logger.error("Merger agent failed for issue ##{issue_number}")
    false
  end
end