Sha256: 7af609676e27453385b4f94fd6c1fb30fce149bc7628a325333bbecbbb5db377

Contents?: true

Size: 1.57 KB

Versions: 17

Compression:

Stored size: 1.57 KB

Contents

module Shipit
  class EphemeralCommitChecks
    FINAL_STATUSES = %w(failed error success).freeze

    def initialize(commit)
      @commit = commit
    end

    attr_accessor :status
    attr_reader :output

    def run
      self.status = 'running'
      commands = StackCommands.new(stack)
      commands.with_temporary_working_directory(commit: commit) do |directory|
        deploy_spec = DeploySpec::FileSystem.new(directory, stack.environment)
        Bundler.with_clean_env do
          capture_all(build_commands(deploy_spec.dependencies_steps, chdir: directory))
          capture_all(build_commands(deploy_spec.review_checks, chdir: directory))
        end
      end
      self
    rescue Command::Error
      self.status = 'failed'
      self
    rescue
      self.status = 'error'
      raise
    else
      self.status = 'success'
      self
    end

    def success?
      status == 'success'
    end

    def finished?
      FINAL_STATUSES.include?(status)
    end

    def write(output)
      @output ||= ''
      @output += output
    end

    private

    def build_commands(commands, chdir:)
      commands.map { |c| Command.new(c, env: Shipit.env, chdir: chdir) }
    end

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

    def capture(command)
      command.start
      write("$ #{command}\n")
      command.stream! do |line|
        write(line)
      end
    rescue Command::Error => error
      write(error.message)
      raise
    ensure
      write("\n")
    end

    attr_reader :commit

    def stack
      @stack ||= commit.stack
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
shipit-engine-0.24.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.23.1 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.23.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.22.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.21.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.20.1 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.20.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.19.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.18.1 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.18.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.17.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.16.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.15.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.14.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.13.0 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.12.1 app/models/shipit/ephemeral_commit_checks.rb
shipit-engine-0.12.0 app/models/shipit/ephemeral_commit_checks.rb