Sha256: cea3e3027528d1e8717505f0b04639eb17859a848e2d9b4b79110b26dd93263d

Contents?: true

Size: 1.02 KB

Versions: 4

Compression:

Stored size: 1.02 KB

Contents

class PerformTaskJob < BackgroundJob
  queue_as :deploys

  def perform(task)
    @task = task
    unless @task.pending?
      logger.error("Task ##{@task.id} already in `#{@task.status}` state. Aborting.")
      return
    end

    @task.run!
    commands = Commands.for(@task)
    @task.acquire_git_cache_lock do
      capture commands.fetch
      capture commands.clone
    end
    capture commands.checkout(@task.until_commit)

    Bundler.with_clean_env do
      capture_all commands.install_dependencies
      capture_all commands.perform
    end
    @task.complete!
  rescue Command::Error => error
    @task.report_failure!(error)
  rescue StandardError => error
    @task.report_error!(error)
  ensure
    @task.clear_working_directory
  end

  def capture_all(commands)
    commands.map { |c| capture(c) }
  end

  def capture(command)
    command.start
    @task.write("$ #{command}\npid: #{command.pid}\n")
    @task.pid = command.pid
    command.stream! do |line|
      @task.write(line)
    end
    @task.write("\n")
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
shipit-engine-0.2.3 app/jobs/perform_task_job.rb
shipit-engine-0.2.2 app/jobs/perform_task_job.rb
shipit-engine-0.2.1 app/jobs/perform_task_job.rb
shipit-engine-0.2.0 app/jobs/perform_task_job.rb