Class: Makit::Cli::PipelineRunCommand

Inherits:
Clamp::Command
  • Object
show all
Defined in:
lib/makit/cli/pipeline_commands.rb

Overview

Command to run GitLab CI pipelines

Instance Method Summary collapse

Instance Method Details

#executeObject



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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/makit/cli/pipeline_commands.rb', line 27

def execute
  # Disable color if requested

  String.disable_colorization = true if no_color?

  # Check if pipeline file exists

  unless File.exist?(file)
    error "Pipeline file '#{file}' not found"
    exit(1)
  end

  # Parse variables

  variables = parse_variables

  # Load and parse pipeline

  puts "Loading pipeline from #{file}..." if verbose?
  begin
    pipeline_content = File.read(file)
    pipeline = Makit::Gitlab::Pipeline.parse_yaml(pipeline_content)
  rescue StandardError => e
    error "Failed to parse pipeline file: #{e.message}"
    exit(1)
  end

  # Validate pipeline

  validation_result = pipeline.validate
  unless validation_result[:is_valid]
    error "Pipeline validation failed:"
    validation_result[:errors].each { |err| error "  - #{err}" }
    exit(1)
  end

  # Show warnings if any

  if validation_result[:warnings].any?
    warning "Pipeline warnings:"
    validation_result[:warnings].each { |warn| warning "  - #{warn}" }
    puts
  end

  # Show pipeline info

  show_pipeline_info(pipeline)

  # Execute pipeline

  puts "\nExecuting pipeline..." unless dry_run?
  puts "Dry run mode - no actual execution will occur" if dry_run?

  start_time = Time.now
  result = pipeline.execute_pipeline(
    variables: variables,
    working_directory: working_directory,
    podman_executable: podman_executable,
    dry_run: dry_run?
  )
  end_time = Time.now

  # Display results

  display_execution_result(result, start_time, end_time)

  # Exit with appropriate code

  success = if result.is_a?(Hash)
    result[:success]
  else
    result.success
  end
  exit(success ? 0 : 1)
end