release-gem 0.1.30 → 0.3.3
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/Gemfile.lock +8 -7
- data/lib/release/gem/cli.rb +16 -0
- data/lib/release/gem/gem_action.rb +48 -30
- data/lib/release/gem/gem_cli_action.rb +38 -12
- data/lib/release/gem/release_infector.rb +7 -3
- data/lib/release/gem/vcs_action.rb +208 -178
- data/lib/release/gem/vcs_cli_action.rb +159 -53
- data/lib/release/gem/version.rb +1 -1
- data/lib/release/gem.rb +40 -7
- data/templates/standard_cli_flow.rb +6 -3
- metadata +41 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9209c29b3cf5efbd93a7e08f0f7f27d82e3b5f14fc35adfd147d9de85c9539ed
|
4
|
+
data.tar.gz: 5f75e8a5573e8f5b581ca5c983f8bd26a74337fbda3e6e64e6f4d75827820ea1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7c999d88fe439e06e982319f6d08ca82328a1e42c74640bed2b3f6c9652dcc4c10f2b53149d442ce8bad1a5b9971dbdf298327a771d98054bde304732e54495
|
7
|
+
data.tar.gz: 9d5234fa341e95e5c2ea83c677cfde0f626098725788b7805d39aead397bc800cd0e4cf4cdfd678b9e7f60189cd24a3c3eb9f4e1603a342fac605700cba03832
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
release-gem (0.
|
5
|
-
colorize
|
6
|
-
git_cli
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
tty-
|
4
|
+
release-gem (0.3.3)
|
5
|
+
colorize (~> 1.1)
|
6
|
+
git_cli (~> 0.13)
|
7
|
+
pastel (~> 0.8)
|
8
|
+
teLogger (~> 0.2)
|
9
|
+
toolrack (~> 0.23)
|
10
|
+
tty-command (~> 0.10)
|
11
|
+
tty-prompt (~> 0.23)
|
11
12
|
|
12
13
|
GEM
|
13
14
|
remote: https://rubygems.org/
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module Release
|
4
|
+
module Gem
|
5
|
+
module Cli
|
6
|
+
def self.cls
|
7
|
+
print "\e[2J\e[f"
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.print_header(path = Dir.getwd)
|
11
|
+
puts Gem.pastel.bright_yellow("\n Standard GEM CLI release flow version #{Release::Gem::VERSION}")
|
12
|
+
puts Gem.pastel.bright_yellow(" Rubygems location : #{path}\n")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -35,7 +35,7 @@ module Release
|
|
35
35
|
|
36
36
|
if block
|
37
37
|
|
38
|
-
block.call(:action_start, :
|
38
|
+
block.call(:action_start, :release_dependencies)
|
39
39
|
|
40
40
|
gemdepInst.development_gem.each do |k,v|
|
41
41
|
res = gemdepInst.infect_gem(v, k, &block)
|
@@ -45,7 +45,8 @@ module Release
|
|
45
45
|
end
|
46
46
|
|
47
47
|
|
48
|
-
keys = gemdepInst.development_gem.keys
|
48
|
+
#keys = gemdepInst.development_gem.keys
|
49
|
+
keys = gemdepInst.development_gem
|
49
50
|
loop do
|
50
51
|
begin
|
51
52
|
conf = block.call(:define_gem_prod_config, { gems: keys })
|
@@ -59,7 +60,7 @@ module Release
|
|
59
60
|
block.call(:invalid_gem_prod_config, "Expected return from :define_gem_prod_config is a hash of \"gem name\" => { type: [:runtime | :dev], version: \">= 1.2.0\" }. Note version can be empty")
|
60
61
|
end
|
61
62
|
rescue GemDepError => ex
|
62
|
-
block.call(:
|
63
|
+
block.call(:invalid_gem_prod_config, ex.message)
|
63
64
|
end
|
64
65
|
end
|
65
66
|
|
@@ -86,7 +87,7 @@ module Release
|
|
86
87
|
end
|
87
88
|
|
88
89
|
def dependency_restore
|
89
|
-
puts "restoring dependency"
|
90
|
+
#puts "restoring dependency"
|
90
91
|
gemdepInst.restore_dev_gem
|
91
92
|
end
|
92
93
|
|
@@ -127,7 +128,14 @@ module Release
|
|
127
128
|
|
128
129
|
cp "Gem version updated. Start building the gem"
|
129
130
|
begin
|
130
|
-
|
131
|
+
|
132
|
+
cmd = "cd #{@root} && rake build"
|
133
|
+
Gem.logger.debug "Command to build gem : #{cmd}"
|
134
|
+
res = `#{cmd} 2>&1`
|
135
|
+
block.call(:gem_building, $?, res) if block
|
136
|
+
|
137
|
+
#Dir.chdir(@root)
|
138
|
+
#Rake::Task["build"].execute
|
131
139
|
|
132
140
|
if $?
|
133
141
|
cp "Gem build successfully at #{Gem.format_dt(Time.now)}"
|
@@ -167,39 +175,49 @@ module Release
|
|
167
175
|
|
168
176
|
raise GemActionError, "No version given to push. Push aborted" if is_empty?(version)
|
169
177
|
|
170
|
-
|
178
|
+
proceed = block.call(:confirm_proceed, name, version)
|
179
|
+
if proceed
|
171
180
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
181
|
+
cred = find_rubygems_api_key
|
182
|
+
|
183
|
+
selAcct = cred.keys.first
|
184
|
+
if cred.keys.length > 1
|
185
|
+
Gem.logger.debug "Multiple rubygems account detected."
|
186
|
+
# multiple account configured...
|
187
|
+
if block
|
188
|
+
selAcct = block.call(:multiple_rubygems_account, cred)
|
189
|
+
raise GemActionError, "No rubygems account is selected." if is_empty?(selAcct)
|
190
|
+
end
|
179
191
|
end
|
180
|
-
end
|
181
192
|
|
182
193
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
194
|
+
# find the package
|
195
|
+
foundGem = Dir.glob(File.join(@root,"**/#{name}-#{version}*.gem"))
|
196
|
+
if foundGem.length == 0
|
197
|
+
raise GemActionError, "No built gem with version '#{version}' found."
|
198
|
+
elsif foundGem.length > 1
|
199
|
+
if block
|
200
|
+
targetGem = block.call(:multiple_built_gems, foundGem)
|
201
|
+
else
|
202
|
+
raise GemActionError, "#{foundGem.length} versions of gem found. Please provide a block for selection"
|
203
|
+
end
|
190
204
|
else
|
191
|
-
|
205
|
+
targetGem = foundGem.first
|
192
206
|
end
|
193
|
-
else
|
194
|
-
targetGem = foundGem.first
|
195
|
-
end
|
196
207
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
208
|
+
if cred.length > 1
|
209
|
+
cmd = "cd #{@root} && gem push #{targetGem} -k #{selAcct}"
|
210
|
+
else
|
211
|
+
cmd = "cd #{@root} && gem push #{targetGem} "
|
212
|
+
end
|
213
|
+
Gem.logger.debug "Command to publish gem : #{cmd}"
|
214
|
+
res = `#{cmd} 2>&1`
|
215
|
+
block.call(:gem_push_output, $?, res) if block
|
216
|
+
[$?, res]
|
202
217
|
|
218
|
+
else
|
219
|
+
block.call(:gem_push_skipped, name, version)
|
220
|
+
end
|
203
221
|
end
|
204
222
|
|
205
223
|
def install(*args, &block)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
|
2
2
|
require 'tty/prompt'
|
3
3
|
require_relative 'gem_action'
|
4
|
+
require_relative 'cli'
|
4
5
|
|
5
6
|
module Release
|
6
7
|
module Gem
|
@@ -20,16 +21,17 @@ module Release
|
|
20
21
|
instance_eval(&block) if block
|
21
22
|
end
|
22
23
|
|
24
|
+
# proxy method for Action::GemAction#release_dependencies
|
23
25
|
def release_dependencies
|
24
26
|
@inst.release_dependencies do |ops, *args|
|
25
|
-
|
27
|
+
case ops
|
26
28
|
when :action_start
|
27
29
|
@pmt.say pmsg("\n Release dependencies starting...\n")
|
28
30
|
|
29
31
|
## from release_infector
|
30
32
|
when :multiple_gemspec
|
31
33
|
v = args.first
|
32
|
-
@pmt.select(pmsg("\n There are multiple gemspecs found. Please select one to proceed : ")) do |m|
|
34
|
+
@pmt.select(pmsg("\n There are multiple gemspecs found. Please select one to proceed : "), filter: true) do |m|
|
33
35
|
v.each do |vv|
|
34
36
|
m.choice vv, vv
|
35
37
|
end
|
@@ -61,7 +63,7 @@ module Release
|
|
61
63
|
|
62
64
|
when :select_terminal
|
63
65
|
v = args.first
|
64
|
-
@pmt.select(pmsg("\n Please select a terminal for development GEM '#{v[:name]}' release : ")) do |m|
|
66
|
+
@pmt.select(pmsg("\n Please select a terminal for development GEM '#{v[:name]}' release : "), filter: true) do |m|
|
65
67
|
v[:options].each do |t|
|
66
68
|
m.choice t, t
|
67
69
|
end
|
@@ -85,13 +87,13 @@ module Release
|
|
85
87
|
when :define_gem_prod_config
|
86
88
|
|
87
89
|
config = {}
|
88
|
-
selections = args.first[:gems]
|
90
|
+
selections = args.first[:gems].clone
|
89
91
|
|
90
92
|
loop do
|
91
93
|
|
92
|
-
sel = @pmt.select(pmsg("\n The following development gems requires configuration. Please select one to configure ")) do |m|
|
93
|
-
selections.each do |
|
94
|
-
m.choice
|
94
|
+
sel = @pmt.select(pmsg("\n The following development gems requires configuration. Please select one to configure "), filter: true) do |m|
|
95
|
+
selections.each do |key, val|
|
96
|
+
m.choice key, key
|
95
97
|
end
|
96
98
|
end
|
97
99
|
|
@@ -104,7 +106,15 @@ module Release
|
|
104
106
|
|
105
107
|
config[sel][:type] = type
|
106
108
|
|
107
|
-
|
109
|
+
gemAct = Action::GemAction.new(selections[sel])
|
110
|
+
currentVersion = gemAct.find_gem_version do |ops, *val|
|
111
|
+
case ops
|
112
|
+
when :multiple_version_files_found
|
113
|
+
# abort. Expected only 1 version files exist
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
ver = @pmt.ask(pmsg("\n Is there specific version pattern (including the ~>/>/>=/= of gemspec) for the gem in production? (Not mandatory) : "), value: currentVersion)
|
108
118
|
config[sel][:version] = ver if not_empty?(ver)
|
109
119
|
|
110
120
|
@pmt.puts pmsg(" ** Done configure for gem #{sel}")
|
@@ -121,6 +131,9 @@ module Release
|
|
121
131
|
when :no_development_gems_found
|
122
132
|
@pmt.puts pmsg("\n No development gem(s) in used found")
|
123
133
|
|
134
|
+
when :invalid_gem_prod_config
|
135
|
+
@pmt.puts pastel.red(pmsg("\n #{args.first}"))
|
136
|
+
|
124
137
|
end
|
125
138
|
end
|
126
139
|
|
@@ -148,7 +161,7 @@ module Release
|
|
148
161
|
if preset
|
149
162
|
|
150
163
|
opts = args.first
|
151
|
-
res = @pmt.select(pmsg("\n Please select new gem version : \n")) do |m|
|
164
|
+
res = @pmt.select(pmsg("\n Please select new gem version : \n"), filter: true) do |m|
|
152
165
|
opts[:proposed_next].reverse.each do |v|
|
153
166
|
m.choice v,v
|
154
167
|
end
|
@@ -214,6 +227,11 @@ module Release
|
|
214
227
|
def push(*pargs, &block)
|
215
228
|
@inst.push(*pargs) do |ops, *args|
|
216
229
|
case ops
|
230
|
+
when :confirm_proceed
|
231
|
+
name = args.first
|
232
|
+
ver = args[1]
|
233
|
+
@pmt.yes?(" Push gem '#{name}' version #{ver} to Rubygems? ")
|
234
|
+
|
217
235
|
when :multiple_rubygems_account
|
218
236
|
creds = args.first
|
219
237
|
res = @pmt.select(pmsg("\n Multiple rubygems account detected. Please select one : ")) do |m|
|
@@ -228,13 +246,17 @@ module Release
|
|
228
246
|
res
|
229
247
|
|
230
248
|
when :gem_push_output
|
231
|
-
st =
|
232
|
-
res =
|
249
|
+
st = args.first
|
250
|
+
res = args[1]
|
233
251
|
if st
|
234
|
-
@pmt.puts pmsg("\n Gem push successful.", :green)
|
252
|
+
@pmt.puts pmsg("\n Gem push successful. #{res}", :green)
|
235
253
|
else
|
236
254
|
@pmt.puts pmsg("\n Gem push failed. Error was :\n #{res}", :red)
|
237
255
|
end
|
256
|
+
|
257
|
+
when :gem_push_skipped
|
258
|
+
@pmt.puts pmsg("\n Gem push skipped", :yellow)
|
259
|
+
|
238
260
|
end
|
239
261
|
end
|
240
262
|
|
@@ -291,6 +313,10 @@ module Release
|
|
291
313
|
end
|
292
314
|
end
|
293
315
|
|
316
|
+
def pastel
|
317
|
+
Gem.pastel
|
318
|
+
end
|
319
|
+
|
294
320
|
end
|
295
321
|
end
|
296
322
|
end
|
@@ -21,7 +21,10 @@ module Release
|
|
21
21
|
def infect(&block)
|
22
22
|
if not is_release_gem_installed?
|
23
23
|
add_to_gemspec(&block)
|
24
|
-
Bundler.with_clean_env do
|
24
|
+
#Bundler.with_clean_env do
|
25
|
+
# Or the warning suggest Bundler.with_original_env
|
26
|
+
# not sure which one is correct
|
27
|
+
Bundler.with_unbundled_env do
|
25
28
|
res = `cd #{@root} && bundle update 2>&1`
|
26
29
|
puts res
|
27
30
|
end
|
@@ -40,7 +43,8 @@ module Release
|
|
40
43
|
raise ReleaseInfectorError, "No possible terminal found" if is_empty?(poss)
|
41
44
|
|
42
45
|
terminal = ""
|
43
|
-
Bundler.with_clean_env do
|
46
|
+
#Bundler.with_clean_env do
|
47
|
+
Bundler.with_unbundled_env do
|
44
48
|
|
45
49
|
cmd = "cd #{@root} && bundle update 2>&1 && rake gem:release"
|
46
50
|
if block
|
@@ -120,7 +124,7 @@ module Release
|
|
120
124
|
|
121
125
|
File.open(gs, "w") do |f|
|
122
126
|
f.write cont[0...lastEnd]
|
123
|
-
f.puts " spec.add_development_dependency 'release-gem'"
|
127
|
+
f.puts " spec.add_development_dependency 'release-gem', \"~> #{Release::Gem::VERSION}\" "
|
124
128
|
f.puts "end"
|
125
129
|
end
|
126
130
|
block.call(:gemspec_updated, name: @name, gemspec: gs ) if block
|