nexus_cli 1.0.2 → 2.0.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.
- data/.gitignore +4 -1
- data/.travis.yml +5 -0
- data/Gemfile +40 -0
- data/Guardfile +27 -0
- data/README.md +20 -23
- data/Thorfile +66 -0
- data/VERSION +1 -1
- data/{pro → features/pro}/nexus_custom_metadata.feature +0 -0
- data/{pro → features/pro}/nexus_pro.feature +0 -0
- data/features/support/env.rb +41 -32
- data/lib/nexus_cli.rb +26 -10
- data/lib/nexus_cli/base_remote.rb +32 -0
- data/lib/nexus_cli/configuration.rb +24 -5
- data/lib/nexus_cli/connection.rb +81 -0
- data/lib/nexus_cli/mixins/artifact_actions.rb +186 -0
- data/lib/nexus_cli/mixins/global_settings_actions.rb +64 -0
- data/lib/nexus_cli/mixins/logging_actions.rb +45 -0
- data/lib/nexus_cli/{nexus_pro_remote.rb → mixins/pro/custom_metadata_actions.rb} +5 -199
- data/lib/nexus_cli/mixins/pro/smart_proxy_actions.rb +214 -0
- data/lib/nexus_cli/mixins/repository_actions.rb +245 -0
- data/lib/nexus_cli/mixins/user_actions.rb +125 -0
- data/lib/nexus_cli/remote/oss_remote.rb +11 -0
- data/lib/nexus_cli/remote/pro_remote.rb +59 -0
- data/lib/nexus_cli/remote_factory.rb +24 -0
- data/lib/nexus_cli/tasks.rb +3 -3
- data/spec/fixtures/nexus.config +4 -0
- data/spec/spec_helper.rb +14 -2
- data/spec/{configuration_spec.rb → unit/nexus_cli/configuration_spec.rb} +0 -0
- data/spec/{oss_remote_spec.rb → unit/nexus_cli/oss_remote_spec.rb} +15 -5
- data/spec/{pro_remote_spec.rb → unit/nexus_cli/pro_remote_spec.rb} +6 -1
- metadata +32 -17
- data/Gemfile.lock +0 -65
- data/lib/nexus_cli/kernel.rb +0 -33
- data/lib/nexus_cli/nexus_oss_remote.rb +0 -636
- data/lib/nexus_cli/nexus_remote_factory.rb +0 -65
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
@@ -1,2 +1,42 @@
|
|
1
|
+
source :rubygems
|
2
|
+
|
1
3
|
gemspec
|
2
4
|
|
5
|
+
group :development do
|
6
|
+
gem 'yard'
|
7
|
+
gem 'spork'
|
8
|
+
gem 'guard'
|
9
|
+
gem 'guard-cucumber'
|
10
|
+
gem 'guard-yard'
|
11
|
+
gem 'guard-rspec'
|
12
|
+
gem 'guard-spork', platforms: :ruby
|
13
|
+
gem 'coolline'
|
14
|
+
gem 'redcarpet'
|
15
|
+
|
16
|
+
require 'rbconfig'
|
17
|
+
|
18
|
+
if RbConfig::CONFIG['target_os'] =~ /darwin/i
|
19
|
+
gem 'growl', require: false
|
20
|
+
gem 'rb-fsevent', require: false
|
21
|
+
|
22
|
+
if `uname`.strip == 'Darwin' && `sw_vers -productVersion`.strip >= '10.8'
|
23
|
+
gem 'terminal-notifier-guard', '~> 1.5.3', require: false
|
24
|
+
end rescue Errno::ENOENT
|
25
|
+
|
26
|
+
elsif RbConfig::CONFIG['target_os'] =~ /linux/i
|
27
|
+
gem 'libnotify', '~> 0.8.0', require: false
|
28
|
+
gem 'rb-inotify', require: false
|
29
|
+
|
30
|
+
elsif RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
|
31
|
+
gem 'win32console', require: false
|
32
|
+
gem 'rb-notifu', '>= 0.0.4', require: false
|
33
|
+
gem 'wdm', require: false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
group :test do
|
38
|
+
gem 'thor'
|
39
|
+
gem 'rake', '>= 0.9.2.2'
|
40
|
+
gem 'rspec'
|
41
|
+
gem 'fuubar'
|
42
|
+
end
|
data/Guardfile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
notification :off
|
2
|
+
|
3
|
+
guard 'spork' do
|
4
|
+
watch('Gemfile')
|
5
|
+
watch('spec/spec_helper.rb') { :rspec }
|
6
|
+
watch(%r{^spec/support/.+\.rb$}) { :rspec }
|
7
|
+
end
|
8
|
+
|
9
|
+
guard 'yard', stdout: '/dev/null', stderr: '/dev/null' do
|
10
|
+
watch(%r{app/.+\.rb})
|
11
|
+
watch(%r{lib/.+\.rb})
|
12
|
+
watch(%r{ext/.+\.c})
|
13
|
+
end
|
14
|
+
|
15
|
+
guard 'rspec', cli: "--color --drb --format Fuubar", all_on_start: false, all_after_pass: false do
|
16
|
+
watch(%r{^spec/unit/.+_spec\.rb$})
|
17
|
+
|
18
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
|
19
|
+
watch('spec/spec_helper.rb') { "spec" }
|
20
|
+
watch(%r{^spec/support/.+\.rb$}) { "spec" }
|
21
|
+
end
|
22
|
+
|
23
|
+
guard 'cucumber', cli: "--drb --format pretty --tags ~@no_run --tags ~@wip", all_on_start: false, all_after_pass: false do
|
24
|
+
watch(%r{^features/.+\.feature$})
|
25
|
+
watch(%r{^features/support/.+$}) { 'features' }
|
26
|
+
watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
|
27
|
+
end
|
data/README.md
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# Nexus CLI
|
2
|
+
[](https://travis-ci.org/RiotGames/nexus_cli)
|
3
3
|
|
4
4
|
A CLI wrapper around Sonatype Nexus REST calls.
|
5
5
|
|
6
|
-
Requirements
|
7
|
-
============
|
6
|
+
# Requirements
|
8
7
|
|
9
8
|
* Ruby
|
10
9
|
|
11
|
-
Installation
|
12
|
-
============
|
10
|
+
# Installation
|
13
11
|
|
14
12
|
1. Install the Gem
|
15
13
|
2. Create a file in your user's home directory named `.nexus_cli`
|
@@ -22,37 +20,36 @@ username: "username"
|
|
22
20
|
password: "password"
|
23
21
|
```
|
24
22
|
|
25
|
-
Usage
|
26
|
-
=====
|
23
|
+
# Usage
|
27
24
|
|
28
25
|
There are two calls that can be made. push\_artifact and pull\_artifact. Both calls will push or pull artifacts from Nexus using the Maven-flavored syntax: `groupId:artifactId:version:extension`
|
29
26
|
|
30
|
-
Pull Artifact Example
|
31
|
-
|
27
|
+
## Pull Artifact Example
|
28
|
+
|
32
29
|
```
|
33
30
|
nexus-cli pull_artifact com.mycompany.artifacts:myartifact:1.0.0:tgz
|
34
31
|
```
|
35
|
-
|
36
|
-
|
32
|
+
|
33
|
+
## Push Artifact Example
|
34
|
+
|
37
35
|
```
|
38
36
|
nexus-cli push_artifact com.mycompany.artifacts:myartifact:1.0.0:tgz ~/path/to/file/to/push/myartifact.tgz
|
39
37
|
```
|
40
38
|
|
41
|
-
License and Author
|
42
|
-
==================
|
39
|
+
# License and Author
|
43
40
|
|
44
41
|
Author:: Kyle Allan (<kallan@riotgames.com>)
|
45
42
|
|
46
43
|
Copyright:: 2012 Riot Games Inc.
|
47
44
|
|
48
|
-
|
49
|
-
|
50
|
-
|
45
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
46
|
+
you may not use this file except in compliance with the License.
|
47
|
+
You may obtain a copy of the License at
|
51
48
|
|
52
|
-
|
49
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
53
50
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
51
|
+
Unless required by applicable law or agreed to in writing, software
|
52
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
53
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
54
|
+
See the License for the specific language governing permissions and
|
55
|
+
limitations under the License.
|
data/Thorfile
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
require 'bundler'
|
5
|
+
require 'bundler/setup'
|
6
|
+
|
7
|
+
require 'thor/rake_compat'
|
8
|
+
require 'nexus_cli'
|
9
|
+
|
10
|
+
class Default < Thor
|
11
|
+
include Thor::RakeCompat
|
12
|
+
Bundler::GemHelper.install_tasks
|
13
|
+
|
14
|
+
desc "build", "Build nexus-cli-#{NexusCli.version}.gem into the pkg directory"
|
15
|
+
def build
|
16
|
+
Rake::Task["build"].execute
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "install", "Build and install nexus-cli-#{NexusCli.version}.gem into system gems"
|
20
|
+
def install
|
21
|
+
Rake::Task["install"].execute
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "release", "Create tag v#{NexusCli.version} and build and push nexus-cli-#{NexusCli.version}.gem to Rubygems"
|
25
|
+
def release
|
26
|
+
Rake::Task["release"].execute
|
27
|
+
end
|
28
|
+
|
29
|
+
class Spec < Thor
|
30
|
+
include Thor::Actions
|
31
|
+
|
32
|
+
namespace :spec
|
33
|
+
default_task :all
|
34
|
+
|
35
|
+
desc "all", "run all tests"
|
36
|
+
def all
|
37
|
+
unless run_unit && run_acceptance
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "unit", "run only unit tests"
|
43
|
+
def unit
|
44
|
+
unless run_unit
|
45
|
+
exit 1
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "acceptance", "Run acceptance tests"
|
50
|
+
def acceptance
|
51
|
+
unless run_acceptance
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
no_tasks do
|
57
|
+
def run_unit
|
58
|
+
run "rspec --color --format=documentation spec"
|
59
|
+
end
|
60
|
+
|
61
|
+
def run_acceptance
|
62
|
+
run "cucumber --color --format pretty"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0
|
File without changes
|
File without changes
|
data/features/support/env.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
require '
|
4
|
-
require 'rspec'
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
require 'spork'
|
5
4
|
|
6
5
|
module ArubaOverrides
|
7
6
|
def detect_ruby(cmd)
|
@@ -14,42 +13,52 @@ module ArubaOverrides
|
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
|
-
|
16
|
+
Spork.prefork do
|
17
|
+
require 'aruba/cucumber'
|
18
|
+
require 'nexus_cli'
|
19
|
+
require 'rspec'
|
18
20
|
|
19
|
-
|
20
|
-
@aruba_timeout_seconds = 10
|
21
|
-
end
|
21
|
+
World(ArubaOverrides)
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
end
|
23
|
+
Before do
|
24
|
+
@aruba_timeout_seconds = 10
|
25
|
+
end
|
26
26
|
|
27
|
-
def
|
28
|
-
|
29
|
-
end
|
27
|
+
def get_overrides_string
|
28
|
+
@overrides_string ||= "url:http://localhost:8081/nexus repository:releases username:admin password:admin123"
|
29
|
+
end
|
30
30
|
|
31
|
-
def
|
32
|
-
|
33
|
-
key, value = override.split(":")
|
34
|
-
overrides_hash[key] = value
|
35
|
-
overrides_hash
|
31
|
+
def get_overrides
|
32
|
+
@overrides ||= {'url' => 'http://localhost:8081/nexus', 'repository' => 'releases', 'username' => 'admin', 'password' => 'admin123'}
|
36
33
|
end
|
37
34
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
35
|
+
def create_step_overrides(overrides)
|
36
|
+
overrides_hash = overrides.split(" ").inject({}) do |overrides_hash, override|
|
37
|
+
key, value = override.split(":")
|
38
|
+
overrides_hash[key] = value
|
39
|
+
overrides_hash
|
40
|
+
end
|
41
|
+
|
42
|
+
step_overrides = get_overrides.merge(overrides_hash)
|
43
|
+
step_overrides.to_a.inject("") do |overrides_string, pair|
|
44
|
+
overrides_string << pair.join(":")
|
45
|
+
overrides_string << " "
|
46
|
+
end
|
42
47
|
end
|
43
|
-
end
|
44
48
|
|
45
|
-
def temp_dir
|
46
|
-
|
47
|
-
end
|
49
|
+
def temp_dir
|
50
|
+
@tmpdir ||= Dir.mktmpdir
|
51
|
+
end
|
48
52
|
|
49
|
-
def nexus_remote
|
50
|
-
|
53
|
+
def nexus_remote
|
54
|
+
@nexus_remote ||= NexusCli::RemoteFactory.create(get_overrides)
|
55
|
+
end
|
56
|
+
|
57
|
+
at_exit do
|
58
|
+
FileUtils.rm_rf(temp_dir)
|
59
|
+
end
|
51
60
|
end
|
52
61
|
|
53
|
-
|
54
|
-
|
55
|
-
end
|
62
|
+
Spork.each_run do
|
63
|
+
require 'nexus_cli'
|
64
|
+
end
|
data/lib/nexus_cli.rb
CHANGED
@@ -1,17 +1,33 @@
|
|
1
|
-
require '
|
2
|
-
require 'nexus_cli/cli'
|
1
|
+
require 'httpclient'
|
3
2
|
require 'nexus_cli/errors'
|
4
|
-
require '
|
5
|
-
require '
|
6
|
-
require 'nexus_cli/nexus_oss_remote'
|
7
|
-
require 'nexus_cli/nexus_pro_remote'
|
8
|
-
require 'nexus_cli/configuration'
|
9
|
-
require 'nexus_cli/n3_metadata'
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'yaml'
|
10
5
|
|
11
6
|
module NexusCli
|
7
|
+
DEFAULT_ACCEPT_HEADER = {
|
8
|
+
"Accept" => "application/json"
|
9
|
+
}.freeze
|
10
|
+
|
11
|
+
DEFAULT_CONTENT_TYPE_HEADER = {
|
12
|
+
"Content-Type" => "application/json"
|
13
|
+
}.freeze
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
+
autoload :Tasks, 'nexus_cli/tasks'
|
16
|
+
autoload :Cli, 'nexus_cli/cli'
|
17
|
+
autoload :Connection, 'nexus_cli/connection'
|
18
|
+
autoload :RemoteFactory, 'nexus_cli/remote_factory'
|
19
|
+
autoload :BaseRemote, 'nexus_cli/base_remote'
|
20
|
+
autoload :OSSRemote, 'nexus_cli/remote/oss_remote'
|
21
|
+
autoload :ProRemote, 'nexus_cli/remote/pro_remote'
|
22
|
+
autoload :Configuration, 'nexus_cli/configuration'
|
23
|
+
autoload :N3Metadata, 'nexus_cli/n3_metadata'
|
24
|
+
autoload :ArtifactActions, 'nexus_cli/mixins/artifact_actions'
|
25
|
+
autoload :GlobalSettingsActions, 'nexus_cli/mixins/global_settings_actions'
|
26
|
+
autoload :UserActions, 'nexus_cli/mixins/user_actions'
|
27
|
+
autoload :RepositoryActions, 'nexus_cli/mixins/repository_actions'
|
28
|
+
autoload :LoggingActions, 'nexus_cli/mixins/logging_actions'
|
29
|
+
autoload :CustomMetadataActions, 'nexus_cli/mixins/pro/custom_metadata_actions'
|
30
|
+
autoload :SmartProxyActions, 'nexus_cli/mixins/pro/smart_proxy_actions'
|
15
31
|
|
16
32
|
class << self
|
17
33
|
def root
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module NexusCli
|
2
|
+
class BaseRemote
|
3
|
+
attr_reader :configuration
|
4
|
+
attr_reader :connection
|
5
|
+
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :@connection, :status, :nexus_url, :nexus, :sanitize_for_id
|
8
|
+
|
9
|
+
# @param [Hash] overrides
|
10
|
+
# @param [Boolean] ssl_verify
|
11
|
+
def initialize(overrides, ssl_verify=true)
|
12
|
+
@configuration = Configuration::parse(overrides)
|
13
|
+
@connection = Connection.new(configuration, ssl_verify)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Parses a given artifact string into its
|
17
|
+
# four, distinct, Maven pieces.
|
18
|
+
#
|
19
|
+
# @param artifact [String] the Maven identifier
|
20
|
+
#
|
21
|
+
# @return [Array<String>] an Array with four elements
|
22
|
+
def parse_artifact_string(artifact)
|
23
|
+
split_artifact = artifact.split(":")
|
24
|
+
if(split_artifact.size < 4)
|
25
|
+
raise ArtifactMalformedException
|
26
|
+
end
|
27
|
+
group_id, artifact_id, version, extension = split_artifact
|
28
|
+
version.upcase! if version.casecmp("latest")
|
29
|
+
return group_id, artifact_id, version, extension
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -2,15 +2,34 @@ require 'extlib'
|
|
2
2
|
|
3
3
|
module NexusCli
|
4
4
|
module Configuration
|
5
|
+
DEFAULT_FILE = "~/.nexus_cli".freeze
|
6
|
+
|
5
7
|
class << self
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
attr_writer :path
|
9
|
+
|
10
|
+
# The filepath to the nexus cli configuration file
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def path
|
14
|
+
@path || File.expand_path(ENV['NEXUS_CONFIG'] || DEFAULT_FILE)
|
15
|
+
end
|
16
|
+
|
17
|
+
# @param [Hash] overrides
|
18
|
+
#
|
19
|
+
# @return [Hash]
|
20
|
+
def parse(overrides = {})
|
21
|
+
config = File.exists?(self.path) ? YAML::load_file(self.path) : Hash.new
|
22
|
+
|
9
23
|
if config.nil? && (overrides.nil? || overrides.empty?)
|
10
24
|
raise MissingSettingsFileException
|
11
25
|
end
|
12
|
-
|
26
|
+
|
27
|
+
unless overrides.nil? || overrides.empty?
|
28
|
+
overrides.each { |key, value| config[key] = value }
|
29
|
+
end
|
30
|
+
|
13
31
|
validate_config(config)
|
32
|
+
|
14
33
|
config["repository"] = config["repository"].gsub(" ", "_").downcase
|
15
34
|
config
|
16
35
|
end
|
@@ -22,4 +41,4 @@ module NexusCli
|
|
22
41
|
end
|
23
42
|
end
|
24
43
|
end
|
25
|
-
end
|
44
|
+
end
|