release-gem 0.1.30 → 0.3.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/Gemfile.lock +8 -7
- data/lib/release/gem/cli.rb +16 -0
- data/lib/release/gem/gem_action.rb +44 -30
- data/lib/release/gem/gem_cli_action.rb +35 -10
- 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: 9fa0f7de3f5def10b5829328b5409fd5236adc500a851ce291c24c80b5c3266e
|
4
|
+
data.tar.gz: 16f704d586405286e753f7cf3046c6604126d9dfb168ec6aca97cf9c3684282f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c23655648823e1de3d485a420afb73a5645a371618c47f0a0fabca3996fc849b60c33bc9613d178e9b9a4dc7e6d323baeaf6a1135bd48d3159e6d414dc1dbf85
|
7
|
+
data.tar.gz: c21d2a999a56b8778e1e8c061532f5aced2c0408fcf6317010070b63ada86135bfc4270c33bd50eebf9af0228da37c024ad97e98bb7cba125debe3e276f9ea02
|
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.0)
|
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,45 @@ 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
|
+
cmd = "cd #{@root} && gem push #{targetGem} -k #{selAcct}"
|
209
|
+
Gem.logger.debug "Command to publish gem : #{cmd}"
|
210
|
+
res = `#{cmd} 2>&1`
|
211
|
+
block.call(:gem_push_output, $?, res) if block
|
212
|
+
[$?, res]
|
202
213
|
|
214
|
+
else
|
215
|
+
block.call(:gem_push_skipped, name, version)
|
216
|
+
end
|
203
217
|
end
|
204
218
|
|
205
219
|
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|
|
@@ -231,10 +249,13 @@ module Release
|
|
231
249
|
st = pargs.first
|
232
250
|
res = pargs[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
|
+
|
238
259
|
end
|
239
260
|
end
|
240
261
|
|
@@ -291,6 +312,10 @@ module Release
|
|
291
312
|
end
|
292
313
|
end
|
293
314
|
|
315
|
+
def pastel
|
316
|
+
Gem.pastel
|
317
|
+
end
|
318
|
+
|
294
319
|
end
|
295
320
|
end
|
296
321
|
end
|