joshminnie/hubtrics

View on GitHub
bin/closed_pull_report

Summary

Maintainability
Test Coverage
#! /usr/bin/env ruby

# frozen_string_literal: true

require 'octokit'
require 'optparse'
require 'yaml'

require_relative '../lib/hubtrics'

options = { client: {} }
OptionParser.new do |opts|
  opts.banner = 'Usage: apply_labels.rb [options]'
  opts.program_name = 'Hubtrics: GitHub-based reports and metrics'

  # -----------------------------------------------------------------------------
  # BEGIN Authentication options

  options[:config] = File.expand_path('../.hubtrics.yml', __dir__)
  opts.on('-c CONFIG', '--config CONFIG', String, 'Path to config file') do |config|
    options[:config] = config
  end

  config = YAML.load_file(options[:config]).fetch('client', {})

  options[:client][:login] = config.fetch('login', nil)
  opts.on('--login LOGIN', String, 'Login for your GitHub account') do |login|
    options[:client][:login] = login
  end

  options[:client][:access_token] = config.fetch('access_token', nil)
  opts.on('--access-token TOKEN', String, 'OAuth access token for your GitHub account') do |token|
    options[:client][:access_token] = token
  end

  options[:client][:netrc] = config.fetch('netrc', false)
  opts.on('--[no-]netrc', 'Use .netrc to connect') do |netrc|
    options[:client][:netrc] = netrc
  end

  # END Authentication option
  # -----------------------------------------------------------------------------

  opts.on('--repository REPOSITORY', String, 'Repository to run this report against') do |repository|
    options[:repository] = repository
  end

  opts.on('--gist GIST', String, 'Update the Gist specified by the SHA provided') do |gist|
    options[:gist] = gist
  end

  opts.on('-h', '--help', 'Display this screen') do
    puts opts
    exit
  end
end.parse!

client = Hubtrics.client(options[:client])
report = Hubtrics::Reports::ClosedPullReport.new(client, options[:repository])
report.generate
gist = report.save_to_gist(options[:gist])

Hubtrics.say("Report was written to:\n#{gist.html_url}")