thegarage-gitx 2.12.0 → 2.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -5
- data/lib/thegarage/gitx/cli/release_command.rb +3 -2
- data/lib/thegarage/gitx/cli/review_command.rb +2 -3
- data/lib/thegarage/gitx/github.rb +2 -0
- data/lib/thegarage/gitx/version.rb +1 -1
- data/spec/thegarage/gitx/cli/integrate_command_spec.rb +1 -1
- data/spec/thegarage/gitx/cli/release_command_spec.rb +27 -3
- data/spec/thegarage/gitx/cli/review_command_spec.rb +36 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3970bcceec2fdffef729443705a5533f089e25b5
|
4
|
+
data.tar.gz: c42d584f27788dfd2491149895442665ce04fb92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09941f7c3d161f8a7e8bb9f1167484713d2d12dc40d8fc4ecfddc93a37f51d93ee20319919650205b34ebe8a96ac83c0e0e042a83f2a3f3da237091357bd04c3
|
7
|
+
data.tar.gz: d8960f7276396f466d4c606b1e73355cd2a2db010502f1292e787fccc04b5f06bbe17ff411119bfc68fdbd66e28ef0472fb97ea9134abf9a7128c0e50a1d5fee
|
data/README.md
CHANGED
@@ -26,7 +26,7 @@ update the local feature branch with latest remote changes plus upstream release
|
|
26
26
|
|
27
27
|
integrate the current feature branch into an aggregate branch (ex: prototype, staging)
|
28
28
|
|
29
|
-
## git review
|
29
|
+
## git review <feature_branch_name (optional, default: current_branch)>
|
30
30
|
|
31
31
|
create a pull request on github for peer review of the current branch. This command is re-runnable
|
32
32
|
in order to re-assign pull requests.
|
@@ -41,13 +41,14 @@ options:
|
|
41
41
|
NOTE: the `--bump` option will also update the pull request commit status to mark the branch as 'pending peer review'.
|
42
42
|
This setting is cleared when a reviewer approves or rejects the pull request.
|
43
43
|
|
44
|
-
## git release
|
44
|
+
## git release <feature_branch_name (optional, default: current_branch)
|
45
45
|
|
46
|
-
release the
|
46
|
+
release the feature branch to master. This operation will perform the following:
|
47
47
|
|
48
|
-
* pull
|
49
|
-
*
|
48
|
+
* pull latest code from remote feature branch
|
49
|
+
* pull latest code from master branch
|
50
50
|
* prompt user to confirm they actually want to perform the release
|
51
|
+
* check if pull request commit status is currently successful
|
51
52
|
* merge current branch into master
|
52
53
|
* (optional) cleanup merged branches from remote server
|
53
54
|
|
@@ -14,11 +14,12 @@ module Thegarage
|
|
14
14
|
|
15
15
|
desc 'release', 'release the current branch to production'
|
16
16
|
method_option :cleanup, :type => :boolean, :desc => 'cleanup merged branches after release'
|
17
|
-
def release
|
17
|
+
def release(branch = nil)
|
18
18
|
return unless yes?("Release #{current_branch.name} to production? (y/n)", :green)
|
19
19
|
|
20
|
-
branch
|
20
|
+
branch ||= current_branch.name
|
21
21
|
assert_not_protected_branch!(branch, 'release')
|
22
|
+
checkout_branch(branch)
|
22
23
|
execute_command(UpdateCommand, :update)
|
23
24
|
|
24
25
|
find_or_create_pull_request(branch)
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'thegarage/gitx'
|
3
3
|
require 'thegarage/gitx/cli/base_command'
|
4
|
-
require 'thegarage/gitx/cli/update_command'
|
5
4
|
require 'thegarage/gitx/github'
|
6
5
|
|
7
6
|
module Thegarage
|
@@ -41,10 +40,10 @@ module Thegarage
|
|
41
40
|
method_option :approve, :type => :boolean, :desc => 'approve the pull request an post comment on pull request'
|
42
41
|
method_option :reject, :type => :boolean, :desc => 'reject the pull request an post comment on pull request'
|
43
42
|
# @see http://developer.github.com/v3/pulls/
|
44
|
-
def review
|
43
|
+
def review(branch = nil)
|
45
44
|
fail 'Github authorization token not found' unless authorization_token
|
46
45
|
|
47
|
-
branch
|
46
|
+
branch ||= current_branch.name
|
48
47
|
pull_request = find_or_create_pull_request(branch)
|
49
48
|
bump_pull_request(pull_request) if options[:bump]
|
50
49
|
approve_pull_request(pull_request) if options[:approve]
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'octokit'
|
2
2
|
require 'fileutils'
|
3
3
|
require 'yaml'
|
4
|
+
require 'thegarage/gitx/cli/update_command'
|
4
5
|
|
5
6
|
module Thegarage
|
6
7
|
module Gitx
|
@@ -20,6 +21,7 @@ module Thegarage
|
|
20
21
|
def find_or_create_pull_request(branch)
|
21
22
|
pull_request = find_pull_request(branch)
|
22
23
|
pull_request ||= begin
|
24
|
+
checkout_branch(branch)
|
23
25
|
execute_command(Thegarage::Gitx::Cli::UpdateCommand, :update)
|
24
26
|
pull_request = create_pull_request(branch)
|
25
27
|
say 'Created pull request: '
|
@@ -98,7 +98,7 @@ describe Thegarage::Gitx::Cli::IntegrateCommand do
|
|
98
98
|
expect(cli).to receive(:run_cmd).with("git merge feature-branch").ordered
|
99
99
|
expect(cli).to receive(:run_cmd).with("git push origin HEAD").ordered
|
100
100
|
expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
|
101
|
-
|
101
|
+
expect(cli).to receive(:run_cmd).with('git checkout feature-branch').ordered
|
102
102
|
expect(cli).to receive(:run_cmd).with("git log master...feature-branch --reverse --no-merges --pretty=format:'* %s%n%b'").and_return("2013-01-01 did some stuff").ordered
|
103
103
|
|
104
104
|
stub_request(:post, 'https://api.github.com/repos/thegarage/thegarage-gitx/pulls').to_return(:status => 201, :body => new_pull_request.to_json, :headers => {'Content-Type' => 'application/json'})
|
@@ -61,6 +61,7 @@ describe Thegarage::Gitx::Cli::ReleaseCommand do
|
|
61
61
|
expect(cli).to receive(:yes?).and_return(true)
|
62
62
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
63
63
|
|
64
|
+
expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
|
64
65
|
expect(cli).to receive(:run_cmd).with("git checkout master").ordered
|
65
66
|
expect(cli).to receive(:run_cmd).with("git pull origin master").ordered
|
66
67
|
expect(cli).to receive(:run_cmd).with("git merge --no-ff feature-branch").ordered
|
@@ -74,6 +75,29 @@ describe Thegarage::Gitx::Cli::ReleaseCommand do
|
|
74
75
|
should meet_expectations
|
75
76
|
end
|
76
77
|
end
|
78
|
+
context 'when target_branch is not nil and user confirms release and pull request exists with success status' do
|
79
|
+
before do
|
80
|
+
expect(cli).to receive(:execute_command).with(Thegarage::Gitx::Cli::UpdateCommand, :update)
|
81
|
+
expect(cli).to receive(:execute_command).with(Thegarage::Gitx::Cli::IntegrateCommand, :integrate, 'staging')
|
82
|
+
expect(cli).to_not receive(:execute_command).with(Thegarage::Gitx::Cli::CleanupCommand, :cleanup)
|
83
|
+
|
84
|
+
expect(cli).to receive(:yes?).and_return(true)
|
85
|
+
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
86
|
+
|
87
|
+
expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
|
88
|
+
expect(cli).to receive(:run_cmd).with("git checkout master").ordered
|
89
|
+
expect(cli).to receive(:run_cmd).with("git pull origin master").ordered
|
90
|
+
expect(cli).to receive(:run_cmd).with("git merge --no-ff feature-branch").ordered
|
91
|
+
expect(cli).to receive(:run_cmd).with("git push origin HEAD").ordered
|
92
|
+
|
93
|
+
VCR.use_cassette('pull_request_does_exist_with_success_status') do
|
94
|
+
cli.release 'feature-branch'
|
95
|
+
end
|
96
|
+
end
|
97
|
+
it 'runs expected commands' do
|
98
|
+
should meet_expectations
|
99
|
+
end
|
100
|
+
end
|
77
101
|
context 'when user confirms release and pull request does not exist' do
|
78
102
|
let(:new_pull_request) do
|
79
103
|
{
|
@@ -96,6 +120,8 @@ describe Thegarage::Gitx::Cli::ReleaseCommand do
|
|
96
120
|
expect(cli).to receive(:yes?).with('Release feature-branch to production? (y/n)', :green).and_return(true)
|
97
121
|
expect(cli).to receive(:yes?).with('Branch status is currently: pending. Proceed with release? (y/n)', :red).and_return(true)
|
98
122
|
|
123
|
+
expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
|
124
|
+
expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
|
99
125
|
expect(cli).to receive(:run_cmd).with("git log master...feature-branch --reverse --no-merges --pretty=format:'* %s%n%b'").and_return("2013-01-01 did some stuff").ordered
|
100
126
|
expect(cli).to receive(:run_cmd).with("git checkout master").ordered
|
101
127
|
expect(cli).to receive(:run_cmd).with("git pull origin master").ordered
|
@@ -128,6 +154,7 @@ describe Thegarage::Gitx::Cli::ReleaseCommand do
|
|
128
154
|
expect(cli).to receive(:yes?).and_return(true)
|
129
155
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
130
156
|
|
157
|
+
expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
|
131
158
|
expect(cli).to receive(:run_cmd).with("git checkout master").ordered
|
132
159
|
expect(cli).to receive(:run_cmd).with("git pull origin master").ordered
|
133
160
|
expect(cli).to receive(:run_cmd).with("git merge --no-ff feature-branch").ordered
|
@@ -140,9 +167,6 @@ describe Thegarage::Gitx::Cli::ReleaseCommand do
|
|
140
167
|
it 'runs expected commands' do
|
141
168
|
should meet_expectations
|
142
169
|
end
|
143
|
-
it 'prunes merged branches (git cleanup)' do
|
144
|
-
should meet_expectations
|
145
|
-
end
|
146
170
|
end
|
147
171
|
end
|
148
172
|
end
|
@@ -43,6 +43,7 @@ describe Thegarage::Gitx::Cli::ReviewCommand do
|
|
43
43
|
expect(Thegarage::Gitx::Cli::UpdateCommand).to receive(:new).and_return(fake_update_command)
|
44
44
|
|
45
45
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
46
|
+
expect(cli).to receive(:run_cmd).with('git checkout feature-branch').ordered
|
46
47
|
expect(cli).to receive(:run_cmd).with("git log master...feature-branch --reverse --no-merges --pretty=format:'* %s%n%b'").and_return("* old commit\n\n* new commit").ordered
|
47
48
|
expect(cli).to receive(:ask_editor).with("### Changelog\n* old commit\n\n* new commit\n#{Thegarage::Gitx::Github::PULL_REQUEST_FOOTER}", anything).and_return('description')
|
48
49
|
|
@@ -59,6 +60,41 @@ describe Thegarage::Gitx::Cli::ReviewCommand do
|
|
59
60
|
should meet_expectations
|
60
61
|
end
|
61
62
|
end
|
63
|
+
context 'when target branch is not nil and pull request does not exist' do
|
64
|
+
let(:authorization_token) { '123123' }
|
65
|
+
let(:changelog) { '* made some fixes' }
|
66
|
+
let(:fake_update_command) { double('fake update command', update: nil) }
|
67
|
+
let(:new_pull_request) do
|
68
|
+
{
|
69
|
+
html_url: "https://path/to/html/pull/request",
|
70
|
+
issue_url: "https://api/path/to/issue/url",
|
71
|
+
number: 10,
|
72
|
+
head: {
|
73
|
+
ref: "branch_name"
|
74
|
+
}
|
75
|
+
}
|
76
|
+
end
|
77
|
+
before do
|
78
|
+
expect(Thegarage::Gitx::Cli::UpdateCommand).to receive(:new).and_return(fake_update_command)
|
79
|
+
|
80
|
+
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
81
|
+
expect(cli).to receive(:run_cmd).with('git checkout feature-branch').ordered
|
82
|
+
expect(cli).to receive(:run_cmd).with("git log master...feature-branch --reverse --no-merges --pretty=format:'* %s%n%b'").and_return("* old commit\n\n* new commit").ordered
|
83
|
+
expect(cli).to receive(:ask_editor).with("### Changelog\n* old commit\n\n* new commit\n#{Thegarage::Gitx::Github::PULL_REQUEST_FOOTER}", anything).and_return('description')
|
84
|
+
|
85
|
+
stub_request(:post, 'https://api.github.com/repos/thegarage/thegarage-gitx/pulls').to_return(:status => 201, :body => new_pull_request.to_json, :headers => {'Content-Type' => 'application/json'})
|
86
|
+
|
87
|
+
VCR.use_cassette('pull_request_does_not_exist') do
|
88
|
+
cli.review 'feature-branch'
|
89
|
+
end
|
90
|
+
end
|
91
|
+
it 'creates github pull request' do
|
92
|
+
should meet_expectations
|
93
|
+
end
|
94
|
+
it 'runs expected commands' do
|
95
|
+
should meet_expectations
|
96
|
+
end
|
97
|
+
end
|
62
98
|
context 'when authorization_token is missing' do
|
63
99
|
let(:authorization_token) { nil }
|
64
100
|
it do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thegarage-gitx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Sonnek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rugged
|