release-gem 0.1.30 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|