class Shuttle::Task

Public Class Methods

new(deploy, task_name, allow_failures = false) click to toggle source
# File lib/shuttle/task.rb, line 3
def initialize(deploy, task_name, allow_failures = false)
  @deploy         = deploy
  @task_name      = task_name
  @allow_failures = allow_failures
end

Public Instance Methods

run() click to toggle source
# File lib/shuttle/task.rb, line 9
def run
  commands = find_task_commands(@task_name)
  
  if commands.nil?
    @deploy.error("Unable to find task: #{@task_name}")
  end

  commands.each do |cmd|
    execute(@task_name, cmd, @allow_failures)
  end
end

Private Instance Methods

execute(task, cmd, allow_failures) click to toggle source
# File lib/shuttle/task.rb, line 32
def execute(task, cmd, allow_failures)
  @deploy.log %{Executing [task=#{task}] "#{cmd.strip}"}

  command = cmd

  if @deploy.ssh.directory_exists?(@deploy.release_path)
    command = "cd #{@deploy.release_path} && #{command}"
  end

  result = @deploy.ssh.run(command)

  if result.failure? && allow_failures == false
    @deploy.error("Failed: #{result.output}")
  else
    if !result.output.empty?
      @deploy.stream_output(result.output)
    end
  end
end
find_task_commands(name) click to toggle source
# File lib/shuttle/task.rb, line 23
def find_task_commands(name)
  return unless @deploy.config.tasks.kind_of?(Hash)

  if @deploy.config.tasks[name]
    commands = [@deploy.config.tasks[name]]
    commands.flatten.compact
  end
end