Sha256: 6ec7bfd51f8fc2ccd1766850018c15c66fb838e456cec9d0e14a9f3355df27f6

Contents?: true

Size: 1.74 KB

Versions: 6

Compression:

Stored size: 1.74 KB

Contents

module Shipit
  class TaskCommands < Commands
    delegate :fetch, to: :stack_commands

    def initialize(task)
      @task = task
      @stack = task.stack
    end

    def deploy_spec
      @deploy_spec ||= DeploySpec::FileSystem.new(@task.working_directory, @stack.environment)
    end

    def install_dependencies
      deploy_spec.dependencies_steps!.map do |command_line|
        Command.new(command_line, env: env, chdir: steps_directory)
      end
    end

    def perform
      steps.map do |command_line|
        Command.new(command_line, env: env, chdir: steps_directory)
      end
    end

    def steps
      @task.definition.steps
    end

    def env
      normalized_name = ActiveSupport::Inflector.transliterate(@task.author.name)
      super.merge(
        'ENVIRONMENT' => @stack.environment,
        'USER' => "#{@task.author.login} (#{normalized_name}) via Shipit",
        'EMAIL' => @task.author.email,
        'BUNDLE_PATH' => Rails.root.join('data', 'bundler').to_s,
        'SHIPIT_LINK' => permalink,
        'LAST_DEPLOYED_SHA' => @stack.last_deployed_commit.sha,
      ).merge(deploy_spec.machine_env).merge(@task.env)
    end

    def checkout(commit)
      git('checkout', commit.sha, chdir: @task.working_directory)
    end

    def clone
      git('clone', '--local', @stack.git_path, @task.working_directory, chdir: @stack.deploys_path)
    end

    def stack_commands
      @stack_commands = StackCommands.new(@stack)
    end

    protected

    def steps_directory
      if sub_directory = deploy_spec.directory.presence
        File.join(@task.working_directory, sub_directory)
      else
        @task.working_directory
      end
    end

    def permalink
      Shipit::Engine.routes.url_helpers.stack_task_url(@stack, @task)
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
shipit-engine-0.7.0 lib/shipit/task_commands.rb
shipit-engine-0.6.4 lib/shipit/task_commands.rb
shipit-engine-0.6.3 lib/shipit/task_commands.rb
shipit-engine-0.6.2 lib/shipit/task_commands.rb
shipit-engine-0.6.1 lib/shipit/task_commands.rb
shipit-engine-0.6.0 lib/shipit/task_commands.rb