kpm 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d32e55ddd75d39d7bba5dd1aaf3e4cc36e55ff0a
4
- data.tar.gz: 8af60c027a733158657017bfb5e6bb988e2eec8c
3
+ metadata.gz: 1de7630338f4ae249d6dd349fdeaa10939b0f9e5
4
+ data.tar.gz: 5b3848aa883c400c784db73f3b336022cc7101e9
5
5
  SHA512:
6
- metadata.gz: 43cd9a9d22b0ec6f7ec329ab48e864ec58d4c445a37b350070fa9305fcb2c9efb31218a0b66cc0e1bd31fc860626c6e5433642c8d2276c58a9ab11550e17f659
7
- data.tar.gz: 2e0d9a390f24f5809e2af2e369540696165690a34923da046433c29a85c1907740dfeef232cb0dae8b237f373a38d47c3c20fbe39b8e46f783b4471b1e91d4f5
6
+ metadata.gz: c9835a80ad3a36ce4037efec42119427eda9e5945dee8ef9bf4d76d9a6f62758c13cadfcb3c830fa4ec34c815a839240ff2eb91ce7b93fb03b38fa0929b86168
7
+ data.tar.gz: ab104ebd24feea1aa14e69d4f8c235865ed31c3c7d6bd71a902fde86cf4c7557bed2ad74c7e415f2020ee21832559c90bf4c84f940652d31343cfc2b33a63ab4
data/Rakefile CHANGED
@@ -3,3 +3,18 @@
3
3
  # Install tasks to build and release the plugin
4
4
  require 'bundler/setup'
5
5
  Bundler::GemHelper.install_tasks
6
+
7
+ # Install test tasks
8
+ require 'rspec/core/rake_task'
9
+ namespace :test do
10
+ namespace :remote do
11
+ desc 'Run RSpec remote tests'
12
+ RSpec::Core::RakeTask.new do |task|
13
+ task.name = 'spec'
14
+ task.pattern = './spec/*/remote/*_spec.rb'
15
+ end
16
+ end
17
+ end
18
+
19
+ # Run tests by default
20
+ task :default => 'test:remote:spec'
@@ -1,15 +1,43 @@
1
+ require 'digest/sha1'
1
2
  require 'nexus_cli'
3
+ require 'rexml/document'
2
4
 
3
5
  module KPM
6
+
7
+ class ArtifactCorruptedException < IOError
8
+ def message
9
+ 'Downloaded artifact failed checksum verification'
10
+ end
11
+ end
12
+
4
13
  class BaseArtifact
5
- KILLBILL_GROUP_ID = 'org.kill-bill.billing'
6
- KILLBILL_JAVA_PLUGIN_GROUP_ID = 'org.kill-bill.billing.plugin.java'
7
- KILLBILL_RUBY_PLUGIN_GROUP_ID = 'org.kill-bill.billing.plugin.ruby'
14
+ KILLBILL_GROUP_ID = 'org.kill-bill.billing'
15
+
16
+ KILLBILL_ARTIFACT_ID = 'killbill-profiles-killbill'
17
+ KILLBILL_PACKAGING = 'war'
18
+ KILLBILL_CLASSIFIER = 'jar-with-dependencies'
19
+
20
+ KILLPAY_ARTIFACT_ID = 'killbill-profiles-killpay'
21
+ KILLPAY_PACKAGING = 'war'
22
+ KILLPAY_CLASSIFIER = 'jar-with-dependencies'
23
+
24
+ KILLBILL_JAVA_PLUGIN_GROUP_ID = 'org.kill-bill.billing.plugin.java'
25
+ KILLBILL_JAVA_PLUGIN_PACKAGING = 'jar'
26
+ KILLBILL_JAVA_PLUGIN_CLASSIFIER = nil
27
+
28
+ KILLBILL_RUBY_PLUGIN_GROUP_ID = 'org.kill-bill.billing.plugin.ruby'
29
+ KILLBILL_RUBY_PLUGIN_PACKAGING = 'tar.gz'
30
+ KILLBILL_RUBY_PLUGIN_CLASSIFIER = nil
31
+
32
+ KAUI_GROUP_ID = 'org.kill-bill.billing.kaui'
33
+ KAUI_ARTIFACT_ID = 'kaui-standalone'
34
+ KAUI_PACKAGING = 'war'
35
+ KAUI_CLASSIFIER = nil
8
36
 
9
37
  class << self
10
- def pull(group_id, artifact_id, packaging='jar', version='LATEST', destination=nil, overrides={}, ssl_verify=true)
11
- coordinates = build_coordinates(group_id, artifact_id, packaging, nil, version)
12
- nexus_remote(overrides, ssl_verify).pull_artifact(coordinates, destination)
38
+ def pull(logger, group_id, artifact_id, packaging='jar', classifier=nil, version='LATEST', destination_path=nil, overrides={}, ssl_verify=true)
39
+ coordinates = build_coordinates(group_id, artifact_id, packaging, classifier, version)
40
+ pull_and_put_in_place(logger, coordinates, destination_path, is_ruby_plugin_and_should_skip_top_dir(group_id, artifact_id), overrides, ssl_verify)
13
41
  end
14
42
 
15
43
  def nexus_remote(overrides={}, ssl_verify=true)
@@ -18,13 +46,80 @@ module KPM
18
46
 
19
47
  def nexus_defaults
20
48
  {
21
- url: 'https://repository.sonatype.org',
22
- repository: 'central-proxy'
49
+ url: 'https://repository.sonatype.org',
50
+ repository: 'central-proxy'
23
51
  }
24
52
  end
25
53
 
26
54
  protected
27
55
 
56
+ def pull_and_put_in_place(logger, coordinates, destination_path=nil, skip_top_dir=true, overrides={}, ssl_verify=true)
57
+ destination_path = KPM::root if destination_path.nil?
58
+
59
+ # Create the destination directory
60
+ if path_looks_like_a_directory(destination_path)
61
+ destination_dir = destination_path
62
+ else
63
+ destination_dir = File.dirname(destination_path)
64
+ end
65
+ FileUtils.mkdir_p(destination_dir)
66
+
67
+ # Download the artifact in a temporary directory in case of failures
68
+ info = {}
69
+ Dir.mktmpdir do |tmp_destination_dir|
70
+ logger.info " Starting download of #{coordinates} to #{tmp_destination_dir}"
71
+
72
+ info = pull_and_verify(logger, coordinates, tmp_destination_dir, overrides, ssl_verify)
73
+
74
+ # Move the file to the final destination, unpacking if necessary
75
+ is_tgz = info[:file_path].end_with?('.tar.gz') || info[:file_path].end_with?('.tgz')
76
+ if is_tgz
77
+ Utils.unpack_tgz(info[:file_path], destination_path, skip_top_dir)
78
+ FileUtils.rm info[:file_path]
79
+ else
80
+ FileUtils.mv info[:file_path], destination_path
81
+ end
82
+
83
+ # Update the info hash with the real destination
84
+ if File.directory?(destination_path) && !is_tgz
85
+ destination = File.join(File.expand_path(destination_path), info[:file_name])
86
+ else
87
+ destination = destination_path
88
+ end
89
+ info[:file_path] = File.expand_path(destination)
90
+
91
+ if is_tgz
92
+ info[:file_name] = nil
93
+ info[:size] = nil
94
+ else
95
+ info[:file_name] = File.basename(destination)
96
+ end
97
+
98
+ logger.info "Successful installation of #{coordinates} to #{info[:file_path]}"
99
+ end
100
+ info
101
+ end
102
+
103
+ def pull_and_verify(logger, coordinates, destination_dir, overrides={}, ssl_verify=true)
104
+ info = nexus_remote(overrides, ssl_verify).pull_artifact(coordinates, destination_dir)
105
+ raise ArtifactCorruptedException unless verify(logger, coordinates, info[:file_path], overrides, ssl_verify)
106
+ info
107
+ end
108
+
109
+ def verify(logger, coordinates, file_path, overrides={}, ssl_verify=true)
110
+ artifact_info = nexus_remote(overrides, ssl_verify).get_artifact_info(coordinates)
111
+ sha1_element = REXML::Document.new(artifact_info).elements['//sha1']
112
+ # Can't check :(
113
+ if sha1_element.nil?
114
+ logger.warn("Unable to find sha1 in Nexus repo for #{coordinates}. Artifact info: #{artifact_info.inspect}")
115
+ return true
116
+ end
117
+
118
+ local_sha1 = Digest::SHA1.file(file_path).hexdigest
119
+ sha1 = sha1_element.text
120
+ local_sha1 == sha1
121
+ end
122
+
28
123
  def build_coordinates(group_id, artifact_id, packaging, classifier, version=nil)
29
124
  if classifier.nil?
30
125
  if version.nil?
@@ -40,6 +135,34 @@ module KPM
40
135
  end
41
136
  end
42
137
  end
138
+
139
+ # Magic methods...
140
+
141
+ def is_ruby_plugin_and_should_skip_top_dir(group_id, artifact_id)
142
+ # The second check is for custom ruby plugins
143
+ group_id == KILLBILL_RUBY_PLUGIN_GROUP_ID || artifact_id.include?('plugin')
144
+ end
145
+
146
+ def path_looks_like_a_directory(path)
147
+ # It already is!
148
+ return true if File.directory?(path)
149
+ # It already isn't!
150
+ return false if File.file?(path)
151
+
152
+ last_part = File.basename(path).downcase
153
+
154
+ %w(.pom .xml .war .jar .xsd .tar.gz .tgz .gz .zip).each do |classic_file_extension|
155
+ return false if last_part.end_with?(classic_file_extension)
156
+ end
157
+
158
+ # Known magic files
159
+ %w(root).each do |classic_filename|
160
+ return false if last_part == classic_filename
161
+ end
162
+
163
+ # Probably a directory
164
+ true
165
+ end
43
166
  end
44
167
  end
45
168
  end
data/lib/kpm/installer.rb CHANGED
@@ -11,15 +11,18 @@ module KPM
11
11
 
12
12
  def initialize(raw_config, logger=nil)
13
13
  raise(ArgumentError, 'killbill or kaui section must be specified') if raw_config['killbill'].nil? and raw_config['kaui'].nil?
14
- @config = raw_config['killbill']
14
+ @config = raw_config['killbill']
15
15
  @kaui_config = raw_config['kaui']
16
16
 
17
17
  if logger.nil?
18
- @logger = Logger.new(STDOUT)
18
+ @logger = Logger.new(STDOUT)
19
19
  @logger.level = Logger::INFO
20
20
  else
21
21
  @logger = logger
22
22
  end
23
+
24
+ @nexus_config = @config['nexus']
25
+ @nexus_ssl_verify = !@nexus_config.nil? ? @nexus_config['ssl_verify'] : true
23
26
  end
24
27
 
25
28
  def install
@@ -36,19 +39,14 @@ module KPM
36
39
  private
37
40
 
38
41
  def install_killbill_server
39
- group_id = @config['group_id'] || BaseArtifact::KILLBILL_GROUP_ID
40
- artifact_id = @config['artifact_id'] || KillbillServerArtifact::KILLBILL_ARTIFACT_ID
41
- packaging = @config['packaging'] || KillbillServerArtifact::KILLBILL_PACKAGING
42
- classifier = @config['classifier'] || KillbillServerArtifact::KILLBILL_CLASSIFIER
43
- version = @config['version'] || LATEST_VERSION
42
+ group_id = @config['group_id'] || KPM::BaseArtifact::KILLBILL_GROUP_ID
43
+ artifact_id = @config['artifact_id'] || KPM::BaseArtifact::KILLBILL_ARTIFACT_ID
44
+ packaging = @config['packaging'] || KPM::BaseArtifact::KILLBILL_PACKAGING
45
+ classifier = @config['classifier'] || KPM::BaseArtifact::KILLBILL_CLASSIFIER
46
+ version = @config['version'] || LATEST_VERSION
44
47
  webapp_path = @config['webapp_path'] || KPM::root
45
48
 
46
- webapp_dir = File.dirname(webapp_path)
47
- FileUtils.mkdir_p(webapp_dir)
48
-
49
- @logger.info "Installing Kill Bill server (#{group_id}:#{artifact_id}:#{packaging}:#{classifier}:#{version}) to #{webapp_path}"
50
- file = KillbillServerArtifact.pull(group_id, artifact_id, packaging, classifier, version, webapp_dir, @config['nexus'], @config['nexus']['ssl_verify'])
51
- FileUtils.mv file[:file_path], webapp_path
49
+ KPM::KillbillServerArtifact.pull(@logger, group_id, artifact_id, packaging, classifier, version, webapp_path, @nexus_config, @nexus_ssl_verify)
52
50
  end
53
51
 
54
52
  def install_plugins
@@ -61,67 +59,67 @@ module KPM
61
59
  def install_java_plugins(bundles_dir)
62
60
  return if @config['plugins'].nil? or @config['plugins']['java'].nil?
63
61
 
62
+ infos = []
64
63
  @config['plugins']['java'].each do |plugin|
65
- artifact_id = plugin['name']
66
- version = plugin['version'] || LATEST_VERSION
64
+ group_id = plugin['group_id'] || KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_GROUP_ID
65
+ artifact_id = plugin['artifact_id'] || plugin['name']
66
+ packaging = plugin['packaging'] || KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_PACKAGING
67
+ classifier = plugin['classifier'] || KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_CLASSIFIER
68
+ version = plugin['version'] || LATEST_VERSION
67
69
  destination = "#{bundles_dir}/plugins/java/#{artifact_id}/#{version}"
68
70
 
69
- FileUtils.mkdir_p(destination)
70
-
71
- @logger.info "Installing Kill Bill Java plugin #{artifact_id} #{version} to #{destination}"
72
- KillbillPluginArtifact.pull(artifact_id, version, :java, destination, @config['nexus'], @config['nexus']['ssl_verify'])
71
+ infos << KPM::KillbillPluginArtifact.pull(@logger, group_id, artifact_id, packaging, classifier, version, destination, @nexus_config, @nexus_ssl_verify)
73
72
  end
73
+
74
+ infos
74
75
  end
75
76
 
76
77
  def install_ruby_plugins(bundles_dir)
77
78
  return if @config['plugins'].nil? or @config['plugins']['ruby'].nil?
78
79
 
80
+ infos = []
79
81
  @config['plugins']['ruby'].each do |plugin|
80
- artifact_id = plugin['name']
81
- version = plugin['version'] || LATEST_VERSION
82
+ group_id = plugin['group_id'] || KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_GROUP_ID
83
+ artifact_id = plugin['artifact_id'] || plugin['name']
84
+ packaging = plugin['packaging'] || KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_PACKAGING
85
+ classifier = plugin['classifier'] || KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_CLASSIFIER
86
+ version = plugin['version'] || LATEST_VERSION
82
87
  destination = "#{bundles_dir}/plugins/ruby"
83
88
 
84
- FileUtils.mkdir_p(destination)
85
-
86
- @logger.info "Installing Kill Bill Ruby plugin #{artifact_id} #{version} to #{destination}"
87
- archive = KillbillPluginArtifact.pull(artifact_id, version, :ruby, destination, @config['nexus'], @config['nexus']['ssl_verify'])
88
-
89
- Utils.unpack_tgz(archive[:file_path], destination, true)
90
- FileUtils.rm archive[:file_path]
89
+ infos << KPM::KillbillPluginArtifact.pull(@logger, group_id, artifact_id, packaging, classifier, version, destination, @nexus_config, @nexus_ssl_verify)
91
90
  end
91
+
92
+ infos
92
93
  end
93
94
 
94
95
  def install_default_bundles
95
96
  return if @config['default_bundles'] == false
96
97
 
97
- group_id = 'org.kill-bill.billing'
98
+ group_id = 'org.kill-bill.billing'
98
99
  artifact_id = 'killbill-platform-osgi-bundles-defaultbundles'
99
- packaging = 'tar.gz'
100
- version = @config['version'] || LATEST_VERSION
100
+ packaging = 'tar.gz'
101
+ classifier = nil
102
+ version = @config['version'] || LATEST_VERSION
101
103
  destination = "#{@config['plugins_dir']}/platform"
102
104
 
103
- FileUtils.mkdir_p(destination)
104
-
105
- @logger.info "Installing Kill Bill #{artifact_id} #{version} to #{destination}"
106
- archive = BaseArtifact.pull(group_id, artifact_id, packaging, version, destination, @config['nexus'], @config['nexus']['ssl_verify'])
107
-
108
- Utils.unpack_tgz(archive[:file_path], destination)
109
- FileUtils.rm archive[:file_path]
105
+ info = KPM::BaseArtifact.pull(@logger, group_id, artifact_id, packaging, classifier, version, destination, @nexus_config, @nexus_ssl_verify)
110
106
 
111
107
  # The special JRuby bundle needs to be called jruby.jar
108
+ # TODO .first - code smell
112
109
  File.rename Dir.glob("#{destination}/killbill-platform-osgi-bundles-jruby-*.jar").first, "#{destination}/jruby.jar"
110
+
111
+ info
113
112
  end
114
113
 
115
114
  def install_kaui
116
- version = @kaui_config['version'] || LATEST_VERSION
115
+ group_id = @kaui_config['group_id'] || KPM::BaseArtifact::KAUI_GROUP_ID
116
+ artifact_id = @kaui_config['artifact_id'] || KPM::BaseArtifact::KAUI_ARTIFACT_ID
117
+ packaging = @kaui_config['packaging'] || KPM::BaseArtifact::KAUI_PACKAGING
118
+ classifier = @kaui_config['classifier'] || KPM::BaseArtifact::KAUI_CLASSIFIER
119
+ version = @kaui_config['version'] || LATEST_VERSION
117
120
  webapp_path = @kaui_config['webapp_path'] || KPM::root
118
121
 
119
- webapp_dir = File.dirname(webapp_path)
120
- FileUtils.mkdir_p(webapp_dir)
121
-
122
- @logger.info "Installing Kaui #{version} to #{webapp_path}"
123
- file = KauiArtifact.pull(version, webapp_dir, @kaui_config['nexus'], @kaui_config['nexus']['ssl_verify'])
124
- FileUtils.mv file[:file_path], webapp_path
122
+ KPM::KauiArtifact.pull(@logger, group_id, artifact_id, packaging, classifier, version, webapp_path, @nexus_config, @nexus_ssl_verify)
125
123
  end
126
124
  end
127
125
  end
@@ -4,16 +4,14 @@ require 'set'
4
4
  module KPM
5
5
  class KauiArtifact < BaseArtifact
6
6
  class << self
7
- KAUI_WAR = "org.kill-bill.billing.kaui:kaui-standalone:war"
8
-
9
- def pull(version='LATEST', destination=nil, overrides={}, ssl_verify=true)
10
- nexus_remote(overrides, ssl_verify).pull_artifact("#{KAUI_WAR}:#{version}", destination)
11
- end
12
-
13
7
  def versions(overrides={}, ssl_verify=true)
14
- response = REXML::Document.new nexus_remote(overrides, ssl_verify).search_for_artifacts(KAUI_WAR)
15
- versions = SortedSet.new
16
- response.elements.each("search-results/data/artifact/version") { |element| versions << element.text }
8
+ coordinates = build_coordinates(KPM::BaseArtifact::KAUI_GROUP_ID,
9
+ KPM::BaseArtifact::KAUI_ARTIFACT_ID,
10
+ KPM::BaseArtifact::KAUI_PACKAGING,
11
+ KPM::BaseArtifact::KAUI_CLASSIFIER)
12
+ response = REXML::Document.new nexus_remote(overrides, ssl_verify).search_for_artifacts(coordinates)
13
+ versions = SortedSet.new
14
+ response.elements.each('search-results/data/artifact/version') { |element| versions << element.text }
17
15
  versions
18
16
  end
19
17
  end
@@ -4,27 +4,15 @@ require 'set'
4
4
  module KPM
5
5
  class KillbillPluginArtifact < BaseArtifact
6
6
  class << self
7
- def pull(artifact_id, version='LATEST', type=:java, destination=nil, overrides={}, ssl_verify=true)
8
- if type == :java
9
- group_id = BaseArtifact::KILLBILL_JAVA_PLUGIN_GROUP_ID
10
- packaging = 'jar'
11
- else
12
- group_id = BaseArtifact::KILLBILL_RUBY_PLUGIN_GROUP_ID
13
- packaging = 'tar.gz'
14
- end
15
- coordinates = "#{group_id}:#{artifact_id}:#{packaging}:#{version}"
16
- nexus_remote(overrides, ssl_verify).pull_artifact(coordinates, destination)
17
- end
18
-
19
7
  def versions(overrides={}, ssl_verify=true)
20
- plugins = { :java => {}, :ruby => {} }
8
+ plugins = {:java => {}, :ruby => {}}
21
9
 
22
10
  nexus = nexus_remote(overrides, ssl_verify)
23
11
 
24
- [[:java, BaseArtifact::KILLBILL_JAVA_PLUGIN_GROUP_ID], [:ruby, BaseArtifact::KILLBILL_RUBY_PLUGIN_GROUP_ID]].each do |type_and_group_id|
12
+ [[:java, KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_GROUP_ID], [:ruby, KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_GROUP_ID]].each do |type_and_group_id|
25
13
  response = REXML::Document.new nexus.search_for_artifacts(type_and_group_id[1])
26
14
  response.elements.each('search-results/data/artifact') do |element|
27
- artifact_id = element.elements['artifactId'].text
15
+ artifact_id = element.elements['artifactId'].text
28
16
  plugins[type_and_group_id[0]][artifact_id] ||= SortedSet.new
29
17
  plugins[type_and_group_id[0]][artifact_id] << element.elements['version'].text
30
18
  end
@@ -3,25 +3,12 @@ require 'set'
3
3
 
4
4
  module KPM
5
5
  class KillbillServerArtifact < BaseArtifact
6
- KILLBILL_ARTIFACT_ID = 'killbill-profiles-killbill'
7
- KILLBILL_PACKAGING = 'war'
8
- KILLBILL_CLASSIFIER = 'jar-with-dependencies'
9
-
10
- KILLPAY_ARTIFACT_ID = 'killbill-profiles-killpay'
11
- KILLPAY_PACKAGING = 'war'
12
- KILLPAY_CLASSIFIER = 'jar-with-dependencies'
13
-
14
6
  class << self
15
- def pull(group_id, artifact_id, packaging=BaseArtifact::KILLBILL_PACKAGING, classifier=BaseArtifact::KILLBILL_CLASSIFIER, version='LATEST', destination=nil, overrides={}, ssl_verify=true)
16
- coordinates = build_coordinates(group_id, artifact_id, packaging, classifier, version)
17
- nexus_remote(overrides, ssl_verify).pull_artifact(coordinates, destination)
18
- end
19
-
20
- def versions(group_id, artifact_id, packaging=BaseArtifact::KILLBILL_PACKAGING, classifier=BaseArtifact::KILLBILL_CLASSIFIER, overrides={}, ssl_verify=true)
21
- coordinates = build_coordinates(group_id, artifact_id, packaging, classifier)
22
- response = REXML::Document.new nexus_remote(overrides, ssl_verify).search_for_artifacts(coordinates)
23
- versions = SortedSet.new
24
- response.elements.each("search-results/data/artifact/version") { |element| versions << element.text }
7
+ def versions(artifact_id, packaging=KPM::BaseArtifact::KILLBILL_PACKAGING, classifier=KPM::BaseArtifact::KILLBILL_CLASSIFIER, overrides={}, ssl_verify=true)
8
+ coordinates = build_coordinates(KPM::BaseArtifact::KILLBILL_GROUP_ID, artifact_id, packaging, classifier)
9
+ response = REXML::Document.new nexus_remote(overrides, ssl_verify).search_for_artifacts(coordinates)
10
+ versions = SortedSet.new
11
+ response.elements.each('search-results/data/artifact/version') { |element| versions << element.text }
25
12
  versions
26
13
  end
27
14
  end
data/lib/kpm/tasks.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'highline'
2
+ require 'logger'
2
3
  require 'thor'
3
4
 
4
5
  module KPM
@@ -8,71 +9,111 @@ module KPM
8
9
  base.class_eval do
9
10
 
10
11
  class_option :overrides,
11
- :type => :hash,
12
+ :type => :hash,
12
13
  :default => nil,
13
- :desc => "A hashed list of overrides. Available options are 'url', 'repository', 'username', and 'password'."
14
+ :desc => "A hashed list of overrides. Available options are 'url', 'repository', 'username', and 'password'."
14
15
 
15
16
  class_option :ssl_verify,
16
- :type => :boolean,
17
+ :type => :boolean,
17
18
  :default => true,
18
- :desc => "Set to false to disable SSL Verification."
19
+ :desc => 'Set to false to disable SSL Verification.'
19
20
 
20
- desc "install config_file", "Install Kill Bill server and plugins according to the specified YAML configuration file."
21
+ desc 'install config_file', 'Install Kill Bill server and plugins according to the specified YAML configuration file.'
21
22
  def install(config_file)
22
23
  Installer.from_file(config_file).install
23
24
  end
24
25
 
25
26
  method_option :destination,
26
- :type => :string,
27
+ :type => :string,
27
28
  :default => nil,
28
- :desc => "A different folder other than the current working directory."
29
- desc "pull_kb_server_war version", "Pulls Kill Bill server war from Sonatype and places it on your machine."
29
+ :desc => 'A different folder other than the current working directory.'
30
+ desc 'pull_kb_server_war version', 'Pulls Kill Bill server war from Sonatype and places it on your machine.'
30
31
  def pull_kb_server_war(version='LATEST')
31
- response = KillbillServerArtifact.pull(BaseArtifact::KILLBILL_GROUP_ID, KillbillServerArtifact::KILLBILL_ARTIFACT_ID, KillbillServerArtifact::KILLBILL_PACKAGING, KillbillServerArtifact::KILLBILL_CLASSIFIER, version, options[:destination], options[:overrides], options[:ssl_verify])
32
+ response = KillbillServerArtifact.pull(logger,
33
+ KillbillServerArtifact::KILLBILL_GROUP_ID,
34
+ KillbillServerArtifact::KILLBILL_ARTIFACT_ID,
35
+ KillbillServerArtifact::KILLBILL_PACKAGING,
36
+ KillbillServerArtifact::KILLBILL_CLASSIFIER,
37
+ version,
38
+ options[:destination],
39
+ options[:overrides],
40
+ options[:ssl_verify])
32
41
  say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
33
42
  end
34
43
 
35
- desc "search_for_kb_server", "Searches for all versions of Kill Bill server and prints them to the screen."
44
+ desc 'search_for_kb_server', 'Searches for all versions of Kill Bill server and prints them to the screen.'
36
45
  def search_for_kb_server
37
- say "Available versions: #{KillbillServerArtifact.versions(BaseArtifact::KILLBILL_GROUP_ID, KillbillServerArtifact::KILLBILL_ARTIFACT_ID, KillbillServerArtifact::KILLBILL_PACKAGING, KillbillServerArtifact::KILLBILL_CLASSIFIER, options[:overrides], options[:ssl_verify]).to_a.join(', ')}", :green
46
+ say "Available versions: #{KillbillServerArtifact.versions(KillbillServerArtifact::KILLBILL_ARTIFACT_ID,
47
+ KillbillServerArtifact::KILLBILL_PACKAGING,
48
+ KillbillServerArtifact::KILLBILL_CLASSIFIER,
49
+ options[:overrides],
50
+ options[:ssl_verify]).to_a.join(', ')}", :green
38
51
  end
39
52
 
40
53
  method_option :destination,
41
- :type => :string,
54
+ :type => :string,
42
55
  :default => nil,
43
- :desc => "A different folder other than the current working directory."
44
- desc "pull_kp_server_war version", "Pulls Kill Pay server war from Sonatype and places it on your machine."
56
+ :desc => 'A different folder other than the current working directory.'
57
+ desc 'pull_kp_server_war version', 'Pulls Kill Pay server war from Sonatype and places it on your machine.'
45
58
  def pull_kp_server_war(version='LATEST')
46
- response = KillbillServerArtifact.pull(BaseArtifact::KILLBILL_GROUP_ID, KillbillServerArtifact::KILLPAY_ARTIFACT_ID, KillbillServerArtifact::KILLPAY_PACKAGING, KillbillServerArtifact::KILLPAY_CLASSIFIER, version, options[:destination], options[:overrides], options[:ssl_verify])
59
+ response = KillbillServerArtifact.pull(logger,
60
+ KillbillServerArtifact::KILLBILL_GROUP_ID,
61
+ KillbillServerArtifact::KILLPAY_ARTIFACT_ID,
62
+ KillbillServerArtifact::KILLPAY_PACKAGING,
63
+ KillbillServerArtifact::KILLPAY_CLASSIFIER,
64
+ version,
65
+ options[:destination],
66
+ options[:overrides],
67
+ options[:ssl_verify])
47
68
  say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
48
69
  end
49
70
 
50
- desc "search_for_kp_server", "Searches for all versions of Kill Pay server and prints them to the screen."
71
+ desc 'search_for_kp_server', 'Searches for all versions of Kill Pay server and prints them to the screen.'
51
72
  def search_for_kp_server
52
- say "Available versions: #{KillbillServerArtifact.versions(BaseArtifact::KILLBILL_GROUP_ID, KillbillServerArtifact::KILLPAY_ARTIFACT_ID, KillbillServerArtifact::KILLPAY_PACKAGING, KillbillServerArtifact::KILLPAY_CLASSIFIER, options[:overrides], options[:ssl_verify]).to_a.join(', ')}", :green
73
+ say "Available versions: #{KillbillServerArtifact.versions(KillbillServerArtifact::KILLPAY_ARTIFACT_ID,
74
+ KillbillServerArtifact::KILLPAY_PACKAGING,
75
+ KillbillServerArtifact::KILLPAY_CLASSIFIER,
76
+ options[:overrides],
77
+ options[:ssl_verify]).to_a.join(', ')}", :green
53
78
  end
54
79
 
55
80
  method_option :destination,
56
- :type => :string,
81
+ :type => :string,
57
82
  :default => nil,
58
- :desc => "A different folder other than the current working directory."
59
- desc "pull_java_plugin artifact_id", "Pulls a java plugin from Sonatype and places it on your machine."
83
+ :desc => 'A different folder other than the current working directory.'
84
+ desc 'pull_java_plugin artifact_id', 'Pulls a java plugin from Sonatype and places it on your machine.'
60
85
  def pull_java_plugin(artifact_id, version='LATEST')
61
- response = KillbillPluginArtifact.pull(artifact_id, version, :java, options[:destination], options[:overrides], options[:ssl_verify])
86
+ response = KillbillPluginArtifact.pull(logger,
87
+ KillbillPluginArtifact::KILLBILL_JAVA_PLUGIN_GROUP_ID,
88
+ artifact_id,
89
+ KillbillPluginArtifact::KILLBILL_JAVA_PLUGIN_PACKAGING,
90
+ KillbillPluginArtifact::KILLBILL_JAVA_PLUGIN_CLASSIFIER,
91
+ version,
92
+ options[:destination],
93
+ options[:overrides],
94
+ options[:ssl_verify])
62
95
  say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
63
96
  end
64
97
 
65
98
  method_option :destination,
66
- :type => :string,
99
+ :type => :string,
67
100
  :default => nil,
68
- :desc => "A different folder other than the current working directory."
69
- desc "pull_ruby_plugin artifact_id", "Pulls a ruby plugin from Sonatype and places it on your machine."
101
+ :desc => 'A different folder other than the current working directory.'
102
+ desc 'pull_ruby_plugin artifact_id', 'Pulls a ruby plugin from Sonatype and places it on your machine.'
70
103
  def pull_ruby_plugin(artifact_id, version='LATEST')
71
- response = KillbillPluginArtifact.pull(artifact_id, version, :ruby, options[:destination], options[:overrides], options[:ssl_verify])
104
+ response = KillbillPluginArtifact.pull(logger,
105
+ KillbillPluginArtifact::KILLBILL_RUBY_PLUGIN_GROUP_ID,
106
+ artifact_id,
107
+ KillbillPluginArtifact::KILLBILL_RUBY_PLUGIN_PACKAGING,
108
+ KillbillPluginArtifact::KILLBILL_RUBY_PLUGIN_CLASSIFIER,
109
+ version,
110
+ options[:destination],
111
+ options[:overrides],
112
+ options[:ssl_verify])
72
113
  say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
73
114
  end
74
115
 
75
- desc "search_for_plugins", "Searches for all available plugins and prints them to the screen."
116
+ desc 'search_for_plugins', 'Searches for all available plugins and prints them to the screen.'
76
117
  def search_for_plugins
77
118
  all_plugins = KillbillPluginArtifact.versions(options[:overrides], options[:ssl_verify])
78
119
 
@@ -88,19 +129,35 @@ module KPM
88
129
  end
89
130
 
90
131
  method_option :destination,
91
- :type => :string,
132
+ :type => :string,
92
133
  :default => nil,
93
- :desc => "A different folder other than the current working directory."
94
- desc "pull_kaui_war version", "Pulls Kaui war from Sonatype and places it on your machine."
134
+ :desc => 'A different folder other than the current working directory.'
135
+ desc 'pull_kaui_war version', 'Pulls Kaui war from Sonatype and places it on your machine.'
95
136
  def pull_kaui_war(version='LATEST')
96
- response = KauiArtifact.pull(version, options[:destination], options[:overrides], options[:ssl_verify])
137
+ response = KauiArtifact.pull(logger,
138
+ KauiArtifact::KAUI_GROUP_ID,
139
+ KauiArtifact::KAUI_ARTIFACT_ID,
140
+ KauiArtifact::KAUI_PACKAGING,
141
+ KauiArtifact::KAUI_CLASSIFIER,
142
+ version,
143
+ options[:destination],
144
+ options[:overrides],
145
+ options[:ssl_verify])
97
146
  say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
98
147
  end
99
148
 
100
- desc "search_for_kaui", "Searches for all versions of Kaui and prints them to the screen."
149
+ desc 'search_for_kaui', 'Searches for all versions of Kaui and prints them to the screen.'
101
150
  def search_for_kaui
102
151
  say "Available versions: #{KauiArtifact.versions(options[:overrides], options[:ssl_verify]).to_a.join(', ')}", :green
103
152
  end
153
+
154
+ private
155
+
156
+ def logger
157
+ logger = ::Logger.new(STDOUT)
158
+ logger.level = Logger::INFO
159
+ logger
160
+ end
104
161
  end
105
162
  end
106
163
  end
data/lib/kpm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module KPM
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe KPM::BaseArtifact do
4
+
5
+ before(:all) do
6
+ @logger = Logger.new(STDOUT)
7
+ @logger.level = Logger::INFO
8
+ end
9
+
10
+ it 'should be able to download and verify regular artifacts' do
11
+ Dir.mktmpdir do |dir|
12
+ test_download dir, 'foo-oss.pom.xml'
13
+ end
14
+
15
+ Dir.mktmpdir do |dir|
16
+ test_download dir
17
+ end
18
+ end
19
+
20
+ # This test makes sure the top level directory is correctly skipped
21
+ it 'should be able to download and verify .tar.gz ruby artifacts' do
22
+ # Use the payment-test-plugin as a test, as it is fairly small (2.5M)
23
+ group_id = 'org.kill-bill.billing.plugin.ruby'
24
+ artifact_id = 'payment-test-plugin'
25
+ packaging = 'tar.gz'
26
+ classifier = nil
27
+ version = '1.8.7'
28
+
29
+ Dir.mktmpdir do |dir|
30
+ info = KPM::BaseArtifact.pull(@logger, group_id, artifact_id, packaging, classifier, version, dir)
31
+ info[:file_name].should be_nil
32
+
33
+ files_in_dir = Dir[info[:file_path] + '/*']
34
+ files_in_dir.size.should == 1
35
+ files_in_dir[0].should == info[:file_path] + '/killbill-payment-test'
36
+
37
+ File.read(info[:file_path] + '/killbill-payment-test/1.8.7/killbill.properties').should == "mainClass=PaymentTest::PaymentPlugin\nrequire=payment_test\npluginType=PAYMENT\n"
38
+ end
39
+ end
40
+
41
+ it 'should be able to download and verify generic .tar.gz artifacts' do
42
+ # The artifact is not small unfortunately (23.7M)
43
+ group_id = 'org.kill-bill.billing'
44
+ artifact_id = 'killbill-osgi-bundles-defaultbundles'
45
+ packaging = 'tar.gz'
46
+ classifier = nil
47
+ version = '0.11.3'
48
+
49
+ Dir.mktmpdir do |dir|
50
+ info = KPM::BaseArtifact.pull(@logger, group_id, artifact_id, packaging, classifier, version, dir)
51
+ info[:file_name].should be_nil
52
+
53
+ files_in_dir = Dir[info[:file_path] + '/*']
54
+ files_in_dir.size.should == 20
55
+
56
+ File.file?(info[:file_path] + '/killbill-osgi-bundles-jruby-0.11.3.jar').should be_true
57
+ end
58
+ end
59
+
60
+ def test_download(dir, filename=nil)
61
+ path = filename.nil? ? dir : dir + '/' + filename
62
+ info = KPM::BaseArtifact.pull(@logger, 'org.kill-bill.billing', 'killbill-oss-parent', 'pom', nil, 'LATEST', path)
63
+ info[:file_name].should == (filename.nil? ? "killbill-oss-parent-#{info[:version]}.pom" : filename)
64
+ info[:size].should == File.size(info[:file_path])
65
+ end
66
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe KPM::Installer do
4
+
5
+ before(:all) do
6
+ @logger = Logger.new(STDOUT)
7
+ @logger.level = Logger::INFO
8
+ end
9
+
10
+ it 'should be able to install all artifacts' do
11
+ Dir.mktmpdir do |dir|
12
+ kb_webapp_path = dir + '/KB_ROOT.war'
13
+ kaui_webapp_path = dir + '/KAUI_ROOT.war'
14
+ plugins_dir = dir + '/bundles'
15
+ installer = KPM::Installer.new({
16
+ 'killbill' => {
17
+ 'webapp_path' => kb_webapp_path,
18
+ 'plugins_dir' => plugins_dir,
19
+ 'plugins' => {
20
+ 'java' => [{
21
+ 'name' => 'analytics-plugin',
22
+ 'version' => '0.7.1'
23
+ }],
24
+ 'ruby' => [{
25
+ 'name' => 'payment-test-plugin',
26
+ 'version' => '1.8.7'
27
+ }]
28
+ },
29
+ },
30
+ 'kaui' => {
31
+ 'webapp_path' => kaui_webapp_path
32
+ }
33
+
34
+ },
35
+ @logger)
36
+
37
+ installer.install
38
+
39
+ [
40
+ plugins_dir,
41
+ plugins_dir + '/platform',
42
+ plugins_dir + '/plugins',
43
+ plugins_dir + '/plugins/java',
44
+ plugins_dir + '/plugins/java/analytics-plugin',
45
+ plugins_dir + '/plugins/java/analytics-plugin/0.7.1',
46
+ plugins_dir + '/plugins/ruby',
47
+ plugins_dir + '/plugins/ruby/killbill-payment-test',
48
+ plugins_dir + '/plugins/ruby/killbill-payment-test/1.8.7'
49
+ ].each do |dir|
50
+ File.directory?(dir).should be_true
51
+ end
52
+
53
+ [
54
+ kb_webapp_path,
55
+ kaui_webapp_path,
56
+ plugins_dir + '/platform/jruby.jar',
57
+ plugins_dir + '/plugins/java/analytics-plugin/0.7.1/analytics-plugin-0.7.1.jar',
58
+ plugins_dir + '/plugins/ruby/killbill-payment-test/1.8.7/killbill.properties'
59
+ ].each do |file|
60
+ File.file?(file).should be_true
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe KPM::KillbillPluginArtifact do
4
+
5
+ before(:all) do
6
+ @logger = Logger.new(STDOUT)
7
+ @logger.level = Logger::INFO
8
+ end
9
+
10
+ it 'should be able to download and verify artifacts' do
11
+ Dir.mktmpdir do |dir|
12
+ info = KPM::KauiArtifact.pull(@logger,
13
+ KPM::BaseArtifact::KAUI_GROUP_ID,
14
+ KPM::BaseArtifact::KAUI_ARTIFACT_ID,
15
+ KPM::BaseArtifact::KAUI_PACKAGING,
16
+ KPM::BaseArtifact::KAUI_CLASSIFIER,
17
+ 'LATEST',
18
+ dir)
19
+ info[:file_name].should == "kaui-standalone-#{info[:version]}.war"
20
+ info[:size].should == File.size(info[:file_path])
21
+ end
22
+ end
23
+
24
+ it 'should be able to list versions' do
25
+ versions = KPM::KauiArtifact.versions.to_a
26
+ versions.size.should >= 2
27
+ versions[0].should == '0.0.1'
28
+ versions[1].should == '0.0.2'
29
+ end
30
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe KPM::KillbillPluginArtifact do
4
+
5
+ before(:all) do
6
+ @logger = Logger.new(STDOUT)
7
+ @logger.level = Logger::INFO
8
+ end
9
+
10
+ it 'should be able to download and verify artifacts' do
11
+ Dir.mktmpdir do |dir|
12
+ info = KPM::KillbillPluginArtifact.pull(@logger,
13
+ KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_GROUP_ID,
14
+ 'analytics-plugin',
15
+ KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_PACKAGING,
16
+ KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_CLASSIFIER,
17
+ 'LATEST',
18
+ dir)
19
+ info[:file_name].should == "analytics-plugin-#{info[:version]}.jar"
20
+ info[:size].should == File.size(info[:file_path])
21
+ end
22
+
23
+ Dir.mktmpdir do |dir|
24
+ info = KPM::KillbillPluginArtifact.pull(@logger,
25
+ KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_GROUP_ID,
26
+ 'logging-plugin',
27
+ KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_PACKAGING,
28
+ KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_CLASSIFIER,
29
+ 'LATEST',
30
+ dir)
31
+
32
+ # No file name - since we untar'ed it
33
+ info[:file_name].should be_nil
34
+ end
35
+ end
36
+
37
+ it 'should be able to list versions' do
38
+ versions = KPM::KillbillPluginArtifact.versions
39
+
40
+ versions[:java].should_not be_nil
41
+ versions[:java]['analytics-plugin'].should_not be_nil
42
+ logging_plugin_versions = versions[:java]['analytics-plugin'].to_a
43
+ logging_plugin_versions.size.should >= 3
44
+ logging_plugin_versions[0].should == '0.6.0'
45
+ logging_plugin_versions[1].should == '0.7.0'
46
+ logging_plugin_versions[2].should == '0.7.1'
47
+
48
+ versions[:ruby].should_not be_nil
49
+ versions[:ruby]['logging-plugin'].should_not be_nil
50
+ logging_plugin_versions = versions[:ruby]['logging-plugin'].to_a
51
+ logging_plugin_versions.size.should >= 1
52
+ logging_plugin_versions[0].should == '1.7.0'
53
+ end
54
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe KPM::KillbillServerArtifact do
4
+
5
+ before(:all) do
6
+ @logger = Logger.new(STDOUT)
7
+ @logger.level = Logger::INFO
8
+ end
9
+
10
+ # Takes about 7 minutes...
11
+ it 'should be able to download and verify artifacts' do
12
+ Dir.mktmpdir do |dir|
13
+ info = KPM::KillbillServerArtifact.pull(@logger,
14
+ KPM::BaseArtifact::KILLBILL_GROUP_ID,
15
+ KPM::BaseArtifact::KILLBILL_ARTIFACT_ID,
16
+ KPM::BaseArtifact::KILLBILL_PACKAGING,
17
+ KPM::BaseArtifact::KILLBILL_CLASSIFIER,
18
+ 'LATEST',
19
+ dir)
20
+ info[:file_name].should == "killbill-profiles-killbill-#{info[:version]}-jar-with-dependencies.war"
21
+ info[:size].should == File.size(info[:file_path])
22
+ end
23
+ end
24
+
25
+ it 'should be able to list versions' do
26
+ versions = KPM::KillbillServerArtifact.versions(KPM::BaseArtifact::KILLBILL_ARTIFACT_ID).to_a
27
+ versions.size.should >= 2
28
+ versions[0].should == '0.11.5'
29
+ versions[1].should == '0.11.6'
30
+ end
31
+ end
@@ -0,0 +1,10 @@
1
+ require 'tmpdir'
2
+ require 'kpm'
3
+ require 'logger'
4
+ require 'rspec'
5
+
6
+ RSpec.configure do |config|
7
+ config.color_enabled = true
8
+ config.tty = true
9
+ config.formatter = 'documentation'
10
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kpm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kill Bill core team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-10 00:00:00.000000000 Z
11
+ date: 2014-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -104,6 +104,12 @@ files:
104
104
  - lib/kpm/tasks.rb
105
105
  - lib/kpm/utils.rb
106
106
  - lib/kpm/version.rb
107
+ - spec/kpm/remote/base_artifact_spec.rb
108
+ - spec/kpm/remote/installer_spec.rb
109
+ - spec/kpm/remote/kaui_artifact_spec.rb
110
+ - spec/kpm/remote/killbill_plugin_artifact_spec.rb
111
+ - spec/kpm/remote/killbill_server_artifact_spec.rb
112
+ - spec/spec_helper.rb
107
113
  homepage: http://kill-bill.org
108
114
  licenses:
109
115
  - Apache License (2.0)
@@ -130,4 +136,10 @@ rubygems_version: 2.2.2
130
136
  signing_key:
131
137
  specification_version: 4
132
138
  summary: Kill Bill package manager.
133
- test_files: []
139
+ test_files:
140
+ - spec/kpm/remote/base_artifact_spec.rb
141
+ - spec/kpm/remote/installer_spec.rb
142
+ - spec/kpm/remote/kaui_artifact_spec.rb
143
+ - spec/kpm/remote/killbill_plugin_artifact_spec.rb
144
+ - spec/kpm/remote/killbill_server_artifact_spec.rb
145
+ - spec/spec_helper.rb