class SleepingKingStudios::Tasks::Ci::StepsTask

Thor task for running each step in the CI suite and generating a report.

Public Class Methods

description() click to toggle source
# File lib/sleeping_king_studios/tasks/ci/steps_task.rb, line 12
def self.description
  'Runs the configured steps for your test suite.'
end

Public Instance Methods

call(*files) click to toggle source
# File lib/sleeping_king_studios/tasks/ci/steps_task.rb, line 30
def call *files
  results = super

  report results

  report_failures results

  results
end

Private Instance Methods

ci_steps() click to toggle source
# File lib/sleeping_king_studios/tasks/ci/steps_task.rb, line 42
def ci_steps
  SleepingKingStudios::Tasks.configuration.ci.steps_with_options
end
failing?(step) click to toggle source
# File lib/sleeping_king_studios/tasks/ci/steps_task.rb, line 46
def failing? step
  return true if step.failing?

  return true if step.respond_to?(:errored?) && step.errored?

  false
end
format_failures(failing_steps) click to toggle source
# File lib/sleeping_king_studios/tasks/ci/steps_task.rb, line 54
def format_failures failing_steps
  tools.ary.humanize_list(failing_steps) do |name|
    set_color(name, :red)
  end # humanize list
end
report(results) click to toggle source
# File lib/sleeping_king_studios/tasks/ci/steps_task.rb, line 60
def report results
  rows =
    results.map do |key, obj|
      [set_color("#{key}:", results_color(obj)), obj.to_s]
    end # results

  say "\n"

  print_table rows
end
report_failures(results) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/sleeping_king_studios/tasks/ci/steps_task.rb, line 72
def report_failures results
  failing_steps =
    results.each.with_object([]) do |(key, step), ary|
      ary << key if failing?(step)
    end # each

  say "\n"

  if failing_steps.empty?
    say 'The CI suite passed.', :green

    return
  end # if

  say "The following steps failed: #{format_failures failing_steps}"
  say "\n"

  raise Thor::Error, 'The CI suite failed.'
end