Skip to content

Instantly share code, notes, and snippets.

@andrew
Last active December 10, 2015 23:38
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save andrew/4511005 to your computer and use it in GitHub Desktop.
Save andrew/4511005 to your computer and use it in GitHub Desktop.
Get a leaderboard of contributions in your GitHub organization
## Contribution leaderboard
#
# Get a leaderboard of contributions in your org
#
# usage: $ USERNAME=yourusername PASSWORD=yourpassword ORG=yourorgname ruby leaderboard.rb
#
# n.b requires the octokit and mechanize gems
require 'rubygems'
require 'octokit'
require 'mechanize'
USERNAME = ENV['USERNAME']
PASSWORD = ENV['PASSWORD']
ORG = ENV['ORG']
client = Octokit::Client.new(:login => USERNAME, :password => PASSWORD, :auto_traversal => true)
users = client.org_members(ORG).map(&:login)
a = Mechanize.new { |agent| agent.user_agent_alias = 'Mac Safari' }
# comment this block out for open source contributions only
a.get('http://github.com/login') do |login_page|
login_page.form_with(:action => '/session') do |f|
f.login = ENV['USERNAME']
f.password = ENV['PASSWORD']
end.click_button
end
leaderboard = []
users.each do |u|
page = a.get("http://github.com/#{u}")
total = page.search('.contrib-day .num').text.match(/([\d,]+)/)[1].delete(',').to_i
leaderboard << [u, total]
end
leaderboard.sort_by{|u| u[1] }.reverse.each do |u|
puts "#{u[0]} - #{u[1]}"
end
@chrismytton
Copy link

Very cool! I think the usage section is slightly wrong, it should be:

env USERNAME=yourusername ...

❤️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment