kpm 0.1.7 → 0.2.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/kpm.gemspec +1 -0
- data/lib/kpm/base_artifact.rb +29 -18
- data/lib/kpm/base_installer.rb +45 -15
- data/lib/kpm/installer.rb +4 -2
- data/lib/kpm/killbill_plugin_artifact.rb +13 -0
- data/lib/kpm/plugins_directory.rb +5 -0
- data/lib/kpm/plugins_manager.rb +9 -6
- data/lib/kpm/tasks.rb +93 -34
- data/lib/kpm/version.rb +1 -1
- data/spec/kpm/remote/base_artifact_spec.rb +0 -23
- data/spec/kpm/remote/base_installer_spec.rb +96 -0
- data/spec/kpm/remote/killbill_plugin_artifact_spec.rb +26 -0
- metadata +72 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af4823a1ad26ca690e372df3596841ae7fa54ee9
|
4
|
+
data.tar.gz: ade7725741e69b929bfa0fd9d47d6fa6326f4695
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92361d67b9abc0bd2da406fc460481aa8b74176cddf5d4b5b11381428750fe1b417ac0b5bb2796512e52e65963427793cd293dfbf56d53f02672f82b6b0430d2
|
7
|
+
data.tar.gz: b9f1727cdd593dfb48fb4b5c6ef16e2caf272141253100b8566ee7a808b9c74577e652f5742863deb3804bfacb13ff793a37927f151b4bccbbaa895d0ca9f1b1
|
data/kpm.gemspec
CHANGED
@@ -42,6 +42,7 @@ Gem::Specification.new do |s|
|
|
42
42
|
s.add_dependency 'highline', '~> 1.6.21'
|
43
43
|
s.add_dependency 'nexus_cli', '~> 4.1.0'
|
44
44
|
s.add_dependency 'thor', '~> 0.19.1'
|
45
|
+
s.add_dependency 'rubyzip', '~>1.2.0'
|
45
46
|
|
46
47
|
s.add_development_dependency 'rake', '>= 10.0.0', '< 11.0.0'
|
47
48
|
s.add_development_dependency 'rspec', '~> 2.12.0'
|
data/lib/kpm/base_artifact.rb
CHANGED
@@ -37,7 +37,7 @@ module KPM
|
|
37
37
|
class << self
|
38
38
|
def pull(logger, group_id, artifact_id, packaging='jar', classifier=nil, version='LATEST', destination_path=nil, sha1_file=nil, force_download=false, verify_sha1=true, overrides={}, ssl_verify=true)
|
39
39
|
coordinate_map = {:group_id => group_id, :artifact_id => artifact_id, :packaging => packaging, :classifier => classifier, :version => version}
|
40
|
-
pull_and_put_in_place(logger, coordinate_map,
|
40
|
+
pull_and_put_in_place(logger, coordinate_map, nil, destination_path, false, sha1_file, force_download, verify_sha1, overrides, ssl_verify)
|
41
41
|
end
|
42
42
|
|
43
43
|
def pull_from_fs(logger, file_path, destination_path=nil)
|
@@ -57,9 +57,10 @@ module KPM
|
|
57
57
|
|
58
58
|
protected
|
59
59
|
|
60
|
-
def pull_and_put_in_place(logger, coordinate_map, destination_path=nil, skip_top_dir=true, sha1_file=nil, force_download=false, verify_sha1=true, overrides={}, ssl_verify=true)
|
60
|
+
def pull_and_put_in_place(logger, coordinate_map, plugin_name, destination_path=nil, skip_top_dir=true, sha1_file=nil, force_download=false, verify_sha1=true, overrides={}, ssl_verify=true)
|
61
61
|
# Build artifact info
|
62
62
|
artifact_info = artifact_info(logger, coordinate_map, overrides, ssl_verify)
|
63
|
+
artifact_info[:plugin_name] = plugin_name
|
63
64
|
populate_fs_info(artifact_info, destination_path)
|
64
65
|
|
65
66
|
# Update with resolved version in case 'LATEST' was passed
|
@@ -73,9 +74,12 @@ module KPM
|
|
73
74
|
# We need to do a bit of magic to make sure that artifact_info[:bundle_dir] is correctly populated when we bail early
|
74
75
|
if artifact_info[:is_tgz] && coordinate_map[:artifact_id] != 'killbill-platform-osgi-bundles-defaultbundles'
|
75
76
|
plugin_dir = File.split(artifact_info[:dir_name])[0]
|
76
|
-
|
77
|
-
|
78
|
-
|
77
|
+
plugin_name = artifact_info[:plugin_name]
|
78
|
+
unless plugin_name
|
79
|
+
plugins_manager = PluginsManager.new(plugin_dir, logger)
|
80
|
+
artifact_id = coordinates.split(':')[1]
|
81
|
+
plugin_name = plugins_manager.guess_plugin_name(artifact_id)
|
82
|
+
end
|
79
83
|
if plugin_name.nil?
|
80
84
|
logger.warn("Failed to guess plugin_name for #{coordinates}: artifact_info[:bundle_dir] will not be populated correctly")
|
81
85
|
else
|
@@ -139,6 +143,19 @@ module KPM
|
|
139
143
|
# Unclear if this is even possible
|
140
144
|
return false if artifact_info[:sha1].nil?
|
141
145
|
|
146
|
+
# If tgz artifact, check if expected exploded folder exists
|
147
|
+
if artifact_info[:is_tgz]
|
148
|
+
artifact_path = Pathname.new(artifact_info[:file_path])
|
149
|
+
if artifact_info[:plugin_name]
|
150
|
+
artifact_path = artifact_path.join(artifact_info[:plugin_name]).join(artifact_info[:version])
|
151
|
+
end
|
152
|
+
return false if !artifact_path.exist?
|
153
|
+
# Else, exit early if file_path does not exist or is a directory
|
154
|
+
elsif !File.exists?(artifact_info[:file_path]) ||
|
155
|
+
File.directory?(artifact_info[:file_path])
|
156
|
+
return false
|
157
|
+
end
|
158
|
+
|
142
159
|
# Check entry in sha1_file if exists
|
143
160
|
if sha1_file && File.exists?(sha1_file)
|
144
161
|
sha1_checker = Sha1Checker.from_file(sha1_file)
|
@@ -146,15 +163,14 @@ module KPM
|
|
146
163
|
return true if local_sha1 == artifact_info[:sha1]
|
147
164
|
end
|
148
165
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
166
|
+
if artifact_info[:is_tgz]
|
167
|
+
# tgz artifact seems to be installed, but is not in the sha1 file, so do not skip it
|
168
|
+
false
|
169
|
+
else
|
170
|
+
# Finally check if remote_sha1 matches what we have locally
|
171
|
+
local_sha1 = Digest::SHA1.file(artifact_info[:file_path]).hexdigest
|
172
|
+
local_sha1 == artifact_info[:sha1]
|
153
173
|
end
|
154
|
-
|
155
|
-
# Finally check if remote_sha1 matches what we have locally
|
156
|
-
local_sha1 = Digest::SHA1.file(artifact_info[:file_path]).hexdigest
|
157
|
-
local_sha1 == artifact_info[:sha1]
|
158
174
|
end
|
159
175
|
|
160
176
|
def artifact_info(logger, coordinate_map, overrides={}, ssl_verify=true)
|
@@ -264,11 +280,6 @@ module KPM
|
|
264
280
|
|
265
281
|
# Magic methods...
|
266
282
|
|
267
|
-
def is_ruby_plugin_and_should_skip_top_dir(group_id, artifact_id)
|
268
|
-
# The second check is for custom ruby plugins
|
269
|
-
group_id == KILLBILL_RUBY_PLUGIN_GROUP_ID || artifact_id.include?('plugin')
|
270
|
-
end
|
271
|
-
|
272
283
|
def path_looks_like_a_directory(path)
|
273
284
|
# It already is!
|
274
285
|
return true if File.directory?(path)
|
data/lib/kpm/base_installer.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'pathname'
|
2
|
+
require 'zip'
|
2
3
|
|
3
4
|
module KPM
|
4
5
|
class BaseInstaller
|
@@ -7,10 +8,7 @@ module KPM
|
|
7
8
|
SHA1_FILENAME = 'sha1.yml'
|
8
9
|
DEFAULT_BUNDLES_DIR = Pathname.new('/var').join('tmp').join('bundles').to_s
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
def initialize(logger, nexus_config, nexus_ssl_verify)
|
11
|
+
def initialize(logger, nexus_config = nil, nexus_ssl_verify = nil)
|
14
12
|
@logger = logger
|
15
13
|
@nexus_config = nexus_config
|
16
14
|
@nexus_ssl_verify = nexus_ssl_verify
|
@@ -61,17 +59,14 @@ module KPM
|
|
61
59
|
@nexus_ssl_verify)
|
62
60
|
end
|
63
61
|
|
64
|
-
|
65
|
-
|
66
|
-
def install_plugin(plugin_key, raw_kb_version=nil, specified_group_id=nil, specified_artifact_id=nil, specified_packaging=nil, specified_classifier=nil, specified_version=nil, bundles_dir=nil, specified_type=nil, force_download=false, verify_sha1=true)
|
62
|
+
def install_plugin(plugin_key, raw_kb_version=nil, specified_group_id=nil, specified_artifact_id=nil, specified_packaging=nil, specified_classifier=nil, specified_version=nil, bundles_dir=nil, specified_type=nil, force_download=false, verify_sha1=true, verify_jruby_jar=false)
|
67
63
|
|
68
64
|
# plugin_key needs to exist
|
69
65
|
if plugin_key.nil?
|
70
|
-
@logger.warn(
|
66
|
+
@logger.warn('Aborting installation: User needs to specify a pluginKey')
|
71
67
|
return nil
|
72
68
|
end
|
73
69
|
|
74
|
-
|
75
70
|
# Lookup artifact and perform validation against input
|
76
71
|
looked_up_group_id, looked_up_artifact_id, looked_up_packaging, looked_up_classifier, looked_up_version, looked_up_type = KPM::PluginsDirectory.lookup(plugin_key, true, raw_kb_version)
|
77
72
|
return if !validate_installation_arg(plugin_key, 'group_id', specified_group_id, looked_up_group_id)
|
@@ -109,6 +104,9 @@ module KPM
|
|
109
104
|
version = specified_version || looked_up_version || LATEST_VERSION
|
110
105
|
destination = plugins_dir.join('java').join(artifact_id).join(version)
|
111
106
|
else
|
107
|
+
|
108
|
+
warn_if_jruby_jar_missing(bundles_dir) if verify_jruby_jar
|
109
|
+
|
112
110
|
group_id = specified_group_id || looked_up_group_id || KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_GROUP_ID
|
113
111
|
packaging = specified_packaging || looked_up_packaging || KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_PACKAGING
|
114
112
|
classifier = specified_classifier || looked_up_classifier || KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_CLASSIFIER
|
@@ -116,7 +114,8 @@ module KPM
|
|
116
114
|
destination = plugins_dir.join('ruby')
|
117
115
|
end
|
118
116
|
sha1_file = "#{bundles_dir}/#{SHA1_FILENAME}"
|
119
|
-
|
117
|
+
plugins_manager = PluginsManager.new(plugins_dir, @logger)
|
118
|
+
_, plugin_name = plugins_manager.get_plugin_key_and_name(plugin_key)
|
120
119
|
|
121
120
|
# Before we do the install we verify that the entry we have in the plugin_identifiers.json matches our current request
|
122
121
|
coordinate_map = {:group_id => group_id, :artifact_id => artifact_id, :packaging => packaging, :classifier => classifier}
|
@@ -130,6 +129,7 @@ module KPM
|
|
130
129
|
packaging,
|
131
130
|
classifier,
|
132
131
|
version,
|
132
|
+
plugin_name,
|
133
133
|
destination,
|
134
134
|
sha1_file,
|
135
135
|
force_download,
|
@@ -168,20 +168,19 @@ module KPM
|
|
168
168
|
artifact_info
|
169
169
|
end
|
170
170
|
|
171
|
-
def uninstall_plugin(
|
172
|
-
|
171
|
+
def uninstall_plugin(plugin_name_or_key, plugin_version=nil, bundles_dir=nil)
|
173
172
|
bundles_dir = Pathname.new(bundles_dir || DEFAULT_BUNDLES_DIR).expand_path
|
174
173
|
plugins_dir = bundles_dir.join('plugins')
|
175
174
|
|
176
175
|
plugins_manager = PluginsManager.new(plugins_dir, @logger)
|
177
176
|
|
178
|
-
plugin_name = plugins_manager.
|
177
|
+
plugin_key, plugin_name = plugins_manager.get_plugin_key_and_name(plugin_name_or_key)
|
179
178
|
if plugin_name.nil?
|
180
|
-
@logger.warn("Cannot uninstall plugin: Unknown
|
179
|
+
@logger.warn("Cannot uninstall plugin: Unknown plugin name or plugin key = #{plugin_name_or_key}");
|
181
180
|
return
|
182
181
|
end
|
183
182
|
|
184
|
-
modified = plugins_manager.uninstall(plugin_name, plugin_version)
|
183
|
+
modified = plugins_manager.uninstall(plugin_name, plugin_version || :all)
|
185
184
|
plugins_manager.remove_plugin_identifier_key(plugin_key)
|
186
185
|
modified
|
187
186
|
end
|
@@ -262,5 +261,36 @@ module KPM
|
|
262
261
|
plugins_manager = PluginsManager.new(plugins_dir, @logger)
|
263
262
|
plugins_manager.set_active(artifact_info[:bundle_dir])
|
264
263
|
end
|
264
|
+
|
265
|
+
def warn_if_jruby_jar_missing(bundles_dir)
|
266
|
+
platform_dir = bundles_dir.join('platform')
|
267
|
+
jruby_jar = platform_dir.join('jruby.jar')
|
268
|
+
if !File.exists?(jruby_jar)
|
269
|
+
@logger.warn(" Missing installation for jruby.jar under #{platform_dir}. This is required for ruby plugin installation");
|
270
|
+
else
|
271
|
+
version = extract_jruby_jar_version(jruby_jar)
|
272
|
+
if version
|
273
|
+
@logger.info(" Detected jruby.jar version #{version}")
|
274
|
+
else
|
275
|
+
@logger.warn(" Failed to detect jruby.jar version for #{jruby_jar}");
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
def extract_jruby_jar_version(jruby_jar)
|
281
|
+
selected_entries = Zip::File.open(jruby_jar) do |zip_file|
|
282
|
+
zip_file.select do |entry|
|
283
|
+
entry.name == 'META-INF/maven/org.kill-bill.billing/killbill-platform-osgi-bundles-jruby/pom.properties'
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
if selected_entries && selected_entries.size == 1
|
288
|
+
zip_entry = selected_entries[0]
|
289
|
+
content = zip_entry.get_input_stream.read
|
290
|
+
return content.split("\n").select { |e| e.start_with?("version")}[0].split("=")[1]
|
291
|
+
end
|
292
|
+
nil
|
293
|
+
end
|
294
|
+
|
265
295
|
end
|
266
296
|
end
|
data/lib/kpm/installer.rb
CHANGED
@@ -81,7 +81,7 @@ module KPM
|
|
81
81
|
|
82
82
|
infos = []
|
83
83
|
@config['plugins']['java'].each do |plugin|
|
84
|
-
infos << install_plugin(plugin['name'], nil, plugin['group_id'], plugin['artifact_id'], plugin['packaging'], plugin['classifier'], plugin['version'], @config['plugins_dir'], 'java', force_download, verify_sha1)
|
84
|
+
infos << install_plugin(plugin['name'], nil, plugin['group_id'], plugin['artifact_id'], plugin['packaging'], plugin['classifier'], plugin['version'], @config['plugins_dir'], 'java', force_download, verify_sha1, false)
|
85
85
|
end
|
86
86
|
|
87
87
|
infos
|
@@ -90,9 +90,11 @@ module KPM
|
|
90
90
|
def install_ruby_plugins(force_download, verify_sha1)
|
91
91
|
return if @config['plugins'].nil? or @config['plugins']['ruby'].nil?
|
92
92
|
|
93
|
+
verify_jruby_jar=true
|
93
94
|
infos = []
|
94
95
|
@config['plugins']['ruby'].each do |plugin|
|
95
|
-
infos << install_plugin(plugin['name'], nil, plugin['group_id'], plugin['artifact_id'], plugin['packaging'], plugin['classifier'], plugin['version'], @config['plugins_dir'], 'ruby', force_download, verify_sha1)
|
96
|
+
infos << install_plugin(plugin['name'], nil, plugin['group_id'], plugin['artifact_id'], plugin['packaging'], plugin['classifier'], plugin['version'], @config['plugins_dir'], 'ruby', force_download, verify_sha1, verify_jruby_jar)
|
97
|
+
verify_jruby_jar=false
|
96
98
|
end
|
97
99
|
|
98
100
|
infos
|
@@ -4,6 +4,11 @@ require 'set'
|
|
4
4
|
module KPM
|
5
5
|
class KillbillPluginArtifact < BaseArtifact
|
6
6
|
class << self
|
7
|
+
def pull(logger, group_id, artifact_id, packaging='jar', classifier=nil, version='LATEST', plugin_name=nil, destination_path=nil, sha1_file=nil, force_download=false, verify_sha1=true, overrides={}, ssl_verify=true)
|
8
|
+
coordinate_map = {:group_id => group_id, :artifact_id => artifact_id, :packaging => packaging, :classifier => classifier, :version => version}
|
9
|
+
pull_and_put_in_place(logger, coordinate_map, plugin_name, destination_path, is_ruby_plugin_and_should_skip_top_dir(group_id, artifact_id), sha1_file, force_download, verify_sha1, overrides, ssl_verify)
|
10
|
+
end
|
11
|
+
|
7
12
|
def versions(overrides={}, ssl_verify=true)
|
8
13
|
plugins = {:java => {}, :ruby => {}}
|
9
14
|
|
@@ -20,6 +25,14 @@ module KPM
|
|
20
25
|
|
21
26
|
plugins
|
22
27
|
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
# Magic methods...
|
31
|
+
|
32
|
+
def is_ruby_plugin_and_should_skip_top_dir(group_id, artifact_id)
|
33
|
+
# The second check is for custom ruby plugins
|
34
|
+
group_id == KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_GROUP_ID || artifact_id.include?('plugin')
|
35
|
+
end
|
23
36
|
end
|
24
37
|
end
|
25
38
|
end
|
@@ -14,6 +14,11 @@ module KPM
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
|
18
|
+
def self.list_plugins(latest=false, kb_version)
|
19
|
+
all(latest).inject({}) { |out, (key, val)| out[key]=val[:versions][kb_version.to_sym] if val[:versions].key?(kb_version.to_sym) ; out}
|
20
|
+
end
|
21
|
+
|
17
22
|
# Note: this API is used in Docker images (see kpm_generator.rb, careful when changing it!)
|
18
23
|
def self.lookup(raw_plugin_key, latest=false, raw_kb_version=nil)
|
19
24
|
plugin_key = raw_plugin_key.to_s.downcase
|
data/lib/kpm/plugins_manager.rb
CHANGED
@@ -89,7 +89,6 @@ module KPM
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def remove_plugin_identifier_key(plugin_key)
|
92
|
-
|
93
92
|
identifiers = read_plugin_identifiers
|
94
93
|
# If key does not already exists we update it, if not nothing to do.
|
95
94
|
if identifiers.has_key?(plugin_key)
|
@@ -100,14 +99,18 @@ module KPM
|
|
100
99
|
identifiers
|
101
100
|
end
|
102
101
|
|
103
|
-
|
104
|
-
def get_plugin_name_from_key(plugin_key)
|
102
|
+
def get_plugin_key_and_name(plugin_name_or_key)
|
105
103
|
identifiers = read_plugin_identifiers
|
106
|
-
|
107
|
-
|
104
|
+
if identifiers.has_key?(plugin_name_or_key)
|
105
|
+
# It's a plugin key
|
106
|
+
[plugin_name_or_key, identifiers[plugin_name_or_key]['plugin_name']]
|
107
|
+
else
|
108
|
+
# Check it's already a plugin name
|
109
|
+
identifiers.each { |plugin_key, entry| return [plugin_key, plugin_name_or_key] if entry['plugin_name'] == plugin_name_or_key }
|
110
|
+
nil
|
111
|
+
end
|
108
112
|
end
|
109
113
|
|
110
|
-
|
111
114
|
def guess_plugin_name(artifact_id)
|
112
115
|
return nil if artifact_id.nil?
|
113
116
|
captures = artifact_id.scan(/(.*)-plugin/)
|
data/lib/kpm/tasks.rb
CHANGED
@@ -44,7 +44,7 @@ module KPM
|
|
44
44
|
:type => :boolean,
|
45
45
|
:default => true,
|
46
46
|
:desc => 'Validate sha1 sum'
|
47
|
-
desc 'pull_kb_server_war version', 'Pulls Kill Bill server war from Sonatype and places it on your machine.'
|
47
|
+
desc 'pull_kb_server_war <version>', 'Pulls Kill Bill server war from Sonatype and places it on your machine. If version was not specified it uses the latest released version.'
|
48
48
|
def pull_kb_server_war(version='LATEST')
|
49
49
|
response = KillbillServerArtifact.pull(logger,
|
50
50
|
KillbillServerArtifact::KILLBILL_GROUP_ID,
|
@@ -82,7 +82,7 @@ module KPM
|
|
82
82
|
:type => :boolean,
|
83
83
|
:default => true,
|
84
84
|
:desc => 'Validates sha1 sum'
|
85
|
-
desc 'pull_kp_server_war version', 'Pulls Kill Pay server war from Sonatype and places it on your machine.'
|
85
|
+
desc 'pull_kp_server_war <version>', 'Pulls Kill Pay server war from Sonatype and places it on your machine. If version was not specified it uses the latest released version.'
|
86
86
|
def pull_kp_server_war(version='LATEST')
|
87
87
|
response = KillbillServerArtifact.pull(logger,
|
88
88
|
KillbillServerArtifact::KILLBILL_GROUP_ID,
|
@@ -108,6 +108,26 @@ module KPM
|
|
108
108
|
options[:ssl_verify]).to_a.join(', ')}", :green
|
109
109
|
end
|
110
110
|
|
111
|
+
method_option :group_id,
|
112
|
+
:type => :string,
|
113
|
+
:default => KillbillPluginArtifact::KILLBILL_JAVA_PLUGIN_GROUP_ID,
|
114
|
+
:desc => 'The plugin artifact group-id'
|
115
|
+
method_option :artifact_id,
|
116
|
+
:type => :string,
|
117
|
+
:default => nil,
|
118
|
+
:desc => 'The plugin artifact id'
|
119
|
+
method_option :version,
|
120
|
+
:type => :string,
|
121
|
+
:default => nil,
|
122
|
+
:desc => 'The plugin artifact version'
|
123
|
+
method_option :packaging,
|
124
|
+
:type => :string,
|
125
|
+
:default => KillbillPluginArtifact::KILLBILL_JAVA_PLUGIN_PACKAGING,
|
126
|
+
:desc => 'The plugin artifact packaging'
|
127
|
+
method_option :classifier,
|
128
|
+
:type => :string,
|
129
|
+
:default => KillbillPluginArtifact::KILLBILL_JAVA_PLUGIN_CLASSIFIER,
|
130
|
+
:desc => 'The plugin artifact classifier'
|
111
131
|
method_option :destination,
|
112
132
|
:type => :string,
|
113
133
|
:default => nil,
|
@@ -124,23 +144,49 @@ module KPM
|
|
124
144
|
:type => :boolean,
|
125
145
|
:default => true,
|
126
146
|
:desc => 'Validates sha1 sum'
|
127
|
-
desc 'pull_java_plugin
|
128
|
-
def pull_java_plugin(
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
147
|
+
desc 'pull_java_plugin plugin-key <kb-version>', 'Pulls a java plugin from Sonatype and installs it under the specified destination. If the kb-version has been specified, it is used to download the matching plugin artifact version; if not, it uses the specified plugin version or if null, the LATEST one.'
|
148
|
+
def pull_java_plugin(plugin_key, kb_version='LATEST')
|
149
|
+
|
150
|
+
response = BaseInstaller.new(logger,
|
151
|
+
options[:overrides],
|
152
|
+
options[:ssl_verify]).install_plugin(plugin_key,
|
153
|
+
kb_version,
|
154
|
+
options[:group_id],
|
155
|
+
options[:artifact_id],
|
156
|
+
options[:packaging],
|
157
|
+
options[:classifier],
|
158
|
+
options[:version],
|
159
|
+
options[:destination],
|
160
|
+
'java',
|
161
|
+
options[:force_download],
|
162
|
+
options[:verify_sha1],
|
163
|
+
false)
|
141
164
|
say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
|
142
165
|
end
|
143
166
|
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
method_option :group_id,
|
171
|
+
:type => :string,
|
172
|
+
:default => KillbillPluginArtifact::KILLBILL_RUBY_PLUGIN_GROUP_ID,
|
173
|
+
:desc => 'The plugin artifact group-id'
|
174
|
+
method_option :artifact_id,
|
175
|
+
:type => :string,
|
176
|
+
:default => nil,
|
177
|
+
:desc => 'The plugin artifact id'
|
178
|
+
method_option :version,
|
179
|
+
:type => :string,
|
180
|
+
:default => nil,
|
181
|
+
:desc => 'The plugin artifact version'
|
182
|
+
method_option :packaging,
|
183
|
+
:type => :string,
|
184
|
+
:default => KillbillPluginArtifact::KILLBILL_RUBY_PLUGIN_PACKAGING,
|
185
|
+
:desc => 'The plugin artifact packaging'
|
186
|
+
method_option :classifier,
|
187
|
+
:type => :string,
|
188
|
+
:default => KillbillPluginArtifact::KILLBILL_RUBY_PLUGIN_CLASSIFIER,
|
189
|
+
:desc => 'The plugin artifact classifier'
|
144
190
|
method_option :destination,
|
145
191
|
:type => :string,
|
146
192
|
:default => nil,
|
@@ -157,21 +203,24 @@ module KPM
|
|
157
203
|
:type => :boolean,
|
158
204
|
:default => true,
|
159
205
|
:desc => 'Validates sha1 sum'
|
160
|
-
desc 'pull_ruby_plugin
|
161
|
-
def pull_ruby_plugin(
|
162
|
-
response =
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
206
|
+
desc 'pull_ruby_plugin plugin-key <kb-version>', 'Pulls a ruby plugin from Sonatype and installs it under the specified destination. If the kb-version has been specified, it is used to download the matching plugin artifact version; if not, it uses the specified plugin version or if null, the LATEST one.'
|
207
|
+
def pull_ruby_plugin(plugin_key, kb_version='LATEST')
|
208
|
+
response = BaseInstaller.new(logger,
|
209
|
+
options[:overrides],
|
210
|
+
options[:ssl_verify]).install_plugin(plugin_key,
|
211
|
+
kb_version,
|
212
|
+
options[:group_id],
|
213
|
+
options[:artifact_id],
|
214
|
+
options[:packaging],
|
215
|
+
options[:classifier],
|
216
|
+
options[:version],
|
217
|
+
options[:destination],
|
218
|
+
'ruby',
|
219
|
+
options[:force_download],
|
220
|
+
options[:verify_sha1],
|
221
|
+
true)
|
174
222
|
say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
|
223
|
+
|
175
224
|
end
|
176
225
|
|
177
226
|
method_option :destination,
|
@@ -186,7 +235,7 @@ module KPM
|
|
186
235
|
:type => :boolean,
|
187
236
|
:default => true,
|
188
237
|
:desc => 'Validates sha1 sum'
|
189
|
-
desc 'pull_defaultbundles', 'Pulls the default OSGI bundles from Sonatype and places it on your machine.'
|
238
|
+
desc 'pull_defaultbundles <kb-version>', 'Pulls the default OSGI bundles from Sonatype and places it on your machine. If the kb-version has been specified, it is used to download the matching platform artifact; if not, it uses the latest released version.'
|
190
239
|
def pull_defaultbundles(kb_version='LATEST')
|
191
240
|
response = BaseInstaller.new(logger,
|
192
241
|
options[:overrides],
|
@@ -230,7 +279,7 @@ module KPM
|
|
230
279
|
:type => :boolean,
|
231
280
|
:default => true,
|
232
281
|
:desc => 'Validates sha1 sum'
|
233
|
-
desc 'pull_kaui_war version', 'Pulls Kaui war from Sonatype and places it on your machine.'
|
282
|
+
desc 'pull_kaui_war <version>', 'Pulls Kaui war from Sonatype and places it on your machine. If version was not specified it uses the latest released version.'
|
234
283
|
def pull_kaui_war(version='LATEST')
|
235
284
|
response = KauiArtifact.pull(logger,
|
236
285
|
KauiArtifact::KAUI_GROUP_ID,
|
@@ -258,11 +307,21 @@ module KPM
|
|
258
307
|
:desc => 'Kill Bill version'
|
259
308
|
desc 'info', 'Describe information about a Kill Bill version'
|
260
309
|
def info
|
261
|
-
|
310
|
+
|
311
|
+
say "Fetching info for version #{options[:version]}...\n"
|
312
|
+
|
313
|
+
versions_info = KillbillServerArtifact.info(options[:version],
|
262
314
|
options[:overrides],
|
263
315
|
options[:ssl_verify])
|
316
|
+
say "Dependencies for version #{options[:version]}\n " + (versions_info.map {|k,v| "#{k} #{v}"}).join("\n "), :green
|
317
|
+
say "\n\n"
|
318
|
+
|
319
|
+
resolved_kb_version = versions_info['killbill']
|
320
|
+
kb_version = resolved_kb_version.split('.').slice(0,2).join(".")
|
321
|
+
|
322
|
+
plugins_info = KPM::PluginsDirectory.list_plugins(true, kb_version)
|
264
323
|
|
265
|
-
say "
|
324
|
+
say "Known plugin for KB version #{options[:version]}\n " + (plugins_info.map {|k,v| "#{k} #{v}"}).join("\n "), :green
|
266
325
|
end
|
267
326
|
|
268
327
|
private
|
data/lib/kpm/version.rb
CHANGED
@@ -25,29 +25,6 @@ describe KPM::BaseArtifact do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
# This test makes sure the top level directory is correctly verify_is_skipped
|
29
|
-
it 'should be able to download and verify .tar.gz ruby artifacts' do
|
30
|
-
# Use the payment-test-plugin as a test, as it is fairly small (2.5M)
|
31
|
-
group_id = 'org.kill-bill.billing.plugin.ruby'
|
32
|
-
artifact_id = 'payment-test-plugin'
|
33
|
-
packaging = 'tar.gz'
|
34
|
-
classifier = nil
|
35
|
-
version = '1.8.7'
|
36
|
-
|
37
|
-
Dir.mktmpdir do |dir|
|
38
|
-
info = KPM::BaseArtifact.pull(@logger, group_id, artifact_id, packaging, classifier, version, dir)
|
39
|
-
info[:file_name].should be_nil
|
40
|
-
|
41
|
-
files_in_dir = Dir[info[:file_path] + '/*']
|
42
|
-
files_in_dir.size.should == 1
|
43
|
-
files_in_dir[0].should == info[:file_path] + '/killbill-payment-test'
|
44
|
-
|
45
|
-
File.read(info[:file_path] + '/killbill-payment-test/1.8.7/killbill.properties').should == "mainClass=PaymentTest::PaymentPlugin\nrequire=payment_test\npluginType=PAYMENT\n"
|
46
|
-
|
47
|
-
info[:bundle_dir].should == info[:file_path] + '/killbill-payment-test/1.8.7'
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
28
|
it 'should be able to download and verify generic .tar.gz artifacts' do
|
52
29
|
# The artifact is not small unfortunately (23.7M)
|
53
30
|
group_id = 'org.kill-bill.billing'
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
describe KPM::BaseInstaller do
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
@logger = Logger.new(STDOUT)
|
8
|
+
@logger.level = Logger::INFO
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should be able to uninstall via plugin key' do
|
12
|
+
Dir.mktmpdir do |dir|
|
13
|
+
bundles_dir = dir + '/bundles'
|
14
|
+
installer = KPM::BaseInstaller.new(@logger)
|
15
|
+
|
16
|
+
info = installer.install_plugin('analytics', nil, nil, nil, nil, nil, '0.7.1', bundles_dir)
|
17
|
+
|
18
|
+
check_installation(bundles_dir)
|
19
|
+
|
20
|
+
installer.uninstall_plugin('analytics', nil, bundles_dir)
|
21
|
+
|
22
|
+
check_uninstallation(bundles_dir)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# See https://github.com/killbill/killbill-cloud/issues/14
|
27
|
+
it 'should be able to uninstall via plugin name' do
|
28
|
+
Dir.mktmpdir do |dir|
|
29
|
+
bundles_dir = dir + '/bundles'
|
30
|
+
installer = KPM::BaseInstaller.new(@logger)
|
31
|
+
|
32
|
+
installer.install_plugin('analytics', nil, nil, nil, nil, nil, '0.7.1', bundles_dir)
|
33
|
+
|
34
|
+
check_installation(bundles_dir)
|
35
|
+
|
36
|
+
installer.uninstall_plugin('analytics-plugin', nil, bundles_dir)
|
37
|
+
|
38
|
+
check_uninstallation(bundles_dir)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def check_installation(plugins_dir)
|
45
|
+
common_checks(plugins_dir)
|
46
|
+
|
47
|
+
plugin_identifiers = read_plugin_identifiers(plugins_dir)
|
48
|
+
|
49
|
+
plugin_identifiers.size.should == 1
|
50
|
+
|
51
|
+
plugin_identifiers['analytics']['plugin_name'].should == 'analytics-plugin'
|
52
|
+
plugin_identifiers['analytics']['group_id'].should == 'org.kill-bill.billing.plugin.java'
|
53
|
+
plugin_identifiers['analytics']['artifact_id'].should == 'analytics-plugin'
|
54
|
+
plugin_identifiers['analytics']['packaging'].should == 'jar'
|
55
|
+
plugin_identifiers['analytics']['version'].should == '0.7.1'
|
56
|
+
plugin_identifiers['analytics']['language'].should == 'java'
|
57
|
+
|
58
|
+
File.file?(plugins_dir + '/plugins/java/analytics-plugin/0.7.1/tmp/disabled.txt').should be_false
|
59
|
+
end
|
60
|
+
|
61
|
+
def check_uninstallation(plugins_dir)
|
62
|
+
common_checks(plugins_dir)
|
63
|
+
|
64
|
+
plugin_identifiers = read_plugin_identifiers(plugins_dir)
|
65
|
+
|
66
|
+
plugin_identifiers.size.should == 0
|
67
|
+
|
68
|
+
File.file?(plugins_dir + '/plugins/java/analytics-plugin/0.7.1/tmp/disabled.txt').should be_true
|
69
|
+
end
|
70
|
+
|
71
|
+
def common_checks(plugins_dir)
|
72
|
+
[
|
73
|
+
plugins_dir,
|
74
|
+
plugins_dir + '/plugins',
|
75
|
+
plugins_dir + '/plugins/java',
|
76
|
+
plugins_dir + '/plugins/java/analytics-plugin',
|
77
|
+
plugins_dir + '/plugins/java/analytics-plugin/0.7.1',
|
78
|
+
plugins_dir + '/plugins/java/analytics-plugin/0.7.1/tmp',
|
79
|
+
].each do |dir|
|
80
|
+
File.directory?(dir).should be_true
|
81
|
+
end
|
82
|
+
|
83
|
+
[
|
84
|
+
plugins_dir + '/plugins/plugin_identifiers.json',
|
85
|
+
plugins_dir + '/plugins/java/analytics-plugin/0.7.1/analytics-plugin-0.7.1.jar'
|
86
|
+
].each do |file|
|
87
|
+
File.file?(file).should be_true
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def read_plugin_identifiers(plugins_dir)
|
92
|
+
File.open(plugins_dir + '/plugins/plugin_identifiers.json', 'r') do |f|
|
93
|
+
JSON.parse(f.read)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -7,6 +7,30 @@ describe KPM::KillbillPluginArtifact do
|
|
7
7
|
@logger.level = Logger::INFO
|
8
8
|
end
|
9
9
|
|
10
|
+
# This test makes sure the top level directory is correctly verify_is_skipped
|
11
|
+
it 'should be able to download and verify .tar.gz ruby artifacts' do
|
12
|
+
# Use the payment-test-plugin as a test, as it is fairly small (2.5M)
|
13
|
+
group_id = 'org.kill-bill.billing.plugin.ruby'
|
14
|
+
artifact_id = 'payment-test-plugin'
|
15
|
+
packaging = 'tar.gz'
|
16
|
+
classifier = nil
|
17
|
+
version = '1.8.7'
|
18
|
+
plugin_name = 'killbill-payment-test'
|
19
|
+
|
20
|
+
Dir.mktmpdir do |dir|
|
21
|
+
info = KPM::KillbillPluginArtifact.pull(@logger, group_id, artifact_id, packaging, classifier, version, plugin_name, dir)
|
22
|
+
info[:file_name].should be_nil
|
23
|
+
|
24
|
+
files_in_dir = Dir[info[:file_path] + '/*']
|
25
|
+
files_in_dir.size.should == 1
|
26
|
+
files_in_dir[0].should == info[:file_path] + '/killbill-payment-test'
|
27
|
+
|
28
|
+
File.read(info[:file_path] + '/killbill-payment-test/1.8.7/killbill.properties').should == "mainClass=PaymentTest::PaymentPlugin\nrequire=payment_test\npluginType=PAYMENT\n"
|
29
|
+
|
30
|
+
info[:bundle_dir].should == info[:file_path] + '/killbill-payment-test/1.8.7'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
10
34
|
it 'should be able to download and verify artifacts' do
|
11
35
|
Dir.mktmpdir do |dir|
|
12
36
|
sha1_file = dir + '/sha1.yml'
|
@@ -16,6 +40,7 @@ describe KPM::KillbillPluginArtifact do
|
|
16
40
|
KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_PACKAGING,
|
17
41
|
KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_CLASSIFIER,
|
18
42
|
'LATEST',
|
43
|
+
'killbill-analytics',
|
19
44
|
dir,
|
20
45
|
sha1_file)
|
21
46
|
info[:file_name].should == "analytics-plugin-#{info[:version]}.jar"
|
@@ -32,6 +57,7 @@ describe KPM::KillbillPluginArtifact do
|
|
32
57
|
KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_PACKAGING,
|
33
58
|
KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_CLASSIFIER,
|
34
59
|
'LATEST',
|
60
|
+
'killbill-analytics',
|
35
61
|
dir,
|
36
62
|
sha1_file)
|
37
63
|
|
metadata
CHANGED
@@ -1,91 +1,105 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kill Bill core team
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: highline
|
15
|
-
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.6.21
|
20
|
-
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
23
|
requirements:
|
22
|
-
- - ~>
|
24
|
+
- - "~>"
|
23
25
|
- !ruby/object:Gem::Version
|
24
26
|
version: 1.6.21
|
25
|
-
prerelease: false
|
26
|
-
type: :runtime
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: nexus_cli
|
29
|
-
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 4.1.0
|
34
|
-
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
35
37
|
requirements:
|
36
|
-
- - ~>
|
38
|
+
- - "~>"
|
37
39
|
- !ruby/object:Gem::Version
|
38
40
|
version: 4.1.0
|
39
|
-
prerelease: false
|
40
|
-
type: :runtime
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: thor
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.19.1
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
43
50
|
version_requirements: !ruby/object:Gem::Requirement
|
44
51
|
requirements:
|
45
|
-
- - ~>
|
52
|
+
- - "~>"
|
46
53
|
- !ruby/object:Gem::Version
|
47
54
|
version: 0.19.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubyzip
|
48
57
|
requirement: !ruby/object:Gem::Requirement
|
49
58
|
requirements:
|
50
|
-
- - ~>
|
59
|
+
- - "~>"
|
51
60
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
53
|
-
prerelease: false
|
61
|
+
version: 1.2.0
|
54
62
|
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.2.0
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
|
-
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: 10.0.0
|
62
|
-
- - <
|
76
|
+
- - "<"
|
63
77
|
- !ruby/object:Gem::Version
|
64
78
|
version: 11.0.0
|
65
|
-
|
79
|
+
type: :development
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
82
|
requirements:
|
67
|
-
- -
|
83
|
+
- - ">="
|
68
84
|
- !ruby/object:Gem::Version
|
69
85
|
version: 10.0.0
|
70
|
-
- - <
|
86
|
+
- - "<"
|
71
87
|
- !ruby/object:Gem::Version
|
72
88
|
version: 11.0.0
|
73
|
-
prerelease: false
|
74
|
-
type: :development
|
75
89
|
- !ruby/object:Gem::Dependency
|
76
90
|
name: rspec
|
77
|
-
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
78
92
|
requirements:
|
79
|
-
- - ~>
|
93
|
+
- - "~>"
|
80
94
|
- !ruby/object:Gem::Version
|
81
95
|
version: 2.12.0
|
82
|
-
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
99
|
requirements:
|
84
|
-
- - ~>
|
100
|
+
- - "~>"
|
85
101
|
- !ruby/object:Gem::Version
|
86
102
|
version: 2.12.0
|
87
|
-
prerelease: false
|
88
|
-
type: :development
|
89
103
|
description: A package manager for Kill Bill.
|
90
104
|
email: killbilling-users@googlegroups.com
|
91
105
|
executables:
|
@@ -93,8 +107,8 @@ executables:
|
|
93
107
|
extensions: []
|
94
108
|
extra_rdoc_files: []
|
95
109
|
files:
|
96
|
-
- .gemrelease
|
97
|
-
- .gitignore
|
110
|
+
- ".gemrelease"
|
111
|
+
- ".gitignore"
|
98
112
|
- Gemfile
|
99
113
|
- README.md
|
100
114
|
- Rakefile
|
@@ -118,6 +132,7 @@ files:
|
|
118
132
|
- lib/kpm/utils.rb
|
119
133
|
- lib/kpm/version.rb
|
120
134
|
- spec/kpm/remote/base_artifact_spec.rb
|
135
|
+
- spec/kpm/remote/base_installer_spec.rb
|
121
136
|
- spec/kpm/remote/installer_spec.rb
|
122
137
|
- spec/kpm/remote/kaui_artifact_spec.rb
|
123
138
|
- spec/kpm/remote/killbill_plugin_artifact_spec.rb
|
@@ -133,26 +148,39 @@ homepage: http://kill-bill.org
|
|
133
148
|
licenses:
|
134
149
|
- Apache License (2.0)
|
135
150
|
metadata: {}
|
136
|
-
post_install_message:
|
151
|
+
post_install_message:
|
137
152
|
rdoc_options:
|
138
|
-
- --exclude
|
139
|
-
- .
|
153
|
+
- "--exclude"
|
154
|
+
- "."
|
140
155
|
require_paths:
|
141
156
|
- lib
|
142
157
|
required_ruby_version: !ruby/object:Gem::Requirement
|
143
158
|
requirements:
|
144
|
-
- -
|
159
|
+
- - ">="
|
145
160
|
- !ruby/object:Gem::Version
|
146
161
|
version: 1.8.6
|
147
162
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
163
|
requirements:
|
149
|
-
- -
|
164
|
+
- - ">="
|
150
165
|
- !ruby/object:Gem::Version
|
151
166
|
version: '0'
|
152
167
|
requirements: []
|
153
|
-
rubyforge_project:
|
154
|
-
rubygems_version: 2.
|
155
|
-
signing_key:
|
168
|
+
rubyforge_project:
|
169
|
+
rubygems_version: 2.2.2
|
170
|
+
signing_key:
|
156
171
|
specification_version: 4
|
157
172
|
summary: Kill Bill package manager.
|
158
|
-
test_files:
|
173
|
+
test_files:
|
174
|
+
- spec/kpm/remote/base_artifact_spec.rb
|
175
|
+
- spec/kpm/remote/base_installer_spec.rb
|
176
|
+
- spec/kpm/remote/installer_spec.rb
|
177
|
+
- spec/kpm/remote/kaui_artifact_spec.rb
|
178
|
+
- spec/kpm/remote/killbill_plugin_artifact_spec.rb
|
179
|
+
- spec/kpm/remote/killbill_server_artifact_spec.rb
|
180
|
+
- spec/kpm/remote/tomcat_manager_spec.rb
|
181
|
+
- spec/kpm/unit/base_artifact_spec.rb
|
182
|
+
- spec/kpm/unit/plugins_directory_spec.rb
|
183
|
+
- spec/kpm/unit/plugins_manager_spec.rb
|
184
|
+
- spec/kpm/unit/sha1_checker_spec.rb
|
185
|
+
- spec/kpm/unit/sha1_test.yml
|
186
|
+
- spec/spec_helper.rb
|