-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtmux.script.github.rb
executable file
·154 lines (136 loc) · 3.43 KB
/
tmux.script.github.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/usr/bin/env ruby
# Gets pull requests created and assigned to me, also my pending reviews
# Outputs icons with total counts
require 'time'
require 'colorize'
require 'octokit'
require 'yaml'
require 'awesome_print'
config = YAML.load_file(__dir__ + '/config/github.yml')
client = Octokit::Client.new(access_token: config['personal_access_token'])
display_mode = ARGV[0]
query = <<-GRAPHQL
query {
user(login: "#{config['my_username']}") {
pullRequests(first: 100, states: OPEN) {
totalCount
nodes {
repository {
name
}
author {
login
}
createdAt
number
databaseId
title
url
assignees(first: 15) {
nodes {
login
}
}
}
}
}
}
GRAPHQL
begin
response = client.post '/graphql', { query: query }.to_json
rescue
puts 'network_error_assigned'
Kernel.abort
end
begin
pr_assigned = 0
pr_assigned_details = []
response.data.user.pullRequests.nodes.each do |pull_request|
pr_assigned_details.push({
repo: pull_request.repository.name,
number: pull_request.number,
title: pull_request.title,
created_at: pull_request.createdAt,
url: pull_request.url,
})
if pull_request.author.login == config['my_username']
pr_assigned += 1
next
end
pull_request.assignees.nodes.each do |assignee|
pr_assigned += 1 if assignee.login == config['my_username']
next
end
end
rescue
puts 'parse_error_assigned'
Kernel.abort
end
query = <<-GRAPHQL
{
search(query: "type:pr state:open review-requested:#{config['my_username']}", type: ISSUE, first: 100) {
issueCount
edges {
node {
... on PullRequest {
repository {
nameWithOwner
}
title
number
databaseId
url
createdAt
}
}
}
}
}
GRAPHQL
begin
response = client.post '/graphql', { query: query }.to_json
rescue
puts 'network_error_review'
Kernel.abort
end
ignore_review_for_merge_requests_ids = config['ignore_review_for_pull_requests_ids']
begin
pr_review = 0
pr_review_details = []
response.data.search.edges.each do |pull_request|
if ignore_review_for_merge_requests_ids.include? pull_request.node.databaseId
next
end
pr_review_details.push({
repo: pull_request.node.repository.nameWithOwner,
number: pull_request.node.number,
title: pull_request.node.title,
url: pull_request.node.url,
created_at: pull_request.node.createdAt,
})
pr_review += 1
end
rescue
puts 'parse_error_review'
Kernel.abort
end
if display_mode == 'status_bar'
puts '#[fg=green]華' + pr_assigned.to_s + ' #[fg=yellow] ' + pr_review.to_s
elsif display_mode == 'list_details'
puts 'Github Pull Requests'.colorize(:light_blue)
puts 'Assigned to me:'.colorize(:light_green)
if pr_assigned_details.empty? then
puts ' None'
end
pr_assigned_details.each do |pr|
# puts " #{pr[:repo]} ##{pr[:number]} - #{pr[:title]} #{DateTime.strptime(pr[:created_at], '%Y-%m-%dT%H:%M:%SZ')} (#{pr[:url]})"
puts " #{pr[:repo]} ##{pr[:number]} - #{pr[:title]} #{pr[:created_at]} (#{pr[:url]})"
end
if pr_review_details.empty? then
puts ' None'
end
puts 'Pending review:'.colorize(:yellow)
pr_review_details.each do |pr|
puts " #{pr[:repo]} ##{pr[:number]} - #{pr[:title]} #{pr[:created_at]} (#{pr[:url]})"
end
end