nexus 1.2.3 → 1.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/lib/commands/abstract_command.rb +7 -0
- data/lib/commands/nexus.rb +28 -22
- data/lib/nexus/config.rb +4 -0
- data/lib/nexus/version.rb +1 -1
- data/test/abstract_command_test.rb +22 -0
- data/test/nexus_command_test.rb +43 -8
- metadata +34 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c390f45bd0c31e68df98712adf0b1fdde32c2fe8
|
|
4
|
+
data.tar.gz: 9dc8685041e8fcd7ae302321015676e45d3db73a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6726114873b1ea9aa57c74bc9a4391ed8e5f077fe50ce21334f1cb35589712c23a1eb727940e3415d7a9aecb5a6dae44487f97fe4c35a7ab247e1f06856357a3
|
|
7
|
+
data.tar.gz: e768d7cec487c0176392bc4e4c537b759ee93fe0d744ccebaec92a9f570c96f0b846f3c4d82b7d6f7bead46b91d284b931309e0340f11701f7c7322bec4987bb
|
|
@@ -23,6 +23,11 @@ class Gem::AbstractCommand < Gem::Command
|
|
|
23
23
|
"File location of nexus config to use.\n default #{Nexus::Config.default_file}" ) do |value, options|
|
|
24
24
|
options[ :nexus_config ] = File.expand_path( value )
|
|
25
25
|
end
|
|
26
|
+
|
|
27
|
+
add_option( '--ignore-ssl-errors',
|
|
28
|
+
"No check certificate." ) do |value, options|
|
|
29
|
+
options[ :ssl_verify_mode ] = OpenSSL::SSL::VERIFY_NONE
|
|
30
|
+
end
|
|
26
31
|
end
|
|
27
32
|
|
|
28
33
|
def url
|
|
@@ -109,6 +114,8 @@ class Gem::AbstractCommand < Gem::Command
|
|
|
109
114
|
|
|
110
115
|
if url.scheme == 'https'
|
|
111
116
|
http.use_ssl = true
|
|
117
|
+
http.verify_mode =
|
|
118
|
+
options[ :ssl_verify_mode ] || config.ssl_verify_mode || OpenSSL::SSL::VERIFY_PEER
|
|
112
119
|
end
|
|
113
120
|
|
|
114
121
|
#Because sometimes our gems are huge and our people are on vpns
|
data/lib/commands/nexus.rb
CHANGED
|
@@ -9,7 +9,7 @@ class Gem::Commands::NexusCommand < Gem::AbstractCommand
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def usage
|
|
12
|
-
"#{program_name} GEM"
|
|
12
|
+
"#{program_name} GEM [GEM [...]]"
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def list_repos
|
|
@@ -55,17 +55,17 @@ class Gem::Commands::NexusCommand < Gem::AbstractCommand
|
|
|
55
55
|
'encrypt/decrypt the credentials with a master password.' ) do |value, options|
|
|
56
56
|
options[ :nexus_encrypt ] = value
|
|
57
57
|
end
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def execute
|
|
62
|
-
|
|
63
|
-
if(
|
|
62
|
+
names = get_all_gem_names rescue nil
|
|
63
|
+
if( names && ( options[ :nexus_all_repos ] != nil ||
|
|
64
64
|
options[ :nexus_clear_all ] != nil ||
|
|
65
65
|
options[ :nexus_prompt_all ] != nil ||
|
|
66
66
|
options[ :nexus_encrypt ] != nil ||
|
|
67
67
|
options[ :nexus_secrets ] != nil ) )
|
|
68
|
-
warn "given gemfile #{
|
|
68
|
+
warn "given gemfile(s) #{names.join(' ')} get ignored due to the options used"
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
if options[ :nexus_all_repos ]
|
|
@@ -99,26 +99,32 @@ class Gem::Commands::NexusCommand < Gem::AbstractCommand
|
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
def send_gem
|
|
102
|
-
|
|
102
|
+
gems = get_all_gem_names
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
say "Uploading #{gems.size} gem#{'s' if gems.size != 1} to Nexus..."
|
|
105
105
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
106
|
+
gems.each do |path|
|
|
107
|
+
response = make_request(:put, "gems/#{File.basename(path)}") do |request|
|
|
108
|
+
request.body = Gem.read_binary(path)
|
|
109
|
+
request.add_field("Content-Length", request.body.size)
|
|
110
|
+
request.add_field("Content-Type", "application/octet-stream")
|
|
111
|
+
request.add_field("Authorization", authorization.strip) if authorization
|
|
112
|
+
end
|
|
112
113
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
114
|
+
case response.code
|
|
115
|
+
when "400"
|
|
116
|
+
say "something went wrong - maybe (re)deployment is not allowed"
|
|
117
|
+
when "401"
|
|
118
|
+
say "Unauthorized"
|
|
119
|
+
when "500"
|
|
120
|
+
say "something went wrong"
|
|
121
|
+
else
|
|
122
|
+
say "#{response.message} #{path.split(/\//).last}"
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
if !response.kind_of? Net::HTTPSuccess
|
|
126
|
+
exit 1
|
|
127
|
+
end
|
|
122
128
|
end
|
|
123
129
|
end
|
|
124
130
|
end
|
data/lib/nexus/config.rb
CHANGED
data/lib/nexus/version.rb
CHANGED
|
@@ -222,5 +222,27 @@ class AbstractCommandTest < CommandTest
|
|
|
222
222
|
assert_equal( @command.config.url, "http://url" )
|
|
223
223
|
end
|
|
224
224
|
end
|
|
225
|
+
|
|
226
|
+
context "SSL verification" do
|
|
227
|
+
setup do
|
|
228
|
+
@url = "https://url"
|
|
229
|
+
@connection = Net::HTTP.new("host", 443)
|
|
230
|
+
stub(@connection).request
|
|
231
|
+
stub(Net::HTTP).new { @connection }
|
|
232
|
+
@command.config.url = @url
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
should "disable SSL verification" do
|
|
236
|
+
stub(@command.config).ssl_verify_mode { OpenSSL::SSL::VERIFY_NONE }
|
|
237
|
+
stub(Gem.configuration).verbose { 0 }
|
|
238
|
+
@command.make_request(:put, "gems/gem")
|
|
239
|
+
assert_equal( @connection.verify_mode, OpenSSL::SSL::VERIFY_NONE )
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
should "verify SSL" do
|
|
243
|
+
@command.make_request(:put, "gems/gem")
|
|
244
|
+
assert_equal( @connection.verify_mode, OpenSSL::SSL::VERIFY_PEER )
|
|
245
|
+
end
|
|
246
|
+
end
|
|
225
247
|
end
|
|
226
248
|
end
|
data/test/nexus_command_test.rb
CHANGED
|
@@ -47,7 +47,7 @@ class NexusCommandTest < CommandTest
|
|
|
47
47
|
@command.options[ :nexus_encrypt ] = true
|
|
48
48
|
mock(@command).ask( "Enter your Nexus encryption credentials (no prompt)" ) { 'behappy' }
|
|
49
49
|
@command.execute
|
|
50
|
-
assert_equal( File.read( @with + ".config" ),
|
|
50
|
+
assert_equal( File.read( @with + ".config" ),
|
|
51
51
|
File.read( @from + ".config" ) )
|
|
52
52
|
assert_equal( File.read( @with + ".secrets" ) != File.read( @from + ".secrets" ), true )
|
|
53
53
|
|
|
@@ -80,13 +80,13 @@ class NexusCommandTest < CommandTest
|
|
|
80
80
|
config_path = File.join( 'pkg', 'encconfig_prompt')
|
|
81
81
|
File.open( config_path, 'w') do |f|
|
|
82
82
|
h = { :url => 'http://example.com',
|
|
83
|
-
:authorization => 'something',
|
|
83
|
+
:authorization => 'something',
|
|
84
84
|
:token => 'pe/ty1I5sl7qD5drdsSXOBi0peRYOqdhhvRXJBjzzNY=' }
|
|
85
85
|
f.write h.to_yaml
|
|
86
86
|
end
|
|
87
87
|
stub(@command).options { {:nexus_config => config_path } }
|
|
88
88
|
stub(@command).ask_for_password { "behappy" }
|
|
89
|
-
|
|
89
|
+
|
|
90
90
|
@command.setup
|
|
91
91
|
assert_equal @command.config.encrypted?, true
|
|
92
92
|
end
|
|
@@ -109,7 +109,7 @@ class NexusCommandTest < CommandTest
|
|
|
109
109
|
@command.options[ :nexus_encrypt ] = false
|
|
110
110
|
mock(@command).ask( "Enter your Nexus encryption credentials (no prompt)" ) { 'behappy' }
|
|
111
111
|
@command.execute
|
|
112
|
-
assert_equal( File.read( @with + ".config" ),
|
|
112
|
+
assert_equal( File.read( @with + ".config" ),
|
|
113
113
|
File.read( @from + ".config" ) )
|
|
114
114
|
assert_equal( File.read( @with + ".secrets" ) != File.read( @from + ".secrets" ), true )
|
|
115
115
|
|
|
@@ -304,14 +304,13 @@ class NexusCommandTest < CommandTest
|
|
|
304
304
|
obj
|
|
305
305
|
end
|
|
306
306
|
stub_request(:put, @url).to_return(:status => 201)
|
|
307
|
-
|
|
308
307
|
@command.send_gem
|
|
309
308
|
end
|
|
310
309
|
|
|
311
310
|
should "say push was successful" do
|
|
312
|
-
assert_received(@command) { |command| command.say("Uploading gem to Nexus...") }
|
|
311
|
+
assert_received(@command) { |command| command.say("Uploading 1 gem to Nexus...") }
|
|
313
312
|
# due to webmock there is no status message
|
|
314
|
-
assert_received(@command) { |command| command.say("") }
|
|
313
|
+
assert_received(@command) { |command| command.say(" foo-0.0.0.gem") }
|
|
315
314
|
end
|
|
316
315
|
|
|
317
316
|
should "put to api" do
|
|
@@ -321,10 +320,46 @@ class NexusCommandTest < CommandTest
|
|
|
321
320
|
assert_requested(:put, @url,
|
|
322
321
|
:body => @gem_binary,
|
|
323
322
|
:headers => {
|
|
324
|
-
'Authorization' => 'key',
|
|
323
|
+
'Authorization' => 'key',
|
|
325
324
|
'Content-Type' => 'application/octet-stream'
|
|
326
325
|
})
|
|
327
326
|
end
|
|
327
|
+
|
|
328
|
+
context "non-successful push" do
|
|
329
|
+
should "say something went wrong - maybe (re)deployment is not allowed when receiving a 400 reponse" do
|
|
330
|
+
stub_request(:put, @url).to_return(:status => 400)
|
|
331
|
+
begin
|
|
332
|
+
@command.send_gem
|
|
333
|
+
rescue SystemExit => e
|
|
334
|
+
@exit_code = e.status
|
|
335
|
+
msg = "something went wrong - maybe (re)deployment is not allowed"
|
|
336
|
+
assert_received(@command) { |command| command.say(msg) }
|
|
337
|
+
assert_equal 1, @exit_code
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
should "say unauthorized when receiving a 401 response" do
|
|
342
|
+
stub_request(:put, @url).to_return(:status => 401)
|
|
343
|
+
begin
|
|
344
|
+
@command.send_gem
|
|
345
|
+
rescue SystemExit => e
|
|
346
|
+
@exit_code = e.status
|
|
347
|
+
assert_received(@command) { |command| command.say("Unauthorized") }
|
|
348
|
+
assert_equal 1, @exit_code
|
|
349
|
+
end
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
should "say something went wrong when receiving a 500 response" do
|
|
353
|
+
stub_request(:put, @url).to_return(:status => 500)
|
|
354
|
+
begin
|
|
355
|
+
@exit_code = @command.send_gem
|
|
356
|
+
rescue SystemExit => e
|
|
357
|
+
@exit_code = e.status
|
|
358
|
+
assert_received(@command) { |command| command.say("something went wrong") }
|
|
359
|
+
assert_equal 1, @exit_code
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
end
|
|
328
363
|
end
|
|
329
364
|
end
|
|
330
365
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nexus
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nick Quaranto
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2017-03-11 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rake
|
|
@@ -101,6 +101,20 @@ dependencies:
|
|
|
101
101
|
- - "<"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
103
|
version: '1.16'
|
|
104
|
+
- !ruby/object:Gem::Dependency
|
|
105
|
+
name: addressable
|
|
106
|
+
requirement: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: 2.4.0
|
|
111
|
+
type: :development
|
|
112
|
+
prerelease: false
|
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: 2.4.0
|
|
104
118
|
description: Adds a command to RubyGems for uploading gems to a nexus server.
|
|
105
119
|
email:
|
|
106
120
|
- nick@quaran.to
|
|
@@ -130,12 +144,24 @@ homepage: https://github.com/sonatype/nexus-gem
|
|
|
130
144
|
licenses:
|
|
131
145
|
- MIT-LICENSE
|
|
132
146
|
metadata: {}
|
|
133
|
-
post_install_message:
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
147
|
+
post_install_message: |2+
|
|
148
|
+
|
|
149
|
+
========================================================================
|
|
150
|
+
|
|
151
|
+
Thanks for installing Nexus gem! You can now run:
|
|
152
|
+
|
|
153
|
+
gem nexus publish your gems onto Nexus server
|
|
154
|
+
|
|
155
|
+
nbundle a bundler fork with mirror support. for bundler before 1.5.0
|
|
156
|
+
|
|
157
|
+
add a mirror with:
|
|
158
|
+
|
|
159
|
+
bundle config mirror.http://rubygems.org http://localhost:8081/nexus/content/repositories/rubygems.org
|
|
160
|
+
|
|
161
|
+
for bundler before 1.5.0 use 'nbundle' instead of 'bundle' to use the mirror
|
|
162
|
+
|
|
163
|
+
========================================================================
|
|
164
|
+
|
|
139
165
|
rdoc_options: []
|
|
140
166
|
require_paths:
|
|
141
167
|
- lib
|