Class: Ocak::PipelineExecutor

Inherits:
Object
  • Object
show all
Includes:
Planner, StepComments, Verification
Defined in:
lib/ocak/pipeline_executor.rb

Defined Under Namespace

Classes: StepContext

Constant Summary

Constants included from Planner

Ocak::Planner::STEP_PROMPTS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from StepComments

#post_step_comment, #post_step_completion_comment

Methods included from Planner

#build_step_prompt, #parse_planner_output, #plan_batches, #sequential_batches

Methods included from Verification

#lint_extensions_for, #run_final_checks, #run_scoped_lint, #run_verification_with_retry

Constructor Details

#initialize(config:, issues: nil, shutdown_check: nil) ⇒ PipelineExecutor

Returns a new instance of PipelineExecutor.



21
22
23
24
25
# File 'lib/ocak/pipeline_executor.rb', line 21

def initialize(config:, issues: nil, shutdown_check: nil)
  @config = config
  @issues = issues
  @shutdown_check = shutdown_check
end

Instance Attribute Details

#issues=(value) ⇒ Object (writeonly)

Sets the attribute issues

Parameters:

  • value

    the value to set the attribute issues to.



19
20
21
# File 'lib/ocak/pipeline_executor.rb', line 19

def issues=(value)
  @issues = value
end

Instance Method Details

#run_pipeline(issue_number, logger:, claude:, chdir: nil, skip_steps: [], complexity: 'full', steps: nil, verification_model: nil, post_start_comment: true, post_summary_comment: true) ⇒ Object

rubocop:disable Metrics/ParameterLists



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/ocak/pipeline_executor.rb', line 27

def run_pipeline(issue_number, logger:, claude:, chdir: nil, skip_steps: [], complexity: 'full', # rubocop:disable Metrics/ParameterLists
                 steps: nil, verification_model: nil,
                 post_start_comment: true, post_summary_comment: true)
  @logger = logger
  @custom_steps = steps
  @verification_model = verification_model
  @post_summary_comment = post_summary_comment
  chdir ||= @config.project_dir
  logger.info("=== Starting pipeline for issue ##{issue_number} (#{complexity}) ===")

  report = RunReport.new(complexity: complexity)
  state = build_initial_state(complexity, report)
  start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  post_pipeline_start_comment(issue_number, state) if post_start_comment

  failure = run_pipeline_steps(issue_number, state, logger: logger, claude: claude, chdir: chdir,
                                                    skip_steps: skip_steps)
  log_cost_summary(state[:total_cost], logger)

  return handle_interrupted(issue_number, state, report, logger) if state[:interrupted]
  return handle_failure(issue_number, state, failure, report, start_time) if failure

  failure = run_final_verification(issue_number, logger: logger, claude: claude, chdir: chdir)
  return handle_failure(issue_number, state, failure, report, start_time) if failure

  pipeline_state.delete(issue_number)
  finish_success(issue_number, state, report, start_time, logger)
end