git-pr-release 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/git-pr-release +40 -19
- data/git-pr-release.gemspec +1 -1
- metadata +14 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a86a7c2e8b0cef94c0eb162660772b0efa212bf
|
4
|
+
data.tar.gz: 81115e65decbf92b726b6218b6fe9cd1cd007f7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64cb59550b604a2a0d189b23dfddeca083bd2a21b656ccadc04e4d72294ed99ce9cf05fc98732b28a1e71f7886ec0f75a472afab2868d551990b38133c94f265
|
7
|
+
data.tar.gz: 0f9f1f277f6f4ce30e73d7d4c6c4681ea9b5e2541a24e17ad518fc3b7291f04af963464ee15a674f36ddbe51d4b723c321f97db8b058f5d732fcb3e421054198
|
data/bin/git-pr-release
CHANGED
@@ -4,6 +4,7 @@ require 'uri'
|
|
4
4
|
require 'erb'
|
5
5
|
require 'open3'
|
6
6
|
require 'tmpdir'
|
7
|
+
require 'json'
|
7
8
|
require 'optparse'
|
8
9
|
|
9
10
|
require 'octokit'
|
@@ -25,6 +26,10 @@ class PullRequest
|
|
25
26
|
def html_link
|
26
27
|
pr.rels[:html].href
|
27
28
|
end
|
29
|
+
|
30
|
+
def to_hash
|
31
|
+
{ :data => @pr.to_hash }
|
32
|
+
end
|
28
33
|
end
|
29
34
|
|
30
35
|
class DummyPullRequest
|
@@ -39,6 +44,10 @@ class DummyPullRequest
|
|
39
44
|
def html_link
|
40
45
|
'http://github.com/DUMMY/DUMMY/issues/?'
|
41
46
|
end
|
47
|
+
|
48
|
+
def to_hash
|
49
|
+
{ :data => {} }
|
50
|
+
end
|
42
51
|
end
|
43
52
|
|
44
53
|
def say(message, level)
|
@@ -59,7 +68,7 @@ def say(message, level)
|
|
59
68
|
:red
|
60
69
|
end
|
61
70
|
|
62
|
-
puts message.colorize(color)
|
71
|
+
STDERR.puts message.colorize(color)
|
63
72
|
end
|
64
73
|
|
65
74
|
def git(*command)
|
@@ -101,9 +110,9 @@ Release <%= Time.now %>
|
|
101
110
|
<% end -%>
|
102
111
|
ERB
|
103
112
|
|
104
|
-
def build_pr_title_and_body(
|
105
|
-
target_pull_request =
|
106
|
-
pull_requests =
|
113
|
+
def build_pr_title_and_body(release_pr, merged_prs)
|
114
|
+
release_pull_request = target_pull_request = release_pr ? PullRequest.new(release_pr) : DummyPullRequest.new
|
115
|
+
merged_pull_requests = pull_requests = merged_prs.map { |pr| PullRequest.new(pr) }
|
107
116
|
|
108
117
|
template = DEFAULT_PR_TEMPLATE
|
109
118
|
|
@@ -117,6 +126,13 @@ def build_pr_title_and_body(target_pr, prs)
|
|
117
126
|
content.split(/\n/, 2)
|
118
127
|
end
|
119
128
|
|
129
|
+
def dump_result_as_json(release_pr, merged_prs)
|
130
|
+
puts( {
|
131
|
+
:release_pull_request => (release_pr ? PullRequest.new(release_pr) : DummyPullRequest.new).to_hash,
|
132
|
+
:merged_pull_requests => merged_prs.map { |pr| PullRequest.new(pr).to_hash }
|
133
|
+
}.to_json )
|
134
|
+
end
|
135
|
+
|
120
136
|
def merge_pr_body(old_body, new_body)
|
121
137
|
# Try to take over checklist statuses
|
122
138
|
pr_body_lines = []
|
@@ -206,6 +222,9 @@ OptionParser.new do |opts|
|
|
206
222
|
opts.on('-n', '--dry-run', 'Do not create/update a PR. Just prints out') do |v|
|
207
223
|
@dry_run = v
|
208
224
|
end
|
225
|
+
opts.on('--json', 'Show data of target PRs in JSON format') do |v|
|
226
|
+
@json = v
|
227
|
+
end
|
209
228
|
end.parse!
|
210
229
|
|
211
230
|
### Set up configuration
|
@@ -254,7 +273,7 @@ if merged_pull_request_numbers.empty?
|
|
254
273
|
exit 1
|
255
274
|
end
|
256
275
|
|
257
|
-
|
276
|
+
merged_prs = merged_pull_request_numbers.map do |nr|
|
258
277
|
pr = client.pull_request repository, nr
|
259
278
|
say "To be released: ##{pr.number} #{pr.title}", :notice
|
260
279
|
pr
|
@@ -263,45 +282,46 @@ end
|
|
263
282
|
### Create a release PR
|
264
283
|
|
265
284
|
say 'Searching for existing release pull requests...', :info
|
266
|
-
|
285
|
+
found_release_pr = client.pull_requests(repository).find do |pr|
|
267
286
|
pr.head.ref == staging_branch && pr.base.ref == production_branch
|
268
287
|
end
|
269
|
-
create_mode =
|
288
|
+
create_mode = found_release_pr.nil?
|
270
289
|
|
271
290
|
if @dry_run
|
272
|
-
pr_title, new_body = build_pr_title_and_body
|
273
|
-
pr_body = create_mode ? new_body : merge_pr_body(
|
291
|
+
pr_title, new_body = build_pr_title_and_body found_release_pr, merged_prs
|
292
|
+
pr_body = create_mode ? new_body : merge_pr_body(found_release_pr.body, new_body)
|
274
293
|
|
275
294
|
say 'Dry-run. Not updating PR', :info
|
276
295
|
say pr_title, :notice
|
277
296
|
say pr_body, :notice
|
278
|
-
|
297
|
+
dump_result_as_json( found_release_pr, merged_prs ) if @json
|
298
|
+
exit 0
|
279
299
|
end
|
280
300
|
|
281
301
|
pr_title, pr_body = nil, nil
|
282
|
-
|
302
|
+
release_pr = nil
|
283
303
|
|
284
304
|
if create_mode
|
285
|
-
|
305
|
+
created_pr = client.create_pull_request(
|
286
306
|
repository, production_branch, staging_branch, 'Preparing release pull request...', ''
|
287
307
|
)
|
288
|
-
unless
|
308
|
+
unless created_pr
|
289
309
|
say 'Failed to create a new pull request', :error
|
290
310
|
exit 1
|
291
311
|
end
|
292
|
-
pr_title, pr_body = build_pr_title_and_body
|
293
|
-
|
312
|
+
pr_title, pr_body = build_pr_title_and_body created_pr, merged_prs
|
313
|
+
release_pr = created_pr
|
294
314
|
else
|
295
|
-
pr_title, new_body = build_pr_title_and_body
|
296
|
-
pr_body = merge_pr_body(
|
297
|
-
|
315
|
+
pr_title, new_body = build_pr_title_and_body found_release_pr, merged_prs
|
316
|
+
pr_body = merge_pr_body(found_release_pr.body, new_body)
|
317
|
+
release_pr = found_release_pr
|
298
318
|
end
|
299
319
|
|
300
320
|
say 'Pull request body:', :debug
|
301
321
|
say pr_body, :debug
|
302
322
|
|
303
323
|
updated_pull_request = client.update_pull_request(
|
304
|
-
repository,
|
324
|
+
repository, release_pr.number, :title => pr_title, :body => pr_body
|
305
325
|
)
|
306
326
|
|
307
327
|
unless updated_pull_request
|
@@ -310,3 +330,4 @@ unless updated_pull_request
|
|
310
330
|
end
|
311
331
|
|
312
332
|
say "#{create_mode ? 'Created' : 'Updated'} pull request: #{updated_pull_request.rels[:html].href}", :notice
|
333
|
+
dump_result_as_json( release_pr, merged_prs ) if @json
|
data/git-pr-release.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "git-pr-release"
|
7
|
-
spec.version = '0.0
|
7
|
+
spec.version = '0.1.0'
|
8
8
|
spec.authors = ["motemen"]
|
9
9
|
spec.email = ["motemen@gmail.com"]
|
10
10
|
spec.summary = 'Creates a release pull request'
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-pr-release
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- motemen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '2.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: highline
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.6'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.6'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: colorize
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0.6'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: diff-lcs
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.2'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.2'
|
69
69
|
description: git-pr-release creates a pull request which summarizes feature branches
|
@@ -75,7 +75,7 @@ executables:
|
|
75
75
|
extensions: []
|
76
76
|
extra_rdoc_files: []
|
77
77
|
files:
|
78
|
-
- .gitignore
|
78
|
+
- ".gitignore"
|
79
79
|
- Gemfile
|
80
80
|
- Gemfile.lock
|
81
81
|
- README.md
|
@@ -92,19 +92,18 @@ require_paths:
|
|
92
92
|
- lib
|
93
93
|
required_ruby_version: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
|
-
- -
|
100
|
+
- - ">="
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
103
|
requirements: []
|
104
104
|
rubyforge_project:
|
105
|
-
rubygems_version: 2.
|
105
|
+
rubygems_version: 2.2.2
|
106
106
|
signing_key:
|
107
107
|
specification_version: 4
|
108
108
|
summary: Creates a release pull request
|
109
109
|
test_files: []
|
110
|
-
has_rdoc:
|