Sha256: c3088e52e3a5584e7e7c9053e0774b788912798263886fcfa9fd2c97fd253377

Contents?: true

Size: 1.83 KB

Versions: 2

Compression:

Stored size: 1.83 KB

Contents

# frozen_string_literal: true

require_relative 'vcs/github'

module CircleCIReporter
  class Runner
    # @return [void]
    def run
      reports = reporters.map { |reporter| reporter.report(base_build, previous_build) }
      vcs_client.create_comment(reports.map(&:to_s).join("\n"))
    end

    # @return [void]
    def dump
      puts <<~RUNNER
        Runner            | Value
        ------------------|-----------------------------------------------------------------------------------
        base_build        | #{base_build.inspect}
        base_build_number | #{base_build_number.inspect}
        previous_build    | #{previous_build.inspect}
      RUNNER
    end

    private

    # @return [AbstractVCSClient]
    def vcs_client
      case configuration.vcs_type
      when 'github'
        VCS::GitHub.new(configuration.vcs_token)
      else
        raise NotImplementedError
      end
    end

    # @return [Build, nil]
    def base_build
      @base_build ||= client.single_build(base_build_number)
    end

    # @return [Build, nil]
    def previous_build
      @previous_build ||= client.single_build(previous_build_number)
    end

    # @return [Client]
    def client
      CircleCIReporter.client
    end

    # @return [Configuration]
    def configuration
      CircleCIReporter.configuration
    end

    # @return [String, nil]
    def base_revision
      configuration.base_revision
    end

    # @return [Integer, nil]
    def previous_build_number
      configuration.previous_build_number
    end

    # @return [Array<AbstractReporter>]
    def reporters
      configuration.reporters
    end

    # @return [Integer, nil]
    def base_build_number
      return if configuration.base_revision == configuration.current_revision

      @base_build_number ||= client.build_number_by_revision(base_revision, branch: 'master')
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
circleci_reporter-1.0.1 lib/circleci_reporter/runner.rb
circleci_reporter-1.0.0 lib/circleci_reporter/runner.rb