kpm 0.1.7 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|