thegarage-gitx 2.12.0 → 2.13.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/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
|