git-pr-release 0.0.5 → 0.1.0
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/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:
|