Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@mryoshio
Created December 23, 2019 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mryoshio/c2ffaa4bf48782e8d89edd1046a260fc to your computer and use it in GitHub Desktop.
Save mryoshio/c2ffaa4bf48782e8d89edd1046a260fc to your computer and use it in GitHub Desktop.
require 'csv'
require 'octokit'
require 'pry'
BEGIN_OF_2019 = Time.new('2019-01-01 00:00:00 UTC')
def client
@client ||= Octokit::Client.new(access_token: ENV['GITHUB_ACCESS_TOKEN'], per_page: 100)
end
CSV.open('./pr_records.csv', 'wb') do |csv|
csv << %w[repo number title created_at updated_at merged_at user]
end
def output_to_csv(repo_name, pull_reqs)
CSV.open('./pr_records.csv', 'ab') do |csv|
pull_reqs.each do |pr|
puts "#{repo_name}, #{pr.number}, #{pr.merged_at}"
next if pr.merged_at.nil?
return false if pr.merged_at < BEGIN_OF_2019
arr = [repo_name]
arr << pr.number
arr << pr.title
arr << pr.created_at
arr << pr.updated_at
arr << pr.merged_at
arr << pr.user.login
csv << arr
end
end
true
end
def repositories
repos = []
client.organization_repositories(ENV['ORGANIZATION_NAME'])
res = client.last_response
loop do
res.data.each do |repo|
repos << { id: repo.id, name: repo.name }
end
if res.rels[:next]
res = res.rels[:next].get
else
break
end
end
repos
end
repositories.each do |repo|
client.pull_requests(repo[:id], state: 'closed', sort: 'created', direction: 'desc')
res = client.last_response
output_to_csv(repo[:name], res.data)
while res.rels[:next]
res = res.rels[:next].get
break unless output_to_csv(repo[:name], res.data)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment