class PullRequestBuilder::GithubStatusReporter

Attributes

client[RW]
logger[RW]
osc[RW]
package[RW]
repository[RW]

Public Instance Methods

report() click to toggle source
# File lib/pull_request_builder/github_status_reporter.rb, line 8
def report
  if update?
    logger.info("Update status to state #{state}.")
    client.create_status(repository, package.commit_sha, state, options)
  else
    logger.info('State did not change, continue...')
  end
rescue Octokit::Error => e
  logger.error("Status not updated: #{e}.")
end

Private Instance Methods

context() click to toggle source
# File lib/pull_request_builder/github_status_reporter.rb, line 27
def context
  'OBS Package Build'
end
description() click to toggle source
# File lib/pull_request_builder/github_status_reporter.rb, line 31
def description
  count_all = summary[:success] + summary[:failure] + summary[:pending]
  count_finished = count_all - summary[:pending]

  result = String.new("#{count_finished}/#{count_all} processed")
  result << " | #{summary[:failure]} failures" if summary[:failure].positive?
  result
end
judge_code(code) click to toggle source
# File lib/pull_request_builder/github_status_reporter.rb, line 58
def judge_code(code)
  case code
  when 'succeeded'
    :success
  when 'excluded', 'disabled'
    :exclusion
  when 'broken', 'failed', 'unresolvable'
    :failure
  when 'building', 'dispatching', 'scheduled', 'finished', 'blocked'
    :pending
  else
    logger.error("Unmapped status result #{code} in #{package.obs_package_name}")
    :pending
  end
end
options() click to toggle source
# File lib/pull_request_builder/github_status_reporter.rb, line 50
def options
  {
    context: context,
    target_url: package.url,
    description: description
  }
end
state() click to toggle source
# File lib/pull_request_builder/github_status_reporter.rb, line 40
def state
  if summary[:failure].positive?
    :failure
  elsif summary[:pending].positive? || summary[:success].zero?
    :pending
  else
    :success
  end
end
summary() click to toggle source
# File lib/pull_request_builder/github_status_reporter.rb, line 74
def summary
  return @summary if @summary

  @summary = { failure: 0, success: 0, pending: 0, exclusion: 0 }
  result = osc.build_result(package)
  node = Nokogiri::XML(result).root
  node.xpath('.//status').each do |status|
    @summary[judge_code(status['code'])] += 1
  end
  @summary
end
update?() click to toggle source
# File lib/pull_request_builder/github_status_reporter.rb, line 21
def update?
  statuses = client.statuses(repository, package.commit_sha)
  build_status = statuses.select { |state| state.context == context }.first
  build_status.nil? || state.to_s != build_status.state || description != build_status.description
end