dependabot-composer 0.391.0 → 0.393.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: cafb57b046f1164755a998a31aa72aba68c3aea1bac24495f6f8118dc629c591
4
- data.tar.gz: b1e4d87a77c309bfcf68a3de9815ba0f0aafbd7f464c16359d06b3810f8a22e4
3
+ metadata.gz: 78b54a4ac406d7d5f1cae0f767b47f6ba8eb7671d202fd379bd560201f5d7cc7
4
+ data.tar.gz: 020ec993034ceea2e4aa1e4f11d6d87486499bb0a5e241a7087ffbad2b0d981f
5
5
  SHA512:
6
- metadata.gz: d853e55644fa3a6ea0ad5e87b8cfa030f9e377a093479dcabca223ee925e7fc19b78c6eefced487b551cb3daf336c1c246eedea9dbdc36818ac6c1d65146cf7b
7
- data.tar.gz: 4e44a6f2b7190d21ccca3fd7ab29eb0ab7775d98beb73f131bb766c99ece304e410a8cb27d94c9312ff1edecdfbb130036bdc7115a90134a970de5e67c9b0d8d
6
+ metadata.gz: de52472901295cf6f857c01953829a2931d77423ec1b713e4789ed782b016012cdd70543be3c9c4463f89f78f2e4239b6c88eee521c71230e227e73f576c0c61
7
+ data.tar.gz: d8ea50434bf9909eb7bc3592bbcbe597c72112ac29e611e04fa6688ea31a2ab45e2984d149c0c89fb365c07bf05836a2a8bc0384ec5d691d58801028311cc58e
@@ -2684,11 +2684,11 @@
2684
2684
  },
2685
2685
  {
2686
2686
  "name": "phpstan/phpstan",
2687
- "version": "2.2.7",
2687
+ "version": "2.2.8",
2688
2688
  "dist": {
2689
2689
  "type": "zip",
2690
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/692db47b9dddb0487934e5236e77d48594aef921",
2691
- "reference": "692db47b9dddb0487934e5236e77d48594aef921",
2690
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e285254e60f33c21902efef4a926ca0987c06804",
2691
+ "reference": "e285254e60f33c21902efef4a926ca0987c06804",
2692
2692
  "shasum": ""
2693
2693
  },
2694
2694
  "require": {
@@ -2744,7 +2744,7 @@
2744
2744
  "type": "github"
2745
2745
  }
2746
2746
  ],
2747
- "time": "2026-07-29T17:39:32+00:00"
2747
+ "time": "2026-08-04T22:21:45+00:00"
2748
2748
  },
2749
2749
  {
2750
2750
  "name": "psr/event-dispatcher",
@@ -122,21 +122,24 @@ module Dependabot
122
122
 
123
123
  sig { returns(T::Hash[String, String]) }
124
124
  def run_update_helper
125
- SharedHelpers.with_git_configured(credentials: T.unsafe(credentials)) do
126
- SharedHelpers.run_helper_subprocess(
127
- command: "php -d memory_limit=-1 #{php_helper_path}",
128
- allow_unsafe_shell_command: true,
129
- function: "update",
130
- env: credentials_env,
131
- args: [
132
- Dir.pwd,
133
- dependency.name,
134
- dependency.version,
135
- git_credentials,
136
- registry_credentials
137
- ]
138
- )
139
- end
125
+ T.cast(
126
+ SharedHelpers.with_git_configured(credentials: credentials) do
127
+ SharedHelpers.run_helper_subprocess(
128
+ command: "php -d memory_limit=-1 #{php_helper_path}",
129
+ allow_unsafe_shell_command: true,
130
+ function: "update",
131
+ env: credentials_env,
132
+ args: [
133
+ Dir.pwd,
134
+ dependency.name,
135
+ dependency.version,
136
+ git_credentials,
137
+ registry_credentials
138
+ ]
139
+ )
140
+ end,
141
+ T::Hash[String, String]
142
+ )
140
143
  end
141
144
 
142
145
  sig { returns(String) }
@@ -320,8 +323,8 @@ module Dependabot
320
323
  next content unless Composer::Version.correct?(updated_req)
321
324
 
322
325
  old_req =
323
- dep.requirements.find { |r| r[:file] == PackageManager::MANIFEST_FILENAME }
324
- &.fetch(:requirement)
326
+ dep.requirements.find { |r| r.file == PackageManager::MANIFEST_FILENAME }
327
+ &.requirement_string
325
328
 
326
329
  # When updating a subdep there won't be an old requirement
327
330
  next content unless old_req
@@ -418,13 +421,15 @@ module Dependabot
418
421
  SharedHelpers.in_a_temporary_directory do
419
422
  File.write(PackageManager::MANIFEST_FILENAME, updated_composer_json_content)
420
423
 
421
- content_hash =
424
+ content_hash = T.cast(
422
425
  SharedHelpers.run_helper_subprocess(
423
426
  command: "#{Language::NAME} #{php_helper_path}",
424
427
  function: "get_content_hash",
425
428
  env: credentials_env,
426
429
  args: [Dir.pwd]
427
- )
430
+ ),
431
+ String
432
+ )
428
433
 
429
434
  content.gsub(existing_hash, content_hash)
430
435
  end
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "sorbet-runtime"
@@ -23,8 +23,8 @@ module Dependabot
23
23
  dependencies.reduce(manifest.content.dup) do |content, dep|
24
24
  updated_content = content
25
25
  updated_requirements(dep).each do |new_req|
26
- old_req = old_requirement(dep, new_req)&.fetch(:requirement)
27
- updated_req = new_req.fetch(:requirement)
26
+ old_req = T.must(old_requirement(dep, new_req)&.requirement_string)
27
+ updated_req = T.must(new_req.requirement_string)
28
28
 
29
29
  regex =
30
30
  /
@@ -54,20 +54,20 @@ module Dependabot
54
54
 
55
55
  sig { params(dependency: Dependabot::Dependency).returns(T::Array[Dependabot::DependencyRequirement]) }
56
56
  def new_requirements(dependency)
57
- dependency.requirements.select { |r| r[:file] == manifest.name }
57
+ dependency.requirements.select { |r| r.file == manifest.name }
58
58
  end
59
59
 
60
60
  sig do
61
61
  params(
62
62
  dependency: Dependabot::Dependency,
63
- new_requirement: T::Hash[Symbol, T.untyped]
63
+ new_requirement: Dependabot::DependencyRequirement
64
64
  )
65
- .returns(T.nilable(T::Hash[Symbol, T.untyped]))
65
+ .returns(T.nilable(Dependabot::DependencyRequirement))
66
66
  end
67
67
  def old_requirement(dependency, new_requirement)
68
68
  T.must(dependency.previous_requirements)
69
- .select { |r| r[:file] == manifest.name }
70
- .find { |r| r[:groups] == new_requirement[:groups] }
69
+ .select { |r| r.file == manifest.name }
70
+ .find { |r| r.groups == new_requirement.groups }
71
71
  end
72
72
 
73
73
  sig { params(dependency: Dependabot::Dependency).returns(T::Array[Dependabot::DependencyRequirement]) }
@@ -81,7 +81,7 @@ module Dependabot
81
81
  changed_requirements =
82
82
  dependency.requirements - T.must(dependency.previous_requirements)
83
83
 
84
- changed_requirements.any? { |f| f[:file] == file.name }
84
+ changed_requirements.any? { |requirement| requirement.file == file.name }
85
85
  end
86
86
  end
87
87
  end
@@ -36,12 +36,7 @@ module Dependabot
36
36
 
37
37
  sig { returns(T.nilable(Source)) }
38
38
  def source_from_dependency
39
- source_url =
40
- dependency.requirements
41
- .filter_map { |r| r.fetch(:source) }
42
- .first&.fetch(:url, nil)
43
-
44
- Source.from_url(source_url)
39
+ Source.from_url(dependency.source_string("url"))
45
40
  end
46
41
 
47
42
  sig { returns(T.nilable(Source)) }
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "excon"
@@ -74,7 +74,7 @@ module Dependabot
74
74
  return true if current_version&.prerelease?
75
75
 
76
76
  dependency.requirements.any? do |req|
77
- req[:requirement].match?(/\d-[A-Za-z]/)
77
+ req.requirement_string&.match?(/\d-[A-Za-z]/)
78
78
  end
79
79
  end
80
80
 
@@ -11,6 +11,7 @@ require "sorbet-runtime"
11
11
  require "dependabot/composer/requirement"
12
12
  require "dependabot/composer/update_checker"
13
13
  require "dependabot/composer/version"
14
+ require "dependabot/dependency_requirement"
14
15
  require "dependabot/requirements_update_strategy"
15
16
 
16
17
  module Dependabot
@@ -36,7 +37,7 @@ module Dependabot
36
37
 
37
38
  sig do
38
39
  params(
39
- requirements: T::Array[T::Hash[Symbol, String]],
40
+ requirements: T::Array[Dependabot::DependencyRequirement],
40
41
  update_strategy: Dependabot::RequirementsUpdateStrategy,
41
42
  latest_resolvable_version: T.nilable(T.any(String, Composer::Version))
42
43
  ).void
@@ -46,7 +47,10 @@ module Dependabot
46
47
  update_strategy:,
47
48
  latest_resolvable_version:
48
49
  )
49
- @requirements = requirements
50
+ @requirements = T.let(
51
+ requirements.map { |requirement| Dependabot::DependencyRequirement.create(requirement) },
52
+ T::Array[Dependabot::DependencyRequirement]
53
+ )
50
54
  @update_strategy = update_strategy
51
55
 
52
56
  check_update_strategy
@@ -59,7 +63,7 @@ module Dependabot
59
63
  )
60
64
  end
61
65
 
62
- sig { returns(T::Array[T::Hash[Symbol, String]]) }
66
+ sig { returns(T::Array[Dependabot::DependencyRequirement]) }
63
67
  def updated_requirements
64
68
  return requirements if update_strategy.lockfile_only?
65
69
  return requirements unless latest_resolvable_version
@@ -69,7 +73,7 @@ module Dependabot
69
73
 
70
74
  private
71
75
 
72
- sig { returns(T::Array[T::Hash[Symbol, String]]) }
76
+ sig { returns(T::Array[Dependabot::DependencyRequirement]) }
73
77
  attr_reader :requirements
74
78
 
75
79
  sig { returns(Dependabot::RequirementsUpdateStrategy) }
@@ -85,9 +89,12 @@ module Dependabot
85
89
  raise "Unknown update strategy: #{update_strategy}"
86
90
  end
87
91
 
88
- sig { params(req: T::Hash[Symbol, String]).returns(T::Hash[Symbol, String]) }
92
+ sig do
93
+ params(req: Dependabot::DependencyRequirement)
94
+ .returns(Dependabot::DependencyRequirement)
95
+ end
89
96
  def updated_requirement(req)
90
- req_string = T.must(req[:requirement]).strip
97
+ req_string = T.must(req.requirement_string).strip
91
98
  or_string_reqs = req_string.split(OR_SEPARATOR)
92
99
  or_separator = req_string.match(OR_SEPARATOR)&.to_s || " || "
93
100
  branch_or_string_reqs, numeric_or_string_reqs = or_string_reqs
@@ -110,12 +117,16 @@ module Dependabot
110
117
  # Add a T.must for new_req as it's defined in the case statement with multiple options
111
118
  new_req = T.must(new_req)
112
119
  new_req_string =
113
- [new_req[:requirement], *branch_or_string_reqs].join(or_separator)
114
- new_req.merge(requirement: new_req_string)
120
+ [T.must(new_req.requirement_string), *branch_or_string_reqs].join(or_separator)
121
+ Dependabot::DependencyRequirement.create(new_req.merge(requirement: new_req_string))
122
+ end
123
+
124
+ sig do
125
+ params(req: Dependabot::DependencyRequirement)
126
+ .returns(Dependabot::DependencyRequirement)
115
127
  end
116
- sig { params(req: T::Hash[Symbol, String]).returns(T::Hash[Symbol, String]) }
117
128
  def updated_alias(req)
118
- req_string = T.must(req[:requirement])
129
+ req_string = T.must(req.requirement_string)
119
130
  parts = req_string.split(/\sas\s/)
120
131
  real_version = T.must(parts.first).strip
121
132
 
@@ -125,13 +136,16 @@ module Dependabot
125
136
 
126
137
  new_version_string = T.must(latest_resolvable_version).to_s
127
138
  new_req = req_string.sub(real_version, new_version_string)
128
- req.merge(requirement: new_req)
139
+ Dependabot::DependencyRequirement.create(req.merge(requirement: new_req))
129
140
  end
130
141
 
131
142
  # rubocop:disable Metrics/PerceivedComplexity
132
- sig { params(req: T::Hash[Symbol, String], or_separator: String).returns(T::Hash[Symbol, String]) }
143
+ sig do
144
+ params(req: Dependabot::DependencyRequirement, or_separator: String)
145
+ .returns(Dependabot::DependencyRequirement)
146
+ end
133
147
  def widen_requirement(req, or_separator)
134
- current_requirement = T.must(req[:requirement])
148
+ current_requirement = T.must(req.requirement_string)
135
149
  reqs = current_requirement.strip.split(SEPARATOR).map(&:strip)
136
150
 
137
151
  updated_requirement =
@@ -147,13 +161,16 @@ module Dependabot
147
161
  update_version_string(current_requirement)
148
162
  end
149
163
 
150
- req.merge(requirement: updated_requirement)
164
+ Dependabot::DependencyRequirement.create(req.merge(requirement: updated_requirement))
151
165
  end
152
166
  # rubocop:enable Metrics/PerceivedComplexity
153
167
 
154
- sig { params(req: T::Hash[Symbol, String], or_separator: String).returns(T::Hash[Symbol, String]) }
168
+ sig do
169
+ params(req: Dependabot::DependencyRequirement, or_separator: String)
170
+ .returns(Dependabot::DependencyRequirement)
171
+ end
155
172
  def update_requirement_version(req, or_separator)
156
- current_requirement = T.must(req[:requirement])
173
+ current_requirement = T.must(req.requirement_string)
157
174
  reqs = current_requirement.strip.split(SEPARATOR).map(&:strip)
158
175
 
159
176
  updated_requirement =
@@ -167,7 +184,7 @@ module Dependabot
167
184
  update_version_string(current_requirement)
168
185
  end
169
186
 
170
- req.merge(requirement: updated_requirement)
187
+ Dependabot::DependencyRequirement.create(req.merge(requirement: updated_requirement))
171
188
  end
172
189
 
173
190
  sig { params(requirement_string: String).returns(T::Boolean) }
@@ -188,19 +188,22 @@ module Dependabot
188
188
 
189
189
  sig { returns(T.nilable(String)) }
190
190
  def run_update_checker
191
- SharedHelpers.with_git_configured(credentials: credentials) do
192
- SharedHelpers.run_helper_subprocess(
193
- command: "php -d memory_limit=-1 #{php_helper_path}",
194
- allow_unsafe_shell_command: true,
195
- function: "get_latest_resolvable_version",
196
- args: [
197
- Dir.pwd,
198
- dependency.name.downcase,
199
- git_credentials,
200
- registry_credentials
201
- ]
202
- )
203
- end
191
+ T.cast(
192
+ SharedHelpers.with_git_configured(credentials: credentials) do
193
+ SharedHelpers.run_helper_subprocess(
194
+ command: "php -d memory_limit=-1 #{php_helper_path}",
195
+ allow_unsafe_shell_command: true,
196
+ function: "get_latest_resolvable_version",
197
+ args: [
198
+ Dir.pwd,
199
+ dependency.name.downcase,
200
+ git_credentials,
201
+ registry_credentials
202
+ ]
203
+ )
204
+ end,
205
+ T.nilable(String)
206
+ )
204
207
  end
205
208
 
206
209
  sig { params(unlock_requirement: T::Boolean).returns(String) }
@@ -265,22 +268,22 @@ module Dependabot
265
268
  end
266
269
 
267
270
  # rubocop:disable Metrics/PerceivedComplexity
268
- # rubocop:disable Metrics/AbcSize
269
271
  sig { returns(String) }
270
272
  def updated_version_requirement_string
271
273
  lower_bound =
272
274
  if requirements_to_unlock == :none
273
- dependency.requirements.first&.fetch(:requirement) || ">= 0"
275
+ dependency.requirements.first&.requirement_string || ">= 0"
274
276
  elsif dependency.version
275
277
  ">= #{dependency.version}"
276
278
  else
277
279
  version_for_requirement =
278
- dependency.requirements.filter_map { |r| r[:requirement] }
279
- .reject { |req_string| req_string.start_with?("<") }
280
- .select { |req_string| req_string.match?(VERSION_REGEX) }
281
- .map { |req_string| req_string.match(VERSION_REGEX) }
282
- .select { |version| requirement_valid?(">= #{version}") }
283
- .max_by { |version| Composer::Version.new(version.to_s) }
280
+ dependency.requirements
281
+ .filter_map(&:requirement_string)
282
+ .reject { |req_string| req_string.start_with?("<") }
283
+ .select { |req_string| req_string.match?(VERSION_REGEX) }
284
+ .map { |req_string| req_string.match(VERSION_REGEX) }
285
+ .select { |version| requirement_valid?(">= #{version}") }
286
+ .max_by { |version| Composer::Version.new(version.to_s) }
284
287
 
285
288
  ">= #{version_for_requirement || 0}"
286
289
  end
@@ -301,7 +304,6 @@ module Dependabot
301
304
  lower_bound + ", == #{latest_allowable_version}"
302
305
  end
303
306
  # rubocop:enable Metrics/PerceivedComplexity
304
- # rubocop:enable Metrics/AbcSize
305
307
 
306
308
  # TODO: Extract error handling and share between the lockfile updater
307
309
  #
@@ -156,13 +156,13 @@ module Dependabot
156
156
 
157
157
  sig { returns(T::Boolean) }
158
158
  def path_dependency?
159
- dependency.requirements.any? { |r| r.dig(:source, :type) == "path" }
159
+ dependency.requirements.any? { |r| r.source_string("type") == "path" }
160
160
  end
161
161
 
162
162
  # To be a true git dependency, it must have a branch.
163
163
  sig { returns(T::Boolean) }
164
164
  def git_dependency?
165
- dependency.requirements.any? { |r| r.dig(:source, :branch) }
165
+ dependency.requirements.any? { |r| r.source_string("branch") }
166
166
  end
167
167
 
168
168
  sig { returns(Dependabot::DependencyFile) }
@@ -191,7 +191,7 @@ module Dependabot
191
191
  if git_commit_checker.pinned_ref_looks_like_version? &&
192
192
  git_commit_checker.local_tag_for_latest_version(update_cooldown)
193
193
  latest_tag = git_commit_checker.local_tag_for_latest_version(update_cooldown)
194
- return latest_tag&.fetch(:commit_sha)
194
+ return latest_tag&.commit_sha
195
195
  end
196
196
 
197
197
  # If the dependency is pinned to a tag that doesn't look like a
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-composer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.391.0
4
+ version: 0.393.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.391.0
18
+ version: 0.393.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.391.0
25
+ version: 0.393.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: debug
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -276,7 +276,7 @@ licenses:
276
276
  - MIT
277
277
  metadata:
278
278
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
279
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.391.0
279
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.393.0
280
280
  rdoc_options: []
281
281
  require_paths:
282
282
  - lib