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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57101d4aac61f768528f2a78f63b0aa70b84aef70c9e34fc32c6ebf3d800d770
4
- data.tar.gz: c122577d5230b100b8a20372674d8f62c851cc9c30de198ec23563f631e9cd8a
3
+ metadata.gz: 55ebb9696749b3ac5c22709018fb93c37b4d1b5139c74982a16a7bf73ec4064e
4
+ data.tar.gz: e6611ec7194f8b84a40131e22b38e3e90e780239f4e213ed116b4dbe21d78d92
5
5
  SHA512:
6
- metadata.gz: 7a9a103fa3b5a08aca5db85b52494e1b92fe868a78680817892ce8ec31da4eeba00f3f541bc3087cd62718869f40d84fe7bd5a811e35cb07f2bc52c0a3e49edc
7
- data.tar.gz: 572ea81d39fc51c79eecca955d0817550421abc23da0bb16ed51a5b2aa222457902025a13bce88453331669eaa55c76b3bec6c5465b571a0a2f9be624d188dc4
6
+ metadata.gz: d11c9780519efa02def540d5b57e35a7b7709ff3bff552b9c023c64b75fa80eaf00e7ed12cc3658bfba6147ce4f440714d02b93e46303f402cba3f0d9fe86b95
7
+ data.tar.gz: d285e65f232ec8a3b82176442e5c7e2fd4f7a0ff2d674ee3f7120b4cd23d658d19c0dc9c0f10f437d103b2b043a5c07295ea21704f3012fcbcb2e8f5e6b8d746
@@ -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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module GithubWorkflow
2
- VERSION = "0.1.10"
2
+ VERSION = "0.2.1"
3
3
  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.10
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-03-28 00:00:00.000000000 Z
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