github_workflow 0.1.10 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/github_workflow.gemspec +2 -0
- data/lib/github_workflow/cli.rb +114 -0
- data/lib/github_workflow/version.rb +1 -1
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55ebb9696749b3ac5c22709018fb93c37b4d1b5139c74982a16a7bf73ec4064e
|
4
|
+
data.tar.gz: e6611ec7194f8b84a40131e22b38e3e90e780239f4e213ed116b4dbe21d78d92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d11c9780519efa02def540d5b57e35a7b7709ff3bff552b9c023c64b75fa80eaf00e7ed12cc3658bfba6147ce4f440714d02b93e46303f402cba3f0d9fe86b95
|
7
|
+
data.tar.gz: d285e65f232ec8a3b82176442e5c7e2fd4f7a0ff2d674ee3f7120b4cd23d658d19c0dc9c0f10f437d103b2b043a5c07295ea21704f3012fcbcb2e8f5e6b8d746
|
data/github_workflow.gemspec
CHANGED
@@ -20,7 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.add_dependency "thor", "~> 0.19"
|
21
21
|
spec.add_dependency "faraday", "~> 0.11"
|
22
22
|
spec.add_dependency "terminal-table", "~> 1.5"
|
23
|
+
spec.add_dependency "ruby-trello", "~> 2.1"
|
23
24
|
|
24
25
|
spec.add_development_dependency "bundler"
|
26
|
+
spec.add_development_dependency "pry"
|
25
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
28
|
end
|
data/lib/github_workflow/cli.rb
CHANGED
@@ -4,6 +4,7 @@ require "thor"
|
|
4
4
|
require "open3"
|
5
5
|
require "json"
|
6
6
|
require "terminal-table"
|
7
|
+
require "trello"
|
7
8
|
|
8
9
|
module GithubWorkflow
|
9
10
|
class Cli < Thor
|
@@ -109,6 +110,23 @@ module GithubWorkflow
|
|
109
110
|
end
|
110
111
|
end
|
111
112
|
|
113
|
+
desc "reviews", "Displays count of requested reviews for each user"
|
114
|
+
def reviews
|
115
|
+
ensure_github_config_present
|
116
|
+
reviewers = get_prs_list.map { |pr| pr["requested_reviewers"].map { |r| r["login"] } }.flatten
|
117
|
+
reviewer_counts = reviewers.group_by { |i| i }.map { |k, v| [k, v.count] }
|
118
|
+
|
119
|
+
if reviewer_counts.any?
|
120
|
+
table = Terminal::Table.new(style: { width: 50 }) do |table_rows|
|
121
|
+
table_rows << ["Username", "Requested PRs Count"]
|
122
|
+
table_rows << :separator
|
123
|
+
reviewer_counts.each { |reviewer_count| table_rows << reviewer_count }
|
124
|
+
end
|
125
|
+
|
126
|
+
puts table
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
112
130
|
desc "deploy_notes", "Generate Deploy notes for a range of commits"
|
113
131
|
method_option :commit_range, aliases: "-r", type: :string, required: true
|
114
132
|
|
@@ -116,7 +134,82 @@ module GithubWorkflow
|
|
116
134
|
puts formatted_deploy_notes
|
117
135
|
end
|
118
136
|
|
137
|
+
desc "trello", "Create issue from card"
|
138
|
+
method_option :card_number, aliases: "-i", type: :string, required: true
|
139
|
+
|
140
|
+
def trello
|
141
|
+
ensure_github_config_present
|
142
|
+
ensure_trello_config_present
|
143
|
+
init_trello
|
144
|
+
set_trello_card
|
145
|
+
create_issue_from_trello_card
|
146
|
+
stash
|
147
|
+
checkout_master
|
148
|
+
rebase_master
|
149
|
+
create_branch
|
150
|
+
stash_pop
|
151
|
+
end
|
152
|
+
|
153
|
+
|
119
154
|
no_tasks do
|
155
|
+
def create_issue_from_trello_card
|
156
|
+
say_info("Creating issue")
|
157
|
+
|
158
|
+
issue_params = {
|
159
|
+
title: trello_card.name,
|
160
|
+
body: issue_body_from_trello_card,
|
161
|
+
assignees: [current_github_username],
|
162
|
+
labels: issue_labels_from_trello_card
|
163
|
+
}
|
164
|
+
|
165
|
+
response = JSON.parse(github_client.post("repos/#{user_and_repo}/issues?access_token=#{oauth_token}", issue_params.to_json).body)
|
166
|
+
|
167
|
+
@issue_id = response["number"]
|
168
|
+
end
|
169
|
+
|
170
|
+
def issue_body_from_trello_card
|
171
|
+
deploy_note = trello_card.custom_field_items.detect { |cfi| cfi.custom_field.name == "Deploy Note" }.value["text"]
|
172
|
+
|
173
|
+
body = <<~BODY
|
174
|
+
#{trello_card.desc}
|
175
|
+
|
176
|
+
**Deploy Note:** #{deploy_note}
|
177
|
+
BODY
|
178
|
+
end
|
179
|
+
|
180
|
+
def current_github_username
|
181
|
+
JSON.parse(github_client.get("user?access_token=#{oauth_token}").body)["login"]
|
182
|
+
end
|
183
|
+
|
184
|
+
def issue_labels_from_trello_card
|
185
|
+
labels = trello_card.labels.map(&:name)
|
186
|
+
|
187
|
+
product_review_type = trello_card.custom_field_items.detect do |cfi|
|
188
|
+
cfi.custom_field.name == "Product Review"
|
189
|
+
end
|
190
|
+
|
191
|
+
if product_review_type && ["Review App", "Screenshot"].include?(product_review_type.option_value["text"])
|
192
|
+
labels << "Product Review Required"
|
193
|
+
end
|
194
|
+
|
195
|
+
priority = trello_card.custom_field_items.detect do |cfi|
|
196
|
+
cfi.custom_field.name == "Priority"
|
197
|
+
end
|
198
|
+
|
199
|
+
if priority && priority.option_value["text"].present?
|
200
|
+
priority_titleized = priority.option_value["text"]
|
201
|
+
labels << "Priority: #{priority_titleized}"
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def set_trello_card
|
206
|
+
say_info("Fetching trello card")
|
207
|
+
trello_board = Trello::Board.find(project_config["trello_board_id"])
|
208
|
+
@trello_card = trello_board.cards.detect { |card| card.short_id == options["card_number"].to_i }
|
209
|
+
end
|
210
|
+
|
211
|
+
attr_reader :trello_card
|
212
|
+
|
120
213
|
def get_issue(id)
|
121
214
|
JSON.parse(github_client.get("repos/#{user_and_repo}/issues/#{id}?access_token=#{oauth_token}").body)
|
122
215
|
end
|
@@ -125,6 +218,10 @@ module GithubWorkflow
|
|
125
218
|
JSON.parse(github_client.get("repos/#{user_and_repo}/pulls/#{id}?access_token=#{oauth_token}").body)
|
126
219
|
end
|
127
220
|
|
221
|
+
def get_prs_list
|
222
|
+
JSON.parse(github_client.get("repos/#{user_and_repo}/pulls?access_token=#{oauth_token}&per_page=100").body)
|
223
|
+
end
|
224
|
+
|
128
225
|
def create_branch
|
129
226
|
`git checkout -b #{branch_name_for_issue_number}`
|
130
227
|
end
|
@@ -143,6 +240,23 @@ module GithubWorkflow
|
|
143
240
|
end
|
144
241
|
end
|
145
242
|
|
243
|
+
def ensure_trello_config_present
|
244
|
+
unless project_config &&
|
245
|
+
project_config["trello_board_id"] &&
|
246
|
+
project_config["trello_key"] &&
|
247
|
+
project_config["trello_token"]
|
248
|
+
|
249
|
+
failure('Please add `.github` file containing `{ "trello_key": "KEY", "trello_token": "TOKEN" }`')
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
def init_trello
|
254
|
+
Trello.configure do |config|
|
255
|
+
config.developer_public_key = project_config["trello_key"]
|
256
|
+
config.member_token = project_config["trello_token"]
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
146
260
|
def project_config
|
147
261
|
@project_config ||= JSON.parse(File.read(".github")) rescue nil
|
148
262
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: github_workflow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Liscio
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: ruby-trello
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.1'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +80,20 @@ dependencies:
|
|
66
80
|
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: rake
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|