dependabot-bundler 0.389.0 → 0.390.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: b27c0ca95e53100edd2104766511302c6559cc4ebb099e304f2198337d940ab7
4
- data.tar.gz: bada129a0da00144bdd4f600ce5dee62a90ef73943cfb7b75e4f55f0c94d28f7
3
+ metadata.gz: 0dac96c40d771c86c54ade253e41f44c096a49953f97a3a2732e365a7742e699
4
+ data.tar.gz: 3b300480b45f379249135aeaf77338678da10e128abf76c09c6d5ee3030f454f
5
5
  SHA512:
6
- metadata.gz: 88f3032fe0d5aa2a747208d0dfcbeac1a57cdfa9eec18d193d17ac50a586cafdcb64dd15d42e24a8350c833747094561381f4dfb7c540a5a77a5ded124829334
7
- data.tar.gz: 232bd45a635a8ad61404d957776977d25a1cf342fbe42025eeb14b629f0ff694ffd3a08bf47c059cb4a6e2ac60588d3261271c5af888076b92a9a22ba7229d3d
6
+ metadata.gz: 3d4953d692f99de6007cb8f64722d13a963d09cd20c01e3b3b1907907562fcd2d0551876b8ad40054c7ed77dcea490355c01dde2856845d1510eafc02689cb58
7
+ data.tar.gz: 73e2ed787f41f55aed80da27d17d443801536f7894b1fdfd4ec0711e70eef7a3dc82a3675ab8ae4740dce3b2f549b5b58ad8ae490b3a402636bfda7a8ec3aff0
@@ -104,7 +104,7 @@ module Dependabot
104
104
  sig { params(dependencies: T::Array[Dependabot::Dependency]).returns(T::Boolean) }
105
105
  def git_source?(dependencies)
106
106
  dependencies.any? do |dep|
107
- dep.requirements.any? { |req| req.fetch(:source)&.fetch(:type) == "git" }
107
+ dep.requirements.any? { |req| req.source_string("type") == "git" }
108
108
  end
109
109
  end
110
110
 
@@ -380,7 +380,7 @@ module Dependabot
380
380
  sig { params(dependency: Dependabot::Dependency).returns(T::Boolean) }
381
381
  def production?(dependency)
382
382
  groups = dependency.requirements
383
- .flat_map { |r| r.fetch(:groups) }
383
+ .flat_map { |r| r.groups || [] }
384
384
  .map(&:to_s)
385
385
 
386
386
  return true if groups.empty?
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "dependabot/bundler/file_updater"
@@ -56,18 +56,18 @@ module Dependabot
56
56
 
57
57
  updated_requirement =
58
58
  dependency.requirements
59
- .find { |r| r[:file] == file.name }
60
- &.fetch(:requirement)
59
+ .find { |r| r.file == file.name }
60
+ &.requirement_string
61
61
 
62
62
  previous_requirement =
63
63
  dependency.previous_requirements
64
- &.find { |r| r[:file] == file.name }
65
- &.fetch(:requirement)
64
+ &.find { |r| r.file == file.name }
65
+ &.requirement_string
66
66
 
67
67
  RequirementReplacer.new(
68
68
  dependency: dependency,
69
69
  file_type: :gemfile,
70
- updated_requirement: updated_requirement,
70
+ updated_requirement: T.must(updated_requirement),
71
71
  previous_requirement: previous_requirement
72
72
  ).rewrite(content)
73
73
  end
@@ -77,34 +77,34 @@ module Dependabot
77
77
  changed_requirements =
78
78
  dependency.requirements - T.must(dependency.previous_requirements)
79
79
 
80
- changed_requirements.any? { |f| f[:file] == file.name }
80
+ changed_requirements.any? { |f| f.file == file.name }
81
81
  end
82
82
 
83
83
  sig { params(dependency: Dependabot::Dependency).returns(T::Boolean) }
84
84
  def remove_git_source?(dependency)
85
85
  old_gemfile_req =
86
86
  dependency.previous_requirements
87
- &.find { |f| GEMFILE_FILENAMES.include?(f[:file]) }
87
+ &.find { |f| GEMFILE_FILENAMES.include?(f.file) }
88
88
 
89
- return false unless old_gemfile_req&.dig(:source, :type) == "git"
89
+ return false unless old_gemfile_req&.source_string("type") == "git"
90
90
 
91
91
  new_gemfile_req =
92
92
  dependency.requirements
93
- .find { |f| GEMFILE_FILENAMES.include?(f[:file]) }
93
+ .find { |f| GEMFILE_FILENAMES.include?(f.file) }
94
94
 
95
- T.must(new_gemfile_req)[:source].nil?
95
+ T.must(new_gemfile_req).source.nil?
96
96
  end
97
97
 
98
98
  sig { params(dependency: Dependabot::Dependency, file: Dependabot::DependencyFile).returns(T::Boolean) }
99
99
  def update_git_pin?(dependency, file)
100
100
  new_gemfile_req =
101
101
  dependency.requirements
102
- .find { |f| f[:file] == file.name }
103
- return false unless new_gemfile_req&.dig(:source, :type) == "git"
102
+ .find { |f| f.file == file.name }
103
+ return false unless new_gemfile_req&.source_string("type") == "git"
104
104
 
105
105
  # If the new requirement is a git dependency with a ref then there's
106
106
  # no harm in doing an update
107
- !T.must(new_gemfile_req).dig(:source, :ref).nil?
107
+ !T.must(new_gemfile_req).source_string("ref").nil?
108
108
  end
109
109
 
110
110
  sig { params(dependency: Dependabot::Dependency, content: String).returns(String) }
@@ -118,12 +118,11 @@ module Dependabot
118
118
  def update_gemfile_git_pin(dependency, file, content)
119
119
  new_pin =
120
120
  dependency.requirements
121
- .find { |f| f[:file] == file.name }
122
- &.fetch(:source)
123
- &.fetch(:ref)
121
+ .find { |f| f.file == file.name }
122
+ &.source_string("ref")
124
123
 
125
124
  GitPinReplacer
126
- .new(dependency: dependency, new_pin: new_pin)
125
+ .new(dependency: dependency, new_pin: T.must(new_pin))
127
126
  .rewrite(content)
128
127
  end
129
128
  end
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "dependabot/bundler/file_updater"
@@ -51,21 +51,21 @@ module Dependabot
51
51
  updated_requirement =
52
52
  T.must(
53
53
  dependency.requirements
54
- .find { |r| r[:file] == gemspec.name }
54
+ .find { |r| r.file == gemspec.name }
55
55
  )
56
- .fetch(:requirement)
56
+ .requirement_string
57
57
 
58
58
  previous_requirement =
59
59
  T.must(
60
60
  T.must(dependency.previous_requirements)
61
- .find { |r| r[:file] == gemspec.name }
61
+ .find { |r| r.file == gemspec.name }
62
62
  )
63
- .fetch(:requirement)
63
+ .requirement_string
64
64
 
65
65
  RequirementReplacer.new(
66
66
  dependency: dependency,
67
67
  file_type: :gemspec,
68
- updated_requirement: updated_requirement,
68
+ updated_requirement: T.must(updated_requirement),
69
69
  previous_requirement: previous_requirement
70
70
  ).rewrite(content)
71
71
  end
@@ -75,7 +75,7 @@ module Dependabot
75
75
  changed_requirements =
76
76
  dependency.requirements - T.must(dependency.previous_requirements)
77
77
 
78
- changed_requirements.any? { |f| f[:file] == file.name }
78
+ changed_requirements.any? { |f| f.file == file.name }
79
79
  end
80
80
  end
81
81
  end
@@ -29,9 +29,7 @@ module Dependabot
29
29
  # No `/m`: it would let the greedy `.*` in `entries` match newlines and
30
30
  # swallow the trailing `BUNDLED WITH` section. `^` is line-anchored anyway.
31
31
  CHECKSUMS_SECTION = /(^CHECKSUMS\n)(?<entries>(?:^ .*\n)+)/
32
- BUNDLED_WITH_VERSION_REGEX = /BUNDLED WITH\s+(?<version>\d+\.\d+\.\d+)/m
33
32
  BUNDLER_CHECKSUM_ENTRY_REGEX = /^ bundler \([^)]+\).*\n?$/
34
- MIN_BUNDLER_CHECKSUM_VERSION = Gem::Version.new("4.0.11")
35
33
 
36
34
  sig do
37
35
  params(
@@ -250,14 +248,17 @@ module Dependabot
250
248
  lockfile_content = T.must(lockfile).content
251
249
  return false unless lockfile_content&.include?("CHECKSUMS\n")
252
250
 
251
+ # Strip a bundler self-checksum only when the original CHECKSUMS
252
+ # section did not contain one. If the original pins one,
253
+ # restore_bundler_checksum separately swaps a generated entry back to
254
+ # the original when present. Dependabot must not introduce a missing
255
+ # entry: the runner's regular-gem install can calculate a checksum that
256
+ # a default-gem install cannot (ruby/rubygems#9512), and its runtime
257
+ # bundler version need not match BUNDLED WITH because Dependabot does
258
+ # not manage that version. This can add unrelated or mismatched
259
+ # metadata and cause lockfile churn.
253
260
  checksums_section = lockfile_content.match(CHECKSUMS_SECTION)
254
- return false if checksums_section && T.must(checksums_section[:entries]).match?(BUNDLER_CHECKSUM_ENTRY_REGEX)
255
-
256
- bundled_with = lockfile_content.match(BUNDLED_WITH_VERSION_REGEX)&.[](:version)
257
- return false unless bundled_with
258
-
259
- bundled_with_version = Gem::Version.new(bundled_with)
260
- bundled_with_version >= Gem::Version.new("4.0.0") && bundled_with_version < MIN_BUNDLER_CHECKSUM_VERSION
261
+ !(checksums_section && T.must(checksums_section[:entries]).match?(BUNDLER_CHECKSUM_ENTRY_REGEX))
261
262
  end
262
263
 
263
264
  sig { params(lockfile_body: String).returns(String) }
@@ -95,9 +95,9 @@ module Dependabot
95
95
 
96
96
  sig { returns(T.nilable(Dependabot::Source)) }
97
97
  def find_source_from_git_url
98
- info = dependency.requirements.filter_map { |r| r[:source] }.first
98
+ info = T.must(dependency.requirements.filter_map(&:source_hash).first)
99
99
 
100
- url = info[:url] || info.fetch("url")
100
+ url = T.cast(info[:url] || info.fetch("url"), T.nilable(String))
101
101
  Source.from_url(url)
102
102
  end
103
103
 
@@ -222,8 +222,8 @@ module Dependabot
222
222
  def registry_url
223
223
  return base_url if new_source_type == "default"
224
224
 
225
- info = dependency.requirements.filter_map { |r| r[:source] }.first
226
- info[:url] || info.fetch("url")
225
+ info = T.must(dependency.requirements.filter_map(&:source_hash).first)
226
+ T.cast(info[:url] || info.fetch("url"), String)
227
227
  end
228
228
 
229
229
  sig { returns(String) }
@@ -214,9 +214,9 @@ module Dependabot
214
214
  return nil unless dependency&.requirements&.any?
215
215
 
216
216
  first_requirement = dependency.requirements.first
217
- return nil unless first_requirement && first_requirement[:source]
217
+ return nil unless first_requirement
218
218
 
219
- url = T.let(first_requirement[:source][:url], T.nilable(String))
219
+ url = first_requirement.source_string("url")
220
220
  return nil unless url
221
221
 
222
222
  url.end_with?("/") ? url.chop : url
@@ -242,9 +242,9 @@ module Dependabot
242
242
  return nil unless dependency.requirements.any?
243
243
 
244
244
  first_requirement = dependency.requirements.first
245
- return nil unless first_requirement && first_requirement[:source]
245
+ return nil unless first_requirement
246
246
 
247
- first_requirement[:source][:type]
247
+ first_requirement.source_string("type")
248
248
  end
249
249
 
250
250
  sig { override.returns(String) }
@@ -13,9 +13,9 @@ module Dependabot
13
13
 
14
14
  GEM_DEP_SPLIT = T.let(/\A(?<name>[a-zA-Z0-9_\-]+):(?<version>.+)\z/, Regexp)
15
15
 
16
- sig { params(req: T::Hash[Symbol, String], version: Gem::Version).returns(T::Boolean) }
16
+ sig { params(req: Dependabot::DependencyRequirement, version: Gem::Version).returns(T::Boolean) }
17
17
  def self.satisfied_by?(req, version)
18
- new(req[:requirement]).satisfied_by?(version)
18
+ new(req.requirement_string).satisfied_by?(version)
19
19
  end
20
20
 
21
21
  # For consistency with other languages, we define a requirements array.
@@ -273,20 +273,20 @@ module Dependabot
273
273
  sig { params(filename: String).returns(String) }
274
274
  def updated_version_req_lower_bound(filename) # rubocop:disable Metrics/CyclomaticComplexity
275
275
  original_req = dependency.requirements
276
- .find { |r| r.fetch(:file) == filename }
277
- &.fetch(:requirement)
276
+ .find { |r| r.file == filename }
277
+ &.requirement_string
278
278
 
279
279
  if original_req && !unlock_requirement? then original_req
280
280
  elsif dependency.version&.match?(/^[0-9a-f]{40}$/) then ">= 0"
281
281
  elsif dependency.version then ">= #{dependency.version}"
282
282
  else
283
283
  version_for_requirement =
284
- dependency.requirements.map { |r| r[:requirement] }
285
- .reject { |req_string| req_string.start_with?("<") }
286
- .select { |req_string| req_string.match?(VERSION_REGEX) }
287
- .map { |req_string| req_string.match(VERSION_REGEX)&.to_s }
288
- .select { |version| Bundler::Version.correct?(version) }
289
- .max_by { |version| Bundler::Version.new(version) }
284
+ dependency.requirements.filter_map(&:requirement_string)
285
+ .reject { |req_string| req_string.start_with?("<") }
286
+ .select { |req_string| req_string.match?(VERSION_REGEX) }
287
+ .map { |req_string| req_string.match(VERSION_REGEX)&.to_s }
288
+ .select { |version| Bundler::Version.correct?(version) }
289
+ .max_by { |version| Bundler::Version.new(version) }
290
290
 
291
291
  ">= #{version_for_requirement || 0}"
292
292
  end
@@ -94,7 +94,7 @@ module Dependabot
94
94
  # rubocop:disable Metrics/AbcSize
95
95
  sig { returns(T::Array[Dependabot::Dependency]) }
96
96
  def force_update
97
- requirement = dependency.requirements.find { |req| req[:file] == T.must(gemfile).name }
97
+ requirement = dependency.requirements.find { |req| req.file == T.must(gemfile).name }
98
98
 
99
99
  valid_gem_version?(target_version)
100
100
 
@@ -192,11 +192,11 @@ module Dependabot
192
192
  )
193
193
  end
194
194
 
195
- sig { params(dependency: Dependabot::Dependency).returns(T.nilable(T::Hash[Symbol, T.untyped])) }
195
+ sig { params(dependency: Dependabot::Dependency).returns(T.nilable(Dependabot::DependencyRequirement::ObjectHash)) }
196
196
  def source_for(dependency)
197
197
  dependency.requirements
198
- .find { |r| r.fetch(:source) }
199
- &.fetch(:source)
198
+ .find(&:source)
199
+ &.source_hash
200
200
  end
201
201
 
202
202
  sig { returns(T.nilable(Dependabot::DependencyFile)) }
@@ -85,8 +85,10 @@ module Dependabot
85
85
  return unless git?
86
86
 
87
87
  source_details =
88
- dependency.requirements.map { |r| r.fetch(:source) }
89
- .uniq.compact.first
88
+ T.must(
89
+ dependency.requirements.map(&:source_hash)
90
+ .uniq.compact.first
91
+ )
90
92
 
91
93
  SharedHelpers.with_git_configured(credentials: credentials) do
92
94
  in_a_native_bundler_context do |tmp_dir|
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "excon"
@@ -128,7 +128,7 @@ module Dependabot
128
128
  begin
129
129
  current_version = dependency.numeric_version
130
130
  current_version&.prerelease? || dependency.requirements.any? do |req|
131
- req[:requirement].match?(/[a-z]/i)
131
+ T.must(req.requirement_string).match?(/[a-z]/i)
132
132
  end
133
133
  end,
134
134
  T.nilable(T::Boolean)
@@ -28,7 +28,7 @@ module Dependabot
28
28
  params(
29
29
  requirements: T::Array[Dependabot::DependencyRequirement],
30
30
  update_strategy: Dependabot::RequirementsUpdateStrategy,
31
- updated_source: T.nilable(T::Hash[Symbol, T.untyped]),
31
+ updated_source: T.nilable(Dependabot::DependencyRequirement::ObjectHash),
32
32
  latest_version: T.nilable(String),
33
33
  latest_resolvable_version: T.nilable(String)
34
34
  ).void
@@ -66,7 +66,7 @@ module Dependabot
66
66
  return requirements if update_strategy.lockfile_only?
67
67
 
68
68
  requirements.map do |req|
69
- if req[:file].include?(".gemspec")
69
+ if T.must(req.file).include?(".gemspec")
70
70
  update_gemspec_requirement(req)
71
71
  else
72
72
  # If a requirement doesn't come from a gemspec, it must be from
@@ -81,7 +81,7 @@ module Dependabot
81
81
  sig { returns(T::Array[Dependabot::DependencyRequirement]) }
82
82
  attr_reader :requirements
83
83
 
84
- sig { returns(T.nilable(T::Hash[Symbol, T.untyped])) }
84
+ sig { returns(T.nilable(Dependabot::DependencyRequirement::ObjectHash)) }
85
85
  attr_reader :updated_source
86
86
 
87
87
  sig { returns(T.nilable(Dependabot::Bundler::Version)) }
@@ -124,13 +124,13 @@ module Dependabot
124
124
  sig { params(req: Dependabot::DependencyRequirement).returns(Dependabot::DependencyRequirement) }
125
125
  def update_version_requirement(req)
126
126
  requirements =
127
- req[:requirement].split(",").map { |r| Gem::Requirement.new(r) }
127
+ T.must(req.requirement_string).split(",").map { |r| Gem::Requirement.new(r) }
128
128
 
129
129
  new_requirement =
130
130
  if requirements.any?(&:exact?) then latest_resolvable_version.to_s
131
131
  elsif requirements.any? { |r| r.to_s.start_with?("~>") }
132
132
  tw_req = requirements.find { |r| r.to_s.start_with?("~>") }
133
- update_twiddle_version(tw_req, T.must(latest_resolvable_version)).to_s
133
+ update_twiddle_version(T.must(tw_req), T.must(latest_resolvable_version)).to_s
134
134
  else
135
135
  update_gemfile_range(requirements).join(", ")
136
136
  end
@@ -185,21 +185,22 @@ module Dependabot
185
185
  # rubocop:disable Metrics/PerceivedComplexity
186
186
  sig { params(req: Dependabot::DependencyRequirement).returns(Dependabot::DependencyRequirement) }
187
187
  def update_gemspec_requirement(req)
188
- req = Dependabot::DependencyRequirement.create(req.merge(source: updated_source)) if req.fetch(:source)
188
+ req = Dependabot::DependencyRequirement.create(req.merge(source: updated_source)) if req.source
189
189
  return req unless latest_version && latest_resolvable_version
190
190
 
191
191
  requirements =
192
- req[:requirement].split(",").map { |r| Gem::Requirement.new(r) }
192
+ T.must(req.requirement_string).split(",").map { |r| Gem::Requirement.new(r) }
193
+ groups = T.must(req.groups).map(&:to_s)
193
194
 
194
195
  return req if requirements.all? do |r|
195
- requirement_satisfied?(r, req[:groups])
196
+ requirement_satisfied?(r, groups)
196
197
  end
197
198
 
198
199
  updated_requirements =
199
200
  requirements.flat_map do |r|
200
- next r if requirement_satisfied?(r, req[:groups])
201
+ next r if requirement_satisfied?(r, groups)
201
202
 
202
- if req[:groups] == ["development"] then bumped_requirements(r)
203
+ if groups == ["development"] then bumped_requirements(r)
203
204
  else
204
205
  widened_requirements(r)
205
206
  end
@@ -102,7 +102,7 @@ module Dependabot
102
102
 
103
103
  dependency.specific_requirements
104
104
  .all? do |req|
105
- file = T.must(dependency_files.find { |f| f.name == req.fetch(:file) })
105
+ file = T.must(dependency_files.find { |f| f.name == req.file })
106
106
  updated = FileUpdater::RequirementReplacer.new(
107
107
  dependency: dependency,
108
108
  file_type: file.name.end_with?("gemspec") ? :gemspec : :gemfile,
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.389.0
4
+ version: 0.390.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.389.0
18
+ version: 0.390.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.389.0
25
+ version: 0.390.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: parallel
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -354,7 +354,7 @@ licenses:
354
354
  - MIT
355
355
  metadata:
356
356
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
357
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.389.0
357
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.390.0
358
358
  rdoc_options: []
359
359
  require_paths:
360
360
  - lib