dependabot-bundler 0.317.0 → 0.318.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1aed7711aa4d28efbf7f689080aacfcea195e396452f0e4c3919b9fe3f3c9925
4
- data.tar.gz: 3222607755992756baccfc661c9046d0d0f531394eec15b356e7267d32302aae
3
+ metadata.gz: 2893c2182ca7aad9c1ab46333536daf31a7253a08c01b3a84f422622118aeebd
4
+ data.tar.gz: ddffd70d6df0a1f77370bc93fe36bb92604f44353b8ed1ddcc317aabc5986de0
5
5
  SHA512:
6
- metadata.gz: 6d9c9886c057eca2efa7f61ece94c1ad470477b6f72a9abd1b4412c69084a9c1b4d80008888d3ca8ef87b760f8c2afc335e4f806634d35cfc23336cb5f547e54
7
- data.tar.gz: 9e1d96d3996858b3b2936a2239e3d22798c9a2af76671efe27c660c0e79199b1bb1a43cd79b27698229f425ab1c7dab959d8f0d6fea96b72d461a552bc1016e1
6
+ metadata.gz: 97aa8b394311211a8ce25b920e8c230d8f4b75489f1f3ee90180796a9ccf6ab2b146d501bebeb44194f83737b0af620647ab52e789ea84f0ba4509667ce5aac0
7
+ data.tar.gz: 54a4b721000eba54bee7d8608d0269858f1477ab67f4b8f560c96c37c6e1f1f884995c0705531e44d48051fe534518f31d5d675c105fb3c0cb73c58f3a779e65
@@ -21,16 +21,12 @@ module Dependabot
21
21
  require_relative "../update_checker/shared_bundler_helpers"
22
22
  include Dependabot::Bundler::UpdateChecker::SharedBundlerHelpers
23
23
 
24
- RELEASES_URL = "https://rubygems.org/api/v1/versions/%s.json"
25
- GEM_URL = "https://rubygems.org/gems/%s.gem"
24
+ RELEASES_URL = "%s/api/v1/versions/%s.json"
25
+ GEM_URL = "%s/gems/%s.gem"
26
26
  PACKAGE_TYPE = "gem"
27
27
  PACKAGE_LANGUAGE = "ruby"
28
28
  APPLICATION_JSON = "application/json"
29
-
30
29
  RUBYGEMS = "rubygems"
31
- PRIVATE_REGISTRY = "private"
32
- GIT = "git"
33
- OTHER = "other"
34
30
 
35
31
  sig do
36
32
  params(
@@ -58,15 +54,7 @@ module Dependabot
58
54
 
59
55
  sig { returns(Dependabot::Package::PackageDetails) }
60
56
  def fetch
61
- return rubygems_versions if dependency.name == "bundler"
62
- return rubygems_versions unless gemfile
63
-
64
- case source_type
65
- when OTHER, GIT, PRIVATE_REGISTRY
66
- package_details([])
67
- else
68
- rubygems_versions
69
- end
57
+ rubygems_versions
70
58
  end
71
59
 
72
60
  private
@@ -127,15 +115,39 @@ module Dependabot
127
115
  # ]
128
116
  sig { returns(Dependabot::Package::PackageDetails) }
129
117
  def rubygems_versions
130
- response = registry_json_response_for_dependency
131
- raise unless response.status == 200
118
+ registry_url = get_url_from_dependency(dependency) || "https://rubygems.org"
119
+
120
+ # TODO: Github private registry support
121
+ # registry_url = "https://rubygems.pkg.github.com/#{OWNER_NAME}"
122
+ # Corresponding API URL:
123
+ # curl -H "Accept: application/json" \
124
+ # -H "Authorization: Bearer <<TOKEN>>" \
125
+ # https://api.github.com/orgs/dsp-testing/packages/rubygems/json/version
126
+ parsed_url = begin
127
+ URI.parse(registry_url)
128
+ rescue URI::InvalidURIError
129
+ raise "Invalid registry URL: #{registry_url}"
130
+ end
131
+ return package_details([]) if parsed_url.host == "rubygems.pkg.github.com"
132
+
133
+ response = registry_json_response_for_dependency(registry_url)
134
+
135
+ unless response.status == 200
136
+ error_details = "Status: #{response.status}"
137
+ error_message = "Failed to fetch versions for '#{dependency.name}' from '#{registry_url}'. #{error_details}"
138
+ Dependabot.logger.info(error_message)
139
+ return package_details([])
140
+ end
141
+
142
+ registry_url = get_url_from_dependency(dependency) || "https://rubygems.org" # Get registry_url
132
143
 
133
144
  package_releases = JSON.parse(response.body).map do |release|
145
+ gem_name_with_version = "#{@dependency.name}-#{release['number']}"
134
146
  package_release(
135
147
  version: release["number"],
136
148
  released_at: Time.parse(release["created_at"]),
137
149
  downloads: release["downloads_count"],
138
- url: GEM_URL % "#{@dependency.name}-#{release['number']}",
150
+ url: format(GEM_URL, registry_url, gem_name_with_version),
139
151
  ruby_version: release["ruby_version"]
140
152
  )
141
153
  end
@@ -143,9 +155,23 @@ module Dependabot
143
155
  package_details(package_releases)
144
156
  end
145
157
 
146
- sig { returns(Excon::Response) }
147
- def registry_json_response_for_dependency
148
- url = RELEASES_URL % dependency.name
158
+ sig { params(dependency: T.untyped).returns(T.nilable(String)) }
159
+ def get_url_from_dependency(dependency)
160
+ return nil unless dependency&.requirements&.any?
161
+
162
+ first_requirement = dependency.requirements.first
163
+ return nil unless first_requirement && first_requirement[:source]
164
+
165
+ url = T.let(first_requirement[:source][:url], T.nilable(String))
166
+ return nil unless url
167
+
168
+ url.end_with?("/") ? url.chop : url
169
+ end
170
+
171
+ sig { params(registry_url: T.nilable(String)).returns(Excon::Response) }
172
+ def registry_json_response_for_dependency(registry_url = "https://rubygems.org")
173
+ url = format(RELEASES_URL, registry_url, dependency.name)
174
+
149
175
  Dependabot::RegistryClient.get(
150
176
  url: url,
151
177
  headers: { "Accept" => APPLICATION_JSON }
@@ -157,27 +183,6 @@ module Dependabot
157
183
  Requirement.new(req_string)
158
184
  end
159
185
 
160
- sig { returns(String) }
161
- def source_type
162
- @source_type ||= begin
163
- return @source_type = RUBYGEMS unless gemfile
164
-
165
- @source_type = in_a_native_bundler_context do |tmp_dir|
166
- NativeHelpers.run_bundler_subprocess(
167
- bundler_version: bundler_version,
168
- function: "dependency_source_type",
169
- options: {}, # options,
170
- args: {
171
- dir: tmp_dir,
172
- gemfile_name: gemfile.name,
173
- dependency_name: dependency.name,
174
- credentials: credentials
175
- }
176
- )
177
- end
178
- end
179
- end
180
-
181
186
  sig { override.returns(String) }
182
187
  def bundler_version
183
188
  @bundler_version ||= T.let(Helpers.bundler_version(lockfile), T.nilable(String))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.317.0
4
+ version: 0.318.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.317.0
18
+ version: 0.318.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 0.317.0
25
+ version: 0.318.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: parallel
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -322,7 +322,7 @@ licenses:
322
322
  - MIT
323
323
  metadata:
324
324
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
325
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.317.0
325
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.318.0
326
326
  rdoc_options: []
327
327
  require_paths:
328
328
  - lib