gitx 2.14.2.ci.70.1 → 2.15.0.ci.75.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 +8 -8
- data/.gitx.yml +3 -0
- data/README.md +3 -0
- data/lib/gitx/cli/release_command.rb +22 -8
- data/lib/gitx/configuration.rb +4 -0
- data/lib/gitx/defaults.yml +2 -0
- data/lib/gitx/version.rb +1 -1
- data/spec/gitx/cli/release_command_spec.rb +44 -11
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzMxY2Q5YjdlNGQwMDQ4YzBkYTIxMzMzMDlkNzI1MDk2NTRmZmI0OQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZWIxNDE3ZGM1ZDE5YWEyOTBiNmUyNTNhMDBiYjg0N2E5NjQ5MjE3MA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzdmNTE4ZTI4OGNlMWQxYjgwNjFkNGZmYzE2N2NkZjRmM2VmNjViMzFhZGU3
|
10
|
+
MjMwZjAwYWNlN2U5YzMwMTc4OWY3YzAwNTUxMjAyZGMwNmZmYTNmYTcxNDcy
|
11
|
+
NDM0ZjY1ZmEwMmJkMzgzNmYxNWY5OGYzNTNlYmY1NjY5OTdiOTM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MzljNjczZmNhOGE2MTE2ZjE1Njk0ZmE5YTU2NzhjNzA3YjQ0ODc5Y2ZhN2Vi
|
14
|
+
MTQ5ZjE2OGIxZmYxNDM2ZjZiZjRjZTI2NTYwZTk5NjFiY2MyODk0ODA2ZmVi
|
15
|
+
NmJmMDUyYTEzNjQ5NTIzOTBhMWVkOThmOTgzMjgxOWU4NWRmM2E=
|
data/.gitx.yml
ADDED
data/README.md
CHANGED
@@ -68,6 +68,9 @@ reset an aggregate branch (ex: prototype, staging) back to a known good state.
|
|
68
68
|
|
69
69
|
create a build tag for the current Travis-CI build and push it back to origin
|
70
70
|
|
71
|
+
## Configuration
|
72
|
+
Any of the [default settings defined in the gem](lib/gitx/defaults.yml) can be overridden
|
73
|
+
by creating a custom `.gitx.yml` file in the root directory of your project.
|
71
74
|
|
72
75
|
## Contributing
|
73
76
|
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
@@ -2,7 +2,6 @@ require 'thor'
|
|
2
2
|
require 'gitx'
|
3
3
|
require 'gitx/cli/base_command'
|
4
4
|
require 'gitx/cli/update_command'
|
5
|
-
require 'gitx/cli/integrate_command'
|
6
5
|
require 'gitx/cli/cleanup_command'
|
7
6
|
require 'gitx/github'
|
8
7
|
|
@@ -21,19 +20,34 @@ module Gitx
|
|
21
20
|
checkout_branch(branch)
|
22
21
|
execute_command(UpdateCommand, :update)
|
23
22
|
|
24
|
-
|
25
|
-
status = branch_status(branch)
|
26
|
-
if status != 'success'
|
27
|
-
return unless yes?("Branch status is currently: #{status}. Proceed with release? (y/n)", :red)
|
28
|
-
end
|
23
|
+
return unless confirm_branch_status?(branch)
|
29
24
|
|
30
25
|
checkout_branch Gitx::BASE_BRANCH
|
31
26
|
run_cmd "git pull origin #{Gitx::BASE_BRANCH}"
|
32
27
|
run_cmd "git merge --no-ff #{branch}"
|
33
28
|
run_cmd 'git push origin HEAD'
|
34
29
|
|
35
|
-
|
36
|
-
|
30
|
+
after_release
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def confirm_branch_status?(branch)
|
36
|
+
find_or_create_pull_request(branch)
|
37
|
+
status = branch_status(branch)
|
38
|
+
if status == 'success'
|
39
|
+
true
|
40
|
+
else
|
41
|
+
yes?("Branch status is currently: #{status}. Proceed with release? (y/n)", :red)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def after_release
|
46
|
+
after_release_scripts = config.after_release_scripts.dup
|
47
|
+
after_release_scripts << 'git cleanup' if options[:cleanup]
|
48
|
+
after_release_scripts.each do |cmd|
|
49
|
+
run_cmd cmd
|
50
|
+
end
|
37
51
|
end
|
38
52
|
end
|
39
53
|
end
|
data/lib/gitx/configuration.rb
CHANGED
data/lib/gitx/defaults.yml
CHANGED
data/lib/gitx/version.rb
CHANGED
@@ -12,6 +12,7 @@ describe Gitx::Cli::ReleaseCommand do
|
|
12
12
|
let(:cli) { described_class.new(args, options, config) }
|
13
13
|
let(:branch) { double('fake branch', name: 'feature-branch') }
|
14
14
|
let(:authorization_token) { '123123' }
|
15
|
+
let(:repo) { cli.send(:repo) }
|
15
16
|
|
16
17
|
before do
|
17
18
|
allow(cli).to receive(:current_branch).and_return(branch)
|
@@ -31,9 +32,8 @@ describe Gitx::Cli::ReleaseCommand do
|
|
31
32
|
end
|
32
33
|
context 'when user confirms release and pull request exists with non-success status' do
|
33
34
|
before do
|
35
|
+
expect(repo).to receive(:workdir).and_return(temp_dir)
|
34
36
|
expect(cli).to receive(:execute_command).with(Gitx::Cli::UpdateCommand, :update)
|
35
|
-
expect(cli).to_not receive(:execute_command).with(Gitx::Cli::IntegrateCommand, :integrate, 'staging')
|
36
|
-
expect(cli).to_not receive(:execute_command).with(Gitx::Cli::CleanupCommand, :cleanup)
|
37
37
|
|
38
38
|
expect(cli).to receive(:yes?).with('Release feature-branch to production? (y/n)', :green).and_return(true)
|
39
39
|
expect(cli).to receive(:yes?).with('Branch status is currently: failure. Proceed with release? (y/n)', :red).and_return(false)
|
@@ -52,11 +52,42 @@ describe Gitx::Cli::ReleaseCommand do
|
|
52
52
|
should meet_expectations
|
53
53
|
end
|
54
54
|
end
|
55
|
-
context 'when user confirms release and pull request exists with success status' do
|
55
|
+
context 'when user confirms release and pull request exists with success status with default config' do
|
56
56
|
before do
|
57
|
+
expect(repo).to receive(:workdir).and_return(temp_dir)
|
58
|
+
|
59
|
+
expect(cli).to receive(:execute_command).with(Gitx::Cli::UpdateCommand, :update)
|
60
|
+
|
61
|
+
expect(cli).to receive(:yes?).and_return(true)
|
62
|
+
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
63
|
+
|
64
|
+
expect(cli).to receive(:run_cmd).with('git checkout feature-branch').ordered
|
65
|
+
expect(cli).to receive(:run_cmd).with('git checkout master').ordered
|
66
|
+
expect(cli).to receive(:run_cmd).with('git pull origin master').ordered
|
67
|
+
expect(cli).to receive(:run_cmd).with('git merge --no-ff feature-branch').ordered
|
68
|
+
expect(cli).to receive(:run_cmd).with('git push origin HEAD').ordered
|
69
|
+
expect(cli).to receive(:run_cmd).with('git integrate').ordered
|
70
|
+
|
71
|
+
VCR.use_cassette('pull_request_does_exist_with_success_status') do
|
72
|
+
cli.release
|
73
|
+
end
|
74
|
+
end
|
75
|
+
it 'runs expected commands' do
|
76
|
+
should meet_expectations
|
77
|
+
end
|
78
|
+
end
|
79
|
+
context 'when user confirms release and pull request exists with success status with custom after_release config' do
|
80
|
+
let(:gitx_config) do
|
81
|
+
{
|
82
|
+
'after_release' => ['echo hello']
|
83
|
+
}
|
84
|
+
end
|
85
|
+
before do
|
86
|
+
expect(repo).to receive(:workdir).and_return(temp_dir)
|
87
|
+
File.open(File.join(temp_dir, '.gitx.yml'), 'w') do |f|
|
88
|
+
f.puts gitx_config.to_yaml
|
89
|
+
end
|
57
90
|
expect(cli).to receive(:execute_command).with(Gitx::Cli::UpdateCommand, :update)
|
58
|
-
expect(cli).to receive(:execute_command).with(Gitx::Cli::IntegrateCommand, :integrate, 'staging')
|
59
|
-
expect(cli).to_not receive(:execute_command).with(Gitx::Cli::CleanupCommand, :cleanup)
|
60
91
|
|
61
92
|
expect(cli).to receive(:yes?).and_return(true)
|
62
93
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
@@ -66,6 +97,7 @@ describe Gitx::Cli::ReleaseCommand do
|
|
66
97
|
expect(cli).to receive(:run_cmd).with('git pull origin master').ordered
|
67
98
|
expect(cli).to receive(:run_cmd).with('git merge --no-ff feature-branch').ordered
|
68
99
|
expect(cli).to receive(:run_cmd).with('git push origin HEAD').ordered
|
100
|
+
expect(cli).to receive(:run_cmd).with('echo hello').ordered
|
69
101
|
|
70
102
|
VCR.use_cassette('pull_request_does_exist_with_success_status') do
|
71
103
|
cli.release
|
@@ -77,9 +109,8 @@ describe Gitx::Cli::ReleaseCommand do
|
|
77
109
|
end
|
78
110
|
context 'when target_branch is not nil and user confirms release and pull request exists with success status' do
|
79
111
|
before do
|
112
|
+
expect(repo).to receive(:workdir).and_return(temp_dir)
|
80
113
|
expect(cli).to receive(:execute_command).with(Gitx::Cli::UpdateCommand, :update)
|
81
|
-
expect(cli).to receive(:execute_command).with(Gitx::Cli::IntegrateCommand, :integrate, 'staging')
|
82
|
-
expect(cli).to_not receive(:execute_command).with(Gitx::Cli::CleanupCommand, :cleanup)
|
83
114
|
|
84
115
|
expect(cli).to receive(:yes?).and_return(true)
|
85
116
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
@@ -89,6 +120,7 @@ describe Gitx::Cli::ReleaseCommand do
|
|
89
120
|
expect(cli).to receive(:run_cmd).with('git pull origin master').ordered
|
90
121
|
expect(cli).to receive(:run_cmd).with('git merge --no-ff feature-branch').ordered
|
91
122
|
expect(cli).to receive(:run_cmd).with('git push origin HEAD').ordered
|
123
|
+
expect(cli).to receive(:run_cmd).with('git integrate').ordered
|
92
124
|
|
93
125
|
VCR.use_cassette('pull_request_does_exist_with_success_status') do
|
94
126
|
cli.release 'feature-branch'
|
@@ -110,12 +142,11 @@ describe Gitx::Cli::ReleaseCommand do
|
|
110
142
|
}
|
111
143
|
end
|
112
144
|
before do
|
145
|
+
expect(repo).to receive(:workdir).and_return(temp_dir)
|
113
146
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
114
147
|
allow(cli).to receive(:ask_editor).and_return('description')
|
115
148
|
|
116
149
|
expect(cli).to receive(:execute_command).with(Gitx::Cli::UpdateCommand, :update).twice
|
117
|
-
expect(cli).to receive(:execute_command).with(Gitx::Cli::IntegrateCommand, :integrate, 'staging')
|
118
|
-
expect(cli).to_not receive(:execute_command).with(Gitx::Cli::CleanupCommand, :cleanup)
|
119
150
|
|
120
151
|
expect(cli).to receive(:yes?).with('Release feature-branch to production? (y/n)', :green).and_return(true)
|
121
152
|
expect(cli).to receive(:yes?).with('Branch status is currently: pending. Proceed with release? (y/n)', :red).and_return(true)
|
@@ -127,6 +158,7 @@ describe Gitx::Cli::ReleaseCommand do
|
|
127
158
|
expect(cli).to receive(:run_cmd).with('git pull origin master').ordered
|
128
159
|
expect(cli).to receive(:run_cmd).with('git merge --no-ff feature-branch').ordered
|
129
160
|
expect(cli).to receive(:run_cmd).with('git push origin HEAD').ordered
|
161
|
+
expect(cli).to receive(:run_cmd).with('git integrate').ordered
|
130
162
|
|
131
163
|
stub_request(:post, 'https://api.github.com/repos/wireframe/gitx/pulls').to_return(status: 201, body: new_pull_request.to_json, headers: { 'Content-Type' => 'application/json' })
|
132
164
|
VCR.use_cassette('pull_request_does_not_exist') do
|
@@ -147,9 +179,8 @@ describe Gitx::Cli::ReleaseCommand do
|
|
147
179
|
}
|
148
180
|
end
|
149
181
|
before do
|
182
|
+
expect(repo).to receive(:workdir).and_return(temp_dir)
|
150
183
|
expect(cli).to receive(:execute_command).with(Gitx::Cli::UpdateCommand, :update)
|
151
|
-
expect(cli).to receive(:execute_command).with(Gitx::Cli::IntegrateCommand, :integrate, 'staging')
|
152
|
-
expect(cli).to receive(:execute_command).with(Gitx::Cli::CleanupCommand, :cleanup)
|
153
184
|
|
154
185
|
expect(cli).to receive(:yes?).and_return(true)
|
155
186
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
@@ -159,6 +190,8 @@ describe Gitx::Cli::ReleaseCommand do
|
|
159
190
|
expect(cli).to receive(:run_cmd).with('git pull origin master').ordered
|
160
191
|
expect(cli).to receive(:run_cmd).with('git merge --no-ff feature-branch').ordered
|
161
192
|
expect(cli).to receive(:run_cmd).with('git push origin HEAD').ordered
|
193
|
+
expect(cli).to receive(:run_cmd).with('git integrate').ordered
|
194
|
+
expect(cli).to receive(:run_cmd).with('git cleanup').ordered
|
162
195
|
|
163
196
|
VCR.use_cassette('pull_request_does_exist_with_success_status') do
|
164
197
|
cli.release
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.15.0.ci.75.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Sonnek
|
@@ -252,6 +252,7 @@ extensions: []
|
|
252
252
|
extra_rdoc_files: []
|
253
253
|
files:
|
254
254
|
- .gitignore
|
255
|
+
- .gitx.yml
|
255
256
|
- .hound.yml
|
256
257
|
- .rspec
|
257
258
|
- .rubocop.yml
|