Skip to content

Instantly share code, notes, and snippets.

@kristm
Created September 23, 2020 10:52
Show Gist options
  • Save kristm/59d821eb304b83644b92a8c3cb52a851 to your computer and use it in GitHub Desktop.
Save kristm/59d821eb304b83644b92a8c3cb52a851 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'rubyXL'
require 'rubyXL/convenience_methods'
require 'csv'
def usage
puts "Contribution Summary\nUsage: #{$0} <username>"
end
def parse_workbook(type, username)
summary = [[],[]]
total = 0
table = RubyXL::Parser.parse(File.expand_path(File.dirname(__FILE__)) + "/#{type}_monorepo-global_#{username}.xlsx")
table.worksheets.each_with_index do |ws, i|
case type
when "result"
contribs = ws.sheet_data.rows.select do |row|
row.cells.size > 1 && (row.cells[1].value == "Commit" || row.cells[1].value[/github.*issue/])
end
total += contribs.size
summary[0].push ws.sheet_name
summary[1].push contribs.size
else
last_row = ws.sheet_data.rows.last[0].value.to_i rescue 0 #last row of first column
total += last_row
summary[0].push ws.sheet_name
summary[1].push last_row
end
end; nil
summary
end
def main
if ARGV.empty?
usage
exit
end
username = ARGV[0]
contribs = parse_workbook("result", username)
reviews = parse_workbook("review", username)
total_contribs = contribs[1].sum
total_reviews = reviews[1].sum
output = (contribs | reviews).transpose
CSV.open("#{username}-summary.csv", "w") do |csv|
csv << ["period", "contributions", "reviews"]
output.each do |row|
csv << row
end
csv << ["total", total_contribs, total_reviews]
end
puts "Done: #{username}-summary.csv"
end
main if __FILE__ == $0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment