kpm 0.8.2 → 0.10.2

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +73 -8
  4. data/README.adoc +37 -2
  5. data/docker/docker-compose.ci.mysql.yml +21 -0
  6. data/kpm.gemspec +4 -3
  7. data/lib/kpm/account.rb +3 -2
  8. data/lib/kpm/coordinates.rb +4 -3
  9. data/lib/kpm/database.rb +3 -2
  10. data/lib/kpm/formatter.rb +2 -2
  11. data/lib/kpm/inspector.rb +2 -2
  12. data/lib/kpm/killbill_server_artifact.rb +19 -10
  13. data/lib/kpm/migrations.rb +18 -4
  14. data/lib/kpm/nexus_helper/actions.rb +9 -5
  15. data/lib/kpm/nexus_helper/cloudsmith_api_calls.rb +85 -0
  16. data/lib/kpm/nexus_helper/github_api_calls.rb +70 -0
  17. data/lib/kpm/nexus_helper/nexus_api_calls_v2.rb +79 -50
  18. data/lib/kpm/plugins_directory.yml +8 -4
  19. data/lib/kpm/plugins_manager.rb +12 -5
  20. data/lib/kpm/tasks.rb +23 -7
  21. data/lib/kpm/tenant_config.rb +1 -1
  22. data/lib/kpm/tomcat_manager.rb +1 -0
  23. data/lib/kpm/version.rb +1 -1
  24. data/pom.xml +211 -40
  25. data/spec/kpm/remote/base_artifact_spec.rb +15 -13
  26. data/spec/kpm/remote/base_installer_spec.rb +13 -13
  27. data/spec/kpm/remote/cloudsmith_api_calls_spec.rb +109 -0
  28. data/spec/kpm/remote/github_api_calls_spec.rb +40 -0
  29. data/spec/kpm/remote/installer_spec.rb +30 -30
  30. data/spec/kpm/remote/kaui_artifact_spec.rb +4 -4
  31. data/spec/kpm/remote/killbill_plugin_artifact_spec.rb +19 -19
  32. data/spec/kpm/remote/killbill_server_artifact_spec.rb +13 -13
  33. data/spec/kpm/remote/migrations_spec.rb +9 -9
  34. data/spec/kpm/remote/nexus_facade_spec.rb +2 -2
  35. data/spec/kpm/remote/tenant_config_spec.rb +3 -3
  36. data/spec/kpm/remote/tomcat_manager_spec.rb +2 -2
  37. data/spec/kpm/unit/actions_spec.rb +2 -2
  38. data/spec/kpm/unit/base_artifact_spec.rb +14 -14
  39. data/spec/kpm/unit/inspector_spec.rb +28 -28
  40. data/spec/kpm/unit/installer_spec.rb +4 -4
  41. data/spec/kpm/unit/plugins_directory_spec.rb +31 -31
  42. data/spec/kpm/unit/plugins_manager_spec.rb +54 -54
  43. data/spec/kpm/unit/sha1_checker_spec.rb +2 -2
  44. data/spec/kpm/unit/uninstaller_spec.rb +21 -21
  45. data/spec/kpm/unit_mysql/account_spec.rb +13 -13
  46. data/spec/spec_helper.rb +1 -1
  47. metadata +27 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df289be332b4f05a4bbef990e189e237d7abef620b4f2318c3e2baadef91d6ce
4
- data.tar.gz: d07e97f59cf97689ee44a5a6bcd1d9474765432db76fdafb47f999c9d6c10b50
3
+ metadata.gz: 850bd7e1ec547391cfb29fe983244ddb31cb1d13347b1a83f3bbe8a788594f5f
4
+ data.tar.gz: 81a9d7e00c46ec44bc7fc2f1ff011ad1cce8fcd1edd7e48a507115747ab14665
5
5
  SHA512:
6
- metadata.gz: 80003066d5993ad352c661061c68282f128c52c975b2d9d027b8d0aa177629646e0c6789d3bbdd585ea4393713474f817fb09ae9faa48d7ddbb68eb5d87fc812
7
- data.tar.gz: d1e570789b7d818606df5e5072183e4c76d2ad807bc0ed5ca2aeac0fc68769fe3b11081babd56623efaca7109954b504961e5fecf20047c9cb59e47e72b51832
6
+ metadata.gz: 74378aee057793ae9d2053cdc41cb289651e04ef8f5f3d85e2a6defbec6265b2c8ff4d646d1a53a9681ba19fe1e638652699ed75d9d5ef9f249e8b275dd4d5fe
7
+ data.tar.gz: c2c307d2ac887215656b1d40da38b33b4482ade2a70818d72e65f6eb0e7bd9753d94104897ff55d2aee7cf9dbea56f8fef4d11c1357b480cc42bd3450f390c42
data/.gitignore CHANGED
@@ -7,3 +7,5 @@ kpm-*-linux-x86_64.tar.gz
7
7
  kpm-*-osx.tar.gz
8
8
  traveling-ruby-*.tar.gz
9
9
  *.asc
10
+ .rakeTasks
11
+ pom.xml.versionsBackup
data/.rubocop.yml CHANGED
@@ -4,6 +4,15 @@
4
4
  Gemspec/RequiredRubyVersion:
5
5
  Enabled: false
6
6
 
7
+ Layout/LineLength:
8
+ Enabled: false
9
+
10
+ Layout/EmptyLinesAroundAttributeAccessor:
11
+ Enabled: true
12
+
13
+ Layout/SpaceAroundMethodCallOperator:
14
+ Enabled: true
15
+
7
16
  # Alternative?
8
17
  Gemspec/RubyVersionGlobalsUsage:
9
18
  Enabled: false
@@ -11,7 +20,22 @@ Gemspec/RubyVersionGlobalsUsage:
11
20
  Layout/DefEndAlignment:
12
21
  AutoCorrect: true
13
22
 
14
- Lint/HandleExceptions:
23
+ Lint/DeprecatedOpenSSLConstant:
24
+ Enabled: true
25
+
26
+ Lint/DuplicateElsifCondition:
27
+ Enabled: true
28
+
29
+ Lint/MixedRegexpCaptureTypes:
30
+ Enabled: true
31
+
32
+ Lint/RaiseException:
33
+ Enabled: true
34
+
35
+ Lint/StructNewOverride:
36
+ Enabled: true
37
+
38
+ Lint/SuppressedException:
15
39
  AllowComments: true
16
40
 
17
41
  Metrics/AbcSize:
@@ -29,9 +53,6 @@ Metrics/ClassLength:
29
53
  Metrics/CyclomaticComplexity:
30
54
  Enabled: false
31
55
 
32
- Metrics/LineLength:
33
- Enabled: false
34
-
35
56
  Metrics/MethodLength:
36
57
  Enabled: false
37
58
 
@@ -47,10 +68,6 @@ Metrics/PerceivedComplexity:
47
68
  Security/YAMLLoad:
48
69
  Enabled: false
49
70
 
50
- # We must support old Rubies
51
- Style/BracesAroundHashParameters:
52
- Enabled: false
53
-
54
71
  Style/Documentation:
55
72
  Enabled: false
56
73
 
@@ -71,3 +88,51 @@ Style/SafeNavigation:
71
88
 
72
89
  Style/GuardClause:
73
90
  Enabled: false
91
+
92
+ Style/AccessorGrouping:
93
+ Enabled: true
94
+
95
+ Style/ArrayCoercion:
96
+ Enabled: true
97
+
98
+ Style/BisectedAttrAccessor:
99
+ Enabled: true
100
+
101
+ Style/CaseLikeIf:
102
+ Enabled: true
103
+
104
+ Style/ExponentialNotation:
105
+ Enabled: true
106
+
107
+ Style/HashAsLastArrayItem:
108
+ Enabled: true
109
+
110
+ Style/HashEachMethods:
111
+ Enabled: true
112
+
113
+ Style/HashLikeCase:
114
+ Enabled: true
115
+
116
+ Style/HashTransformKeys:
117
+ Enabled: true
118
+
119
+ Style/HashTransformValues:
120
+ Enabled: true
121
+
122
+ Style/RedundantAssignment:
123
+ Enabled: true
124
+
125
+ Style/RedundantFetchBlock:
126
+ Enabled: true
127
+
128
+ Style/RedundantFileExtensionInRequire:
129
+ Enabled: true
130
+
131
+ Style/RedundantRegexpCharacterClass:
132
+ Enabled: true
133
+
134
+ Style/RedundantRegexpEscape:
135
+ Enabled: true
136
+
137
+ Style/SlicingWithRange:
138
+ Enabled: true
data/README.adoc CHANGED
@@ -14,8 +14,9 @@ toc::[]
14
14
 
15
15
  [[pre-built-binaries-recommended]]
16
16
  === Pre-built binaries (recommended)
17
+ image:https://img.shields.io/maven-central/v/org.kill-bill.billing.installer/kpm?color=blue&label=kpm[kpm]
17
18
 
18
- KPM self-contained builds are available on http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.kill-bill.billing.installer%22%20AND%20a%3A%22kpm%22[Maven Central] with coordinates `org.kill-bill.billing.installer:kpm`.
19
+ On Linux and MacOS, you can use the pre-built binaries. KPM self-contained builds are available on http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.kill-bill.billing.installer%22%20AND%20a%3A%22kpm%22[Maven Central] with coordinates `org.kill-bill.billing.installer:kpm`.
19
20
 
20
21
  Download the `.tar.gz` package matching your architecture (Linux and MacOS only).
21
22
 
@@ -23,8 +24,13 @@ Note that this installation method assumes `/bin/bash` to be available on your s
23
24
 
24
25
  [[through-rubygems]]
25
26
  === Through Rubygems
27
+ image:https://img.shields.io/gem/v/kpm?color=blue&label=kpm[kpm]
28
+
29
+ On Windows, you can install KPM via https://rubygems.org/gems/kpm[RubyGems.org]. For this, you need to first install Ruby. Ruby can be installed via https://rubyinstaller.org/[RubyInstaller]. Once installed, you can run the following command to install KPM:
30
+ [source,bash]
31
+ gem install kpm
32
+
26
33
 
27
- KPM is also available on https://rubygems.org/gems/kpm[RubyGems.org].
28
34
 
29
35
  [[kpm-commands]]
30
36
  == KPM Commands
@@ -245,3 +251,32 @@ Notes:
245
251
 
246
252
  * You can override that behavior with the `--force-download` switch
247
253
  * When `--force-download` is specified (`false` by default), network access to a Nexus instance is required. Otherwise, downloads are idempotent even if no outbound networking is allowed (on initial download, the Nexus metadata is cached in the `sha1.yml` file which is re-used on subsequent installation if no outbound networking is allowed -- by default, KPM will try to get the latest metadata from Nexus though)
254
+
255
+ [[gh-packages]]
256
+ ### GitHub Packages
257
+
258
+ Starting with version 0.9.0, experimental support for GitHub packages has been added:
259
+
260
+ ....
261
+ kpm install_java_plugin acme:plugin \
262
+ --overrides url:https://maven.pkg.github.com/acme/plugin token:<TOKEN> \
263
+ --group-id com.acme \
264
+ --artifact-id plugin \
265
+ --version 0.0.1
266
+ ....
267
+
268
+ Replace `TOKEN` with a GitHub personal access token.
269
+
270
+ [[cloudsmith]]
271
+ ### Cloudsmith
272
+
273
+ Starting with version 0.10.0, experimental support for Cloudsmith has been added:
274
+
275
+ ....
276
+ kpm pull_kb_server_war 0.22.21-SNAPSHOT \
277
+ --overrides url:https://dl.cloudsmith.io/<TOKEN>/<ORG>/<REPO>/maven \
278
+ --group-id org.kill-bill.billing \
279
+ --artifact-id killbill-profiles-killbill
280
+ ....
281
+
282
+ Replace `TOKEN` with a Cloudsmith entitlement token, and specify the right `ORG` and `REPO`.
@@ -0,0 +1,21 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ killbill:
5
+ network_mode: host
6
+ image: killbill/killbill:0.22.1
7
+ environment:
8
+ - KILLBILL_CATALOG_URI=SpyCarAdvanced.xml
9
+ - KILLBILL_DAO_URL=jdbc:mysql://0.0.0.0:3306/killbill
10
+ - KILLBILL_DAO_USER=root
11
+ - KILLBILL_DAO_PASSWORD=root
12
+ - KILLBILL_SERVER_TEST_MODE=true
13
+ - KILLBILL_INVOICE_SANITY_SAFETY_BOUND_ENABLED=false
14
+ - KILLBILL_INVOICE_MAX_DAILY_NUMBER_OF_ITEMS_SAFETY_BOUND=-1
15
+ depends_on:
16
+ - db
17
+ db:
18
+ network_mode: host
19
+ image: killbill/mariadb:0.22
20
+ environment:
21
+ - MYSQL_ROOT_PASSWORD=root
data/kpm.gemspec CHANGED
@@ -46,7 +46,8 @@ Gem::Specification.new do |s|
46
46
  s.add_dependency 'rubyzip', '~>1.2.0'
47
47
  s.add_dependency 'thor', '~> 0.19.1'
48
48
 
49
- s.add_development_dependency 'rake', '>= 10.0.0', '< 11.0.0'
50
- s.add_development_dependency 'rspec', '~> 2.12.0'
51
- s.add_development_dependency 'rubocop', '~> 0.74.0' if RUBY_VERSION >= '2.3'
49
+ s.add_development_dependency 'gem-release', '~> 2.2'
50
+ s.add_development_dependency 'rake', '~> 13.0'
51
+ s.add_development_dependency 'rspec', '~> 3.9'
52
+ s.add_development_dependency 'rubocop', '~> 0.88.0' if RUBY_VERSION >= '2.4'
52
53
  end
data/lib/kpm/account.rb CHANGED
@@ -316,9 +316,10 @@ module KPM
316
316
  end
317
317
 
318
318
  def replace_boolean(value)
319
- if value.to_s == 'true'
319
+ case value.to_s
320
+ when 'true'
320
321
  1
321
- elsif value.to_s == 'false'
322
+ when 'false'
322
323
  0
323
324
  else
324
325
  value
@@ -24,11 +24,12 @@ module KPM
24
24
  def get_coordinate_map(entry)
25
25
  parts = entry.split(':')
26
26
  length = parts.size
27
- if length == 3
27
+ case length
28
+ when 3
28
29
  { group_id: parts[0], artifact_id: parts[1], packaging: parts[2] }
29
- elsif length == 4
30
+ when 4
30
31
  { group_id: parts[0], artifact_id: parts[1], packaging: parts[2], version: parts[3] }
31
- elsif length == 5
32
+ when 5
32
33
  { group_id: parts[0], artifact_id: parts[1], packaging: parts[2], classifier: parts[3], version: parts[4] }
33
34
  end
34
35
  end
data/lib/kpm/database.rb CHANGED
@@ -86,9 +86,10 @@ module KPM
86
86
  rows = []
87
87
  table[:rows].each do |row|
88
88
  rows << row.map do |value|
89
- if value.is_a?(Symbol)
89
+ case value
90
+ when Symbol
90
91
  value.to_s
91
- elsif value.is_a?(Blob)
92
+ when Blob
92
93
  value.value
93
94
  else
94
95
  escaped_value = value.to_s.gsub(/['"]/, "'" => "\\'", '"' => '\\"')
data/lib/kpm/formatter.rb CHANGED
@@ -97,7 +97,7 @@ module KPM
97
97
  formatted += Kernel.format("#{format_string}\n", *labels_format_argument)
98
98
  formatted += "#{border}\n"
99
99
 
100
- data.keys.each do |key|
100
+ data.each_key do |key|
101
101
  v = data[key]
102
102
 
103
103
  arguments = []
@@ -131,7 +131,7 @@ module KPM
131
131
  seen_labels = Set.new
132
132
 
133
133
  labels_format_argument = []
134
- data.keys.each do |key|
134
+ data.each_key do |key|
135
135
  v = data[key]
136
136
  labels.each do |e|
137
137
  # sanitize entry at the same time
data/lib/kpm/inspector.rb CHANGED
@@ -33,7 +33,7 @@ module KPM
33
33
  sha1_file = "#{bundles_dir}/#{sha1_filename}"
34
34
  sha1_checker = Sha1Checker.from_file(sha1_file)
35
35
 
36
- all_plugins.keys.each do |cur_plugin_name|
36
+ all_plugins.each_key do |cur_plugin_name|
37
37
  cur = all_plugins[cur_plugin_name]
38
38
 
39
39
  sha1_checker.all_sha1.each do |e|
@@ -52,7 +52,7 @@ module KPM
52
52
 
53
53
  def add_plugin_identifier_info(plugins, all_plugins)
54
54
  plugins_manager = PluginsManager.new(plugins, @logger)
55
- all_plugins.keys.each do |cur|
55
+ all_plugins.each_key do |cur|
56
56
  plugin_key, entry = plugins_manager.get_identifier_key_and_entry(cur)
57
57
  all_plugins[cur][:plugin_key] = plugin_key
58
58
  all_plugins[cur][:group_id] = entry ? entry['group_id'] : nil
@@ -41,10 +41,15 @@ module KPM
41
41
  ssl_verify)
42
42
 
43
43
  # Extract the killbill-oss-parent version
44
- pom = REXML::Document.new(File.new(kb_pom_info[:file_path]))
45
- oss_parent_version = pom.root.elements['parent/version'].text
46
- kb_version = pom.root.elements['version'].text
47
-
44
+ file = File.new(kb_pom_info[:file_path])
45
+ begin
46
+ pom = REXML::Document.new(file)
47
+ oss_parent_version = pom.root.elements['parent/version'].text
48
+ kb_version = pom.root.elements['version'].text
49
+ ensure
50
+ file.close
51
+ FileUtils.rm_f(kb_pom_info[:file_path])
52
+ end
48
53
  versions['killbill'] = kb_version
49
54
  versions['killbill-oss-parent'] = oss_parent_version
50
55
 
@@ -61,13 +66,17 @@ module KPM
61
66
  verify_sha1,
62
67
  overrides,
63
68
  ssl_verify)
64
-
65
- pom = REXML::Document.new(File.new(oss_pom_info[:file_path]))
66
- properties_element = pom.root.elements['properties']
67
- %w[killbill-api killbill-plugin-api killbill-commons killbill-platform].each do |property|
68
- versions[property] = properties_element.elements["#{property}.version"].text
69
+ file = File.new(oss_pom_info[:file_path])
70
+ begin
71
+ pom = REXML::Document.new(file)
72
+ properties_element = pom.root.elements['properties']
73
+ %w[killbill-api killbill-plugin-api killbill-commons killbill-platform].each do |property|
74
+ versions[property] = properties_element.elements["#{property}.version"].text
75
+ end
76
+ ensure
77
+ file.close
78
+ FileUtils.rm_f(oss_pom_info[:file_path])
69
79
  end
70
-
71
80
  sha1_checker.cache_killbill_info(version, versions) if sha1_checker
72
81
  end
73
82
  versions
@@ -54,7 +54,7 @@ module KPM
54
54
 
55
55
  def for_version(version = @from_version, name_only = false, migrations_to_skip = Set.new)
56
56
  @logger.info("Looking for migrations repository=#{@repository}, version=#{version}")
57
- metadata = get_as_json("https://api.github.com/repos/#{@repository}/git/trees/#{version}?recursive=1&access_token=#{@oauth_token}")
57
+ metadata = get_as_json("https://api.github.com/repos/#{@repository}/git/trees/#{version}?recursive=1")
58
58
 
59
59
  migrations = []
60
60
  metadata['tree'].each do |entry|
@@ -67,7 +67,7 @@ module KPM
67
67
 
68
68
  sql = nil
69
69
  unless name_only
70
- blob_metadata = get_as_json("#{entry['url']}?access_token=#{@oauth_token}")
70
+ blob_metadata = get_as_json((entry['url']).to_s)
71
71
  sql = decode(blob_metadata['content'], blob_metadata['encoding'])
72
72
  end
73
73
 
@@ -81,8 +81,22 @@ module KPM
81
81
  end
82
82
 
83
83
  def get_as_json(url)
84
- raw = URI.parse(url).read
85
- JSON.parse(raw)
84
+ uri = URI.parse(url)
85
+ http = Net::HTTP.new(uri.host, uri.port)
86
+ http.use_ssl = uri.scheme == 'https'
87
+
88
+ path = uri.path || '/'
89
+ path = "#{path}?#{uri.query}" unless uri.query.nil?
90
+ request = Net::HTTP::Get.new(path)
91
+ request['Authorization'] = "token #{@oauth_token}" unless @oauth_token.nil?
92
+
93
+ response = http.request(request)
94
+ case response.code
95
+ when '200'
96
+ JSON.parse(response.body)
97
+ else
98
+ raise "Unable to download #{url}: #{response.code}"
99
+ end
86
100
  end
87
101
 
88
102
  def decode(content, encoding)
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'nexus_api_calls_v2'
4
- # require_relative 'nexus_api_calls_v3'
4
+ require_relative 'github_api_calls'
5
+ require_relative 'cloudsmith_api_calls'
5
6
 
6
7
  module KPM
7
8
  module NexusFacade
@@ -29,10 +30,13 @@ module KPM
29
30
 
30
31
  @logger = logger
31
32
 
32
- # this is where the version is verified
33
- # example if
34
- # @nexus_api_call = overrides['version'] == '3' ? NexusApiCallsV3.new(overrides, ssl_verify) : NexusApiCallsV2.new(overrides, ssl_verify)
35
- @nexus_api_call = NexusApiCallsV2.new(overrides, ssl_verify, logger)
33
+ @nexus_api_call = if overrides[:url].start_with?('https://maven.pkg.github.com')
34
+ GithubApiCalls.new(overrides, ssl_verify, logger)
35
+ elsif overrides[:url].start_with?('https://dl.cloudsmith.io')
36
+ CloudsmithApiCalls.new(overrides, ssl_verify, logger)
37
+ else
38
+ NexusApiCallsV2.new(overrides, ssl_verify, logger)
39
+ end
36
40
  end
37
41
 
38
42
  def pull_artifact(coordinates, destination = nil)
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+ require 'uri'
5
+ require 'rexml/document'
6
+ require 'openssl'
7
+
8
+ module KPM
9
+ module NexusFacade
10
+ class CloudsmithApiCalls < NexusApiCallsV2
11
+ def pull_artifact_endpoint(coordinates)
12
+ version_artifact_details = begin
13
+ parent_get_artifact_info(coordinates)
14
+ rescue StandardError
15
+ ''
16
+ end
17
+
18
+ # For SNAPSHOTs, we need to figure out the version used as part of the filename
19
+ filename_version = begin
20
+ REXML::Document.new(version_artifact_details).elements['//versioning/snapshotVersions/snapshotVersion[1]/value'].text
21
+ rescue StandardError
22
+ nil
23
+ end
24
+ coords = parse_coordinates(coordinates)
25
+ coords[:version] = filename_version unless filename_version.nil?
26
+ new_coordinates = coords.values.compact.join(':')
27
+
28
+ base_path, versioned_artifact, = build_base_path_and_coords(new_coordinates)
29
+ "#{base_path}/#{versioned_artifact}"
30
+ end
31
+
32
+ alias parent_get_artifact_info get_artifact_info
33
+ def get_artifact_info(coordinates)
34
+ _, versioned_artifact, coords = build_base_path_and_coords(coordinates)
35
+ sha1 = get_sha1(coordinates)
36
+ "<artifact-resolution>
37
+ <data>
38
+ <presentLocally>true</presentLocally>
39
+ <groupId>#{coords[:group_id]}</groupId>
40
+ <artifactId>#{coords[:artifact_id]}</artifactId>
41
+ <version>#{coords[:version]}</version>
42
+ <extension>#{coords[:packaging]}</extension>
43
+ <snapshot>#{!(coords[:version] =~ /-SNAPSHOT$/).nil?}</snapshot>
44
+ <sha1>#{sha1}</sha1>
45
+ <repositoryPath>/#{coords[:group_id].gsub('.', '/')}/#{versioned_artifact}</repositoryPath>
46
+ </data>
47
+ </artifact-resolution>"
48
+ end
49
+
50
+ def get_artifact_info_endpoint(coordinates)
51
+ base_path, _, coords = build_base_path_and_coords(coordinates)
52
+ # Note: we must retrieve the XML for the version, to support SNAPSHOTs
53
+ "#{base_path}/#{coords[:version]}/maven-metadata.xml"
54
+ end
55
+
56
+ def search_for_artifact_endpoint(_coordinates)
57
+ raise NoMethodError, 'Cloudsmith has no search support'
58
+ end
59
+
60
+ def build_query_params(_coordinates, _what_parameters = nil)
61
+ ''
62
+ end
63
+
64
+ private
65
+
66
+ def get_sha1(coordinates)
67
+ base_path, versioned_artifact, = build_base_path_and_coords(coordinates)
68
+ endpoint = "#{base_path}/#{versioned_artifact}.sha1"
69
+ get_response_with_retries(coordinates, endpoint, nil)
70
+ end
71
+
72
+ def build_base_path_and_coords(coordinates)
73
+ coords = parse_coordinates(coordinates)
74
+
75
+ token_org_and_repo = URI.parse(configuration[:url]).path
76
+
77
+ [
78
+ "#{token_org_and_repo}/#{coords[:group_id].gsub('.', '/')}/#{coords[:artifact_id]}",
79
+ "#{coords[:version]}/#{coords[:artifact_id]}-#{coords[:version]}.#{coords[:extension]}",
80
+ coords
81
+ ]
82
+ end
83
+ end
84
+ end
85
+ end