BitBar plugin: Not reviewed open Github PR's
#!/usr/bin/env ruby | |
# | |
# <bitbar.title>Not reviewed open Github PR's</bitbar.title> | |
# <bitbar.version>v1.0</bitbar.version> | |
# <bitbar.author>Thomas Metzmacher</bitbar.author> | |
# <bitbar.author.github>thomet</bitbar.author.github> | |
# <bitbar.desc>Shows all not from you reviewed and open Github PR's for specific users.</bitbar.desc> | |
# <bitbar.dependencies>ruby</bitbar.dependencies> | |
# | |
require 'json' | |
require 'net/http' | |
### CONFIG ### | |
# Create a personal access token: https://github.com/settings/tokens | |
GITHUB_AUTH_TOKEN = '' | |
# Your github user name | |
USER = 'you github name' | |
# Show only PR's from this users | |
SQUAD_USERS = %w(put in github user names here) | |
# Only for repos from this user/company | |
REPO_USER = 'you github user/organisation name' | |
# The color for the different PR states | |
STATE_COLOR = { | |
'clean' => 'green', | |
'unstable' => 'yellow', | |
'dirty' => 'red' | |
} | |
### END CONFIG ### | |
def get_json(url) | |
uri = URI.parse(url) | |
http = Net::HTTP.new(uri.host, uri.port) | |
http.use_ssl = true | |
request = Net::HTTP::Get.new(uri.request_uri, {'Authorization' => 'token ' + GITHUB_AUTH_TOKEN}) | |
response = http.request(request) | |
JSON.parse(response.body) | |
end | |
def get_pr_data(url) | |
get_json(url)['items'].map do |item| | |
pr = get_json(item['pull_request']['url']) | |
[item['title'], item['html_url'], STATE_COLOR[pr['mergeable_state']], pr['mergeable']] | |
end | |
end | |
def print_pr_line(pr) | |
puts "#{pr[0]}#{pr[3] ? '' : ' ⚡'}|href=#{pr[1]} color=#{pr[2]}" | |
end | |
open_squad_prs = [] | |
SQUAD_USERS.each do |author| | |
open_squad_prs += get_pr_data("https://api.github.com/search/issues?q=state:open+type:pr+user:#{REPO_USER}+author:#{author}+-commenter:#{USER}") | |
end | |
open_user_prs = [] | |
open_user_prs += get_pr_data("https://api.github.com/search/issues?q=state:open+type:pr+user:#{REPO_USER}+author:#{USER}") | |
puts "Not Reviewed PR's: #{open_squad_prs.count}, Open PR's: #{open_user_prs.count}" | |
puts '---' | |
open_squad_prs.each { |pr| print_pr_line(pr) } | |
puts '---' | |
open_user_prs.each { |pr| print_pr_line(pr) } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment